diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index f19a192b2..a8a769906 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2235,5 +2235,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ktg_profile_group_id" = "Group ID"; "ktg_profile_supergroup_id" = "Supergroup ID"; "ktg_profile_channel_id" = "Channel ID"; +"ktg_pinned_message_show" = "Show pinned message"; +"ktg_pinned_message_hide" = "Hide pinned message"; // Keys finished diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 42a329086..b253333d0 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -5654,15 +5654,19 @@ bool HistoryWidget::hasHiddenPinnedMessage(not_null peer) { return result; } -bool HistoryWidget::unhidePinnedMessage(not_null peer) { +bool HistoryWidget::switchPinnedHidden(not_null peer, bool hidden) { auto result = false; auto pinnedId = peer->pinnedMessageId(); if (pinnedId) { auto it = Global::HiddenPinnedMessages().constFind(peer->id); - if (it != Global::HiddenPinnedMessages().cend()) { + if (it != Global::HiddenPinnedMessages().cend() && !hidden) { Global::RefHiddenPinnedMessages().remove(peer->id); Local::writeUserSettings(); result = true; + } else if (it == Global::HiddenPinnedMessages().cend() && hidden) { + Global::RefHiddenPinnedMessages().insert(peer->id, pinnedId); + Local::writeUserSettings(); + result = true; } } return result; @@ -5671,7 +5675,7 @@ bool HistoryWidget::unhidePinnedMessage(not_null peer) { bool HistoryWidget::pinnedMsgVisibilityUpdated() { auto result = false; auto pinnedId = _peer->pinnedMessageId(); - if (pinnedId && !_peer->canPinMessages()) { + if (pinnedId) { auto it = Global::HiddenPinnedMessages().constFind(_peer->id); if (it != Global::HiddenPinnedMessages().cend()) { if (it.value() == pinnedId) { diff --git a/Telegram/SourceFiles/history/history_widget.h b/Telegram/SourceFiles/history/history_widget.h index 3feb7e782..2a5e0be9b 100644 --- a/Telegram/SourceFiles/history/history_widget.h +++ b/Telegram/SourceFiles/history/history_widget.h @@ -138,7 +138,7 @@ public: const std::optional &oldId = std::nullopt); static bool hasHiddenPinnedMessage(not_null peer); - static bool unhidePinnedMessage(not_null peer); + static bool switchPinnedHidden(not_null peer, bool hidden); void updateControlsVisibility(); void updateControlsGeometry(); diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 9a6a47e2e..d5c1a6c95 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -388,10 +388,17 @@ void Filler::addUserActions(not_null user) { user->session().supportHelper().editInfo(user); }); } - if (user->isSelf() && HistoryWidget::hasHiddenPinnedMessage(user)) { - _addAction( - tr::lng_pinned_message(tr::now), - [=] { PeerMenuUnhidePinnedMessage(user); }); + if (user->isSelf() && user->pinnedMessageId()) { + auto hasHidden = HistoryWidget::hasHiddenPinnedMessage(user); + if (hasHidden) { + _addAction( + tr::ktg_pinned_message_show(tr::now), + [=] { PeerMenuUnhidePinnedMessage(user); }); + } else { + _addAction( + tr::ktg_pinned_message_hide(tr::now), + [=] { PeerMenuHidePinnedMessage(user); }); + } } if (!user->isContact() && !user->isSelf() && !user->isBot()) { _addAction( @@ -445,10 +452,17 @@ void Filler::addChatActions(not_null chat) { controller->showEditPeerBox(chat); }); } - if (HistoryWidget::hasHiddenPinnedMessage(chat)) { - _addAction( - tr::lng_pinned_message(tr::now), - [=] { PeerMenuUnhidePinnedMessage(chat); }); + if (chat->pinnedMessageId()) { + auto hasHidden = HistoryWidget::hasHiddenPinnedMessage(chat); + if (hasHidden) { + _addAction( + tr::ktg_pinned_message_show(tr::now), + [=] { PeerMenuUnhidePinnedMessage(chat); }); + } else { + _addAction( + tr::ktg_pinned_message_hide(tr::now), + [=] { PeerMenuHidePinnedMessage(chat); }); + } } if (chat->canAddMembers()) { _addAction( @@ -496,10 +510,17 @@ void Filler::addChannelActions(not_null channel) { controller->showEditPeerBox(channel); }); } - if (HistoryWidget::hasHiddenPinnedMessage(channel)) { - _addAction( - tr::lng_pinned_message(tr::now), - [=] { PeerMenuUnhidePinnedMessage(channel); }); + if (channel->pinnedMessageId()) { + auto hasHidden = HistoryWidget::hasHiddenPinnedMessage(channel); + if (hasHidden) { + _addAction( + tr::ktg_pinned_message_show(tr::now), + [=] { PeerMenuUnhidePinnedMessage(channel); }); + } else { + _addAction( + tr::ktg_pinned_message_hide(tr::now), + [=] { PeerMenuHidePinnedMessage(channel); }); + } } if (channel->canAddMembers()) { _addAction( @@ -653,8 +674,18 @@ void FolderFiller::addTogglesForArchive() { } // namespace + +void PeerMenuHidePinnedMessage(not_null peer) { + auto hidden = HistoryWidget::switchPinnedHidden(peer, true); + if (hidden) { + Notify::peerUpdatedDelayed( + peer, + Notify::PeerUpdate::Flag::PinnedMessageChanged); + } +} + void PeerMenuUnhidePinnedMessage(not_null peer) { - auto unhidden = HistoryWidget::unhidePinnedMessage(peer); + auto unhidden = HistoryWidget::switchPinnedHidden(peer, false); if (unhidden) { Notify::peerUpdatedDelayed( peer, diff --git a/Telegram/SourceFiles/window/window_peer_menu.h b/Telegram/SourceFiles/window/window_peer_menu.h index 8f671a556..ad0605a55 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.h +++ b/Telegram/SourceFiles/window/window_peer_menu.h @@ -48,6 +48,7 @@ void PeerMenuAddMuteAction( not_null peer, const PeerMenuCallback &addAction); +void PeerMenuHidePinnedMessage(not_null peer); void PeerMenuUnhidePinnedMessage(not_null peer); void PeerMenuExportChat(not_null peer); void PeerMenuDeleteContact(not_null user);