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

View file

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

View file

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