2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-09-05 00:46:08 +00:00

Track multiple pinned messages in MessagesList.

This commit is contained in:
John Preston
2020-10-09 15:56:33 +03:00
parent 399b03beb2
commit ec35e3f081
19 changed files with 435 additions and 107 deletions

View File

@@ -1083,6 +1083,17 @@ void Updates::applyUpdateNoPtsCheck(const MTPUpdate &update) {
_session->data().updateEditedMessage(d.vmessage());
} break;
case mtpc_updatePinnedChannelMessages: {
const auto &d = update.c_updatePinnedChannelMessages();
const auto channelId = d.vchannel_id().v;
for (const auto &msgId : d.vmessages().v) {
const auto item = session().data().message(channelId, msgId.v);
if (item) {
item->setIsPinned(d.is_pinned());
}
}
} break;
case mtpc_updateEditMessage: {
auto &d = update.c_updateEditMessage();
_session->data().updateEditedMessage(d.vmessage());
@@ -1098,6 +1109,17 @@ void Updates::applyUpdateNoPtsCheck(const MTPUpdate &update) {
_session->data().processMessagesDeleted(d.vchannel_id().v, d.vmessages().v);
} break;
case mtpc_updatePinnedMessages: {
const auto &d = update.c_updatePinnedMessages();
const auto peerId = peerFromMTP(d.vpeer());
for (const auto &msgId : d.vmessages().v) {
const auto item = session().data().message(0, msgId.v);
if (item) {
item->setIsPinned(d.is_pinned());
}
}
} break;
default: Unexpected("Type in applyUpdateNoPtsCheck()");
}
}
@@ -1393,6 +1415,21 @@ void Updates::feedUpdate(const MTPUpdate &update) {
}
} break;
case mtpc_updatePinnedChannelMessages: {
auto &d = update.c_updatePinnedChannelMessages();
auto channel = session().data().channelLoaded(d.vchannel_id().v);
if (channel && !_handlingChannelDifference) {
if (channel->ptsRequesting()) { // skip global updates while getting channel difference
return;
} else {
channel->ptsUpdateAndApply(d.vpts().v, d.vpts_count().v, update);
}
} else {
applyUpdateNoPtsCheck(update);
}
} break;
// Messages being read.
case mtpc_updateReadHistoryInbox: {
auto &d = update.c_updateReadHistoryInbox();
@@ -1998,6 +2035,12 @@ void Updates::feedUpdate(const MTPUpdate &update) {
}
} break;
// Pinned message.
case mtpc_updatePinnedMessages: {
const auto &d = update.c_updatePinnedMessages();
updateAndApply(d.vpts().v, d.vpts_count().v, update);
} break;
////// Cloud sticker sets
case mtpc_updateNewStickerSet: {
const auto &d = update.c_updateNewStickerSet();