diff --git a/Telegram/SourceFiles/data/data_sparse_ids.cpp b/Telegram/SourceFiles/data/data_sparse_ids.cpp index 86a759bc3b..7e3152df81 100644 --- a/Telegram/SourceFiles/data/data_sparse_ids.cpp +++ b/Telegram/SourceFiles/data/data_sparse_ids.cpp @@ -150,13 +150,17 @@ base::optional SparseIdsMergedSlice::distance( } auto SparseIdsMergedSlice::nearest( - UniversalMsgId id) const -> base::optional { - auto convertFromMigratedNearest = [](MsgId result) { - return result - ServerMaxMsgId; + UniversalMsgId id) const -> base::optional { + auto convertFromPartNearest = [&](MsgId result) { + return ComputeId(_key.peerId, result); + }; + auto convertFromMigratedNearest = [&](MsgId result) { + return ComputeId(_key.migratedPeerId, result); }; if (IsServerMsgId(id)) { if (auto partNearestId = _part.nearest(id)) { - return partNearestId; + return partNearestId + | convertFromPartNearest; } else if (isolatedInPart()) { return base::none; } @@ -171,7 +175,8 @@ auto SparseIdsMergedSlice::nearest( } else if (isolatedInMigrated()) { return base::none; } - return _part.nearest(0); + return _part.nearest(0) + | convertFromPartNearest; } SparseIdsSliceBuilder::SparseIdsSliceBuilder( diff --git a/Telegram/SourceFiles/data/data_sparse_ids.h b/Telegram/SourceFiles/data/data_sparse_ids.h index 73ee18ad7b..6cd5b9f29e 100644 --- a/Telegram/SourceFiles/data/data_sparse_ids.h +++ b/Telegram/SourceFiles/data/data_sparse_ids.h @@ -99,7 +99,7 @@ public: int size() const; FullMsgId operator[](int index) const; base::optional distance(const Key &a, const Key &b) const; - base::optional nearest(UniversalMsgId id) const; + base::optional nearest(UniversalMsgId id) const; using SimpleViewerFunction = rpl::producer( PeerId peerId, diff --git a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp index 1ad98732c8..2a32ee02a7 100644 --- a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp +++ b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp @@ -773,15 +773,16 @@ SparseIdsMergedSlice::Key ListWidget::sliceKey( void ListWidget::refreshViewer() { _viewerLifetime.destroy(); + auto idForViewer = sliceKey(_universalAroundId).universalId; _controller->mediaSource( - sliceKey(_universalAroundId).universalId, + idForViewer, _idsLimit, _idsLimit) - | rpl::start_with_next([this]( + | rpl::start_with_next([=]( SparseIdsMergedSlice &&slice) { _slice = std::move(slice); - if (auto nearest = _slice.nearest(_universalAroundId)) { - _universalAroundId = *nearest; + if (auto nearest = _slice.nearest(idForViewer)) { + _universalAroundId = GetUniversalId(*nearest); } refreshRows(); }, _viewerLifetime); diff --git a/Telegram/SourceFiles/window/window.style b/Telegram/SourceFiles/window/window.style index 1b7d83d85a..c63f0965f1 100644 --- a/Telegram/SourceFiles/window/window.style +++ b/Telegram/SourceFiles/window/window.style @@ -32,7 +32,7 @@ windowShadowShift: 1px; columnMinimalWidthLeft: 260px; columnMinimalWidthMain: 380px; -columnMinimalWidthThird: 292px;//345px; +columnMinimalWidthThird: 345px;//292px;//345px; adaptiveChatWideWidth: 880px;