Fix pinned messages

This commit is contained in:
Eric Kotato 2020-12-29 05:14:15 +03:00
parent 183762b88c
commit 1244373358
3 changed files with 35 additions and 28 deletions

View file

@ -5645,19 +5645,28 @@ bool HistoryWidget::hasHiddenPinnedMessage(not_null<PeerData*> peer) {
bool HistoryWidget::switchPinnedHidden(not_null<PeerData*> peer, bool hidden) {
auto result = false;
auto &session = peer->session();
const auto migrated = peer->migrateFrom();
const auto top = Data::ResolveTopPinnedId(peer, migrated);
const auto universal = !top
? int32(0)
: (migrated && !top.channel)
? (top.msg - ServerMaxMsgId)
: top.msg;
if (universal) {
session.settings().setHiddenPinnedMessageId(peer->id, universal);
session.saveSettingsDelayed();
result = true;
if (hidden) {
const auto migrated = peer->migrateFrom();
const auto top = Data::ResolveTopPinnedId(peer, migrated);
const auto universal = !top
? int32(0)
: (migrated && !top.channel)
? (top.msg - ServerMaxMsgId)
: top.msg;
if (universal) {
session.settings().setHiddenPinnedMessageId(peer->id, universal);
session.saveSettingsDelayed();
result = true;
} else {
session.api().requestFullPeer(peer);
}
} else {
session.api().requestFullPeer(peer);
const auto hiddenId = session.settings().hiddenPinnedMessageId(peer->id);
if (hiddenId != 0) {
session.settings().setHiddenPinnedMessageId(peer->id, 0);
session.saveSettingsDelayed();
result = true;
}
}
return result;
}
@ -5673,9 +5682,7 @@ void HistoryWidget::setupPinnedTracker() {
void HistoryWidget::checkPinnedBarState() {
Expects(_pinnedTracker != nullptr);
const auto hiddenId = _peer->canPinMessages()
? MsgId(0)
: session().settings().hiddenPinnedMessageId(_peer->id);
const auto hiddenId = session().settings().hiddenPinnedMessageId(_peer->id);
const auto currentPinnedId = Data::ResolveTopPinnedId(
_peer,
_migrated ? _migrated->peer.get() : nullptr);

View file

@ -74,8 +74,8 @@ void UnpinMessageBox::hideMessage() {
if (_requestId) return;
auto hidden = HistoryWidget::switchPinnedHidden(_peer, true);
// if (hidden) {
// _peer->session().changes().peerUpdated(_peer, Data::PeerUpdate::Flag::PinnedMessage);
// }
if (hidden) {
_peer->session().changes().peerUpdated(_peer, Data::PeerUpdate::Flag::PinnedMessages);
}
Ui::hideLayer();
}

View file

@ -799,20 +799,20 @@ void Filler::addTogglesForArchive() {
void PeerMenuHidePinnedMessage(not_null<PeerData*> peer) {
auto hidden = HistoryWidget::switchPinnedHidden(peer, true);
// if (hidden) {
// peer->session().changes().peerUpdated(
// peer,
// Data::PeerUpdate::Flag::PinnedMessage);
// }
if (hidden) {
peer->session().changes().peerUpdated(
peer,
Data::PeerUpdate::Flag::PinnedMessages);
}
}
void PeerMenuUnhidePinnedMessage(not_null<PeerData*> peer) {
auto unhidden = HistoryWidget::switchPinnedHidden(peer, false);
// if (unhidden) {
// peer->session().changes().peerUpdated(
// peer,
// Data::PeerUpdate::Flag::PinnedMessage);
// }
if (unhidden) {
peer->session().changes().peerUpdated(
peer,
Data::PeerUpdate::Flag::PinnedMessages);
}
}
void PeerMenuExportChat(not_null<PeerData*> peer) {