Fix preloading of pinned messages.

This commit is contained in:
John Preston 2020-10-21 10:22:06 +03:00
parent 47f5a66350
commit 698c9fc4be
2 changed files with 18 additions and 10 deletions

View File

@ -11,6 +11,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_session.h"
#include "storage/storage_facade.h"
#include "storage/storage_shared_media.h"
#include "data/data_shared_media.h"
#include "data/data_sparse_ids.h"
namespace Data {
namespace {
@ -44,17 +46,21 @@ MsgId PinnedMessages::topId() const {
rpl::producer<PinnedAroundId> PinnedMessages::viewer(
MsgId aroundId,
int limit) const {
return _storage.query(
SharedMediaQuery(
SharedMediaKey(_peer->id, PinnedType, aroundId),
limit,
limit)
) | rpl::map([](const SharedMediaResult &result) {
return SharedMediaViewer(
&_peer->session(),
SharedMediaKey(_peer->id, PinnedType, aroundId),
limit,
limit
) | rpl::map([](const SparseIdsSlice &result) {
auto data = PinnedAroundId();
data.fullCount = result.count;
data.skippedBefore = result.skippedBefore;
data.skippedAfter = result.skippedAfter;
data.ids = result.messageIds | ranges::to_vector;
data.fullCount = result.fullCount();
data.skippedBefore = result.skippedBefore();
data.skippedAfter = result.skippedAfter();
const auto count = result.size();
data.ids.reserve(count);
for (auto i = 0; i != count; ++i) {
data.ids.push_back(result[i]);
}
return data;
});
}

View File

@ -435,6 +435,7 @@ void MessageBar::paintLeftBar(Painter &p) {
st::msgInReplyBarColor->c.alpha() / 3));
const auto radius = line / 2.;
auto hq = PainterHighQualityEnabler(p);
p.setClipRect(bar.x(), 0, bar.width(), fullHeight);
for (auto i = paintFrom; i != paintTill; ++i) {
const auto top = i * single - scroll;
const auto bottom = top + state.size;
@ -454,6 +455,7 @@ void MessageBar::paintLeftBar(Painter &p) {
radius,
radius);
}
p.setClipping(false);
if (_content.count > 4) {
const auto firstScroll = countBarState(2).scroll;
const auto gradientTop = (scroll >= firstScroll)