Fix restoring shared media state.

This commit is contained in:
John Preston 2017-11-12 18:35:20 +04:00
parent fc66550a32
commit 3a25313e61
4 changed files with 17 additions and 11 deletions

View File

@ -150,13 +150,17 @@ base::optional<int> SparseIdsMergedSlice::distance(
} }
auto SparseIdsMergedSlice::nearest( auto SparseIdsMergedSlice::nearest(
UniversalMsgId id) const -> base::optional<UniversalMsgId> { UniversalMsgId id) const -> base::optional<FullMsgId> {
auto convertFromMigratedNearest = [](MsgId result) { auto convertFromPartNearest = [&](MsgId result) {
return result - ServerMaxMsgId; return ComputeId(_key.peerId, result);
};
auto convertFromMigratedNearest = [&](MsgId result) {
return ComputeId(_key.migratedPeerId, result);
}; };
if (IsServerMsgId(id)) { if (IsServerMsgId(id)) {
if (auto partNearestId = _part.nearest(id)) { if (auto partNearestId = _part.nearest(id)) {
return partNearestId; return partNearestId
| convertFromPartNearest;
} else if (isolatedInPart()) { } else if (isolatedInPart()) {
return base::none; return base::none;
} }
@ -171,7 +175,8 @@ auto SparseIdsMergedSlice::nearest(
} else if (isolatedInMigrated()) { } else if (isolatedInMigrated()) {
return base::none; return base::none;
} }
return _part.nearest(0); return _part.nearest(0)
| convertFromPartNearest;
} }
SparseIdsSliceBuilder::SparseIdsSliceBuilder( SparseIdsSliceBuilder::SparseIdsSliceBuilder(

View File

@ -99,7 +99,7 @@ public:
int size() const; int size() const;
FullMsgId operator[](int index) const; FullMsgId operator[](int index) const;
base::optional<int> distance(const Key &a, const Key &b) const; base::optional<int> distance(const Key &a, const Key &b) const;
base::optional<UniversalMsgId> nearest(UniversalMsgId id) const; base::optional<FullMsgId> nearest(UniversalMsgId id) const;
using SimpleViewerFunction = rpl::producer<SparseIdsSlice>( using SimpleViewerFunction = rpl::producer<SparseIdsSlice>(
PeerId peerId, PeerId peerId,

View File

@ -773,15 +773,16 @@ SparseIdsMergedSlice::Key ListWidget::sliceKey(
void ListWidget::refreshViewer() { void ListWidget::refreshViewer() {
_viewerLifetime.destroy(); _viewerLifetime.destroy();
auto idForViewer = sliceKey(_universalAroundId).universalId;
_controller->mediaSource( _controller->mediaSource(
sliceKey(_universalAroundId).universalId, idForViewer,
_idsLimit, _idsLimit,
_idsLimit) _idsLimit)
| rpl::start_with_next([this]( | rpl::start_with_next([=](
SparseIdsMergedSlice &&slice) { SparseIdsMergedSlice &&slice) {
_slice = std::move(slice); _slice = std::move(slice);
if (auto nearest = _slice.nearest(_universalAroundId)) { if (auto nearest = _slice.nearest(idForViewer)) {
_universalAroundId = *nearest; _universalAroundId = GetUniversalId(*nearest);
} }
refreshRows(); refreshRows();
}, _viewerLifetime); }, _viewerLifetime);

View File

@ -32,7 +32,7 @@ windowShadowShift: 1px;
columnMinimalWidthLeft: 260px; columnMinimalWidthLeft: 260px;
columnMinimalWidthMain: 380px; columnMinimalWidthMain: 380px;
columnMinimalWidthThird: 292px;//345px; columnMinimalWidthThird: 345px;//292px;//345px;
adaptiveChatWideWidth: 880px; adaptiveChatWideWidth: 880px;