Option to hide pinned message in chat menu

This commit is contained in:
Eric Kotato 2019-10-01 05:03:40 +03:00
parent 0641e7450d
commit 2515fd69b7
5 changed files with 55 additions and 17 deletions

View file

@ -2235,5 +2235,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"ktg_profile_group_id" = "Group ID"; "ktg_profile_group_id" = "Group ID";
"ktg_profile_supergroup_id" = "Supergroup ID"; "ktg_profile_supergroup_id" = "Supergroup ID";
"ktg_profile_channel_id" = "Channel ID"; "ktg_profile_channel_id" = "Channel ID";
"ktg_pinned_message_show" = "Show pinned message";
"ktg_pinned_message_hide" = "Hide pinned message";
// Keys finished // Keys finished

View file

@ -5654,15 +5654,19 @@ bool HistoryWidget::hasHiddenPinnedMessage(not_null<PeerData*> peer) {
return result; return result;
} }
bool HistoryWidget::unhidePinnedMessage(not_null<PeerData*> peer) { bool HistoryWidget::switchPinnedHidden(not_null<PeerData*> peer, bool hidden) {
auto result = false; auto result = false;
auto pinnedId = peer->pinnedMessageId(); auto pinnedId = peer->pinnedMessageId();
if (pinnedId) { if (pinnedId) {
auto it = Global::HiddenPinnedMessages().constFind(peer->id); auto it = Global::HiddenPinnedMessages().constFind(peer->id);
if (it != Global::HiddenPinnedMessages().cend()) { if (it != Global::HiddenPinnedMessages().cend() && !hidden) {
Global::RefHiddenPinnedMessages().remove(peer->id); Global::RefHiddenPinnedMessages().remove(peer->id);
Local::writeUserSettings(); Local::writeUserSettings();
result = true; result = true;
} else if (it == Global::HiddenPinnedMessages().cend() && hidden) {
Global::RefHiddenPinnedMessages().insert(peer->id, pinnedId);
Local::writeUserSettings();
result = true;
} }
} }
return result; return result;
@ -5671,7 +5675,7 @@ bool HistoryWidget::unhidePinnedMessage(not_null<PeerData*> peer) {
bool HistoryWidget::pinnedMsgVisibilityUpdated() { bool HistoryWidget::pinnedMsgVisibilityUpdated() {
auto result = false; auto result = false;
auto pinnedId = _peer->pinnedMessageId(); auto pinnedId = _peer->pinnedMessageId();
if (pinnedId && !_peer->canPinMessages()) { if (pinnedId) {
auto it = Global::HiddenPinnedMessages().constFind(_peer->id); auto it = Global::HiddenPinnedMessages().constFind(_peer->id);
if (it != Global::HiddenPinnedMessages().cend()) { if (it != Global::HiddenPinnedMessages().cend()) {
if (it.value() == pinnedId) { if (it.value() == pinnedId) {

View file

@ -138,7 +138,7 @@ public:
const std::optional<FullMsgId> &oldId = std::nullopt); const std::optional<FullMsgId> &oldId = std::nullopt);
static bool hasHiddenPinnedMessage(not_null<PeerData*> peer); static bool hasHiddenPinnedMessage(not_null<PeerData*> peer);
static bool unhidePinnedMessage(not_null<PeerData*> peer); static bool switchPinnedHidden(not_null<PeerData*> peer, bool hidden);
void updateControlsVisibility(); void updateControlsVisibility();
void updateControlsGeometry(); void updateControlsGeometry();

View file

@ -388,10 +388,17 @@ void Filler::addUserActions(not_null<UserData*> user) {
user->session().supportHelper().editInfo(user); user->session().supportHelper().editInfo(user);
}); });
} }
if (user->isSelf() && HistoryWidget::hasHiddenPinnedMessage(user)) { if (user->isSelf() && user->pinnedMessageId()) {
_addAction( auto hasHidden = HistoryWidget::hasHiddenPinnedMessage(user);
tr::lng_pinned_message(tr::now), if (hasHidden) {
[=] { PeerMenuUnhidePinnedMessage(user); }); _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()) { if (!user->isContact() && !user->isSelf() && !user->isBot()) {
_addAction( _addAction(
@ -445,10 +452,17 @@ void Filler::addChatActions(not_null<ChatData*> chat) {
controller->showEditPeerBox(chat); controller->showEditPeerBox(chat);
}); });
} }
if (HistoryWidget::hasHiddenPinnedMessage(chat)) { if (chat->pinnedMessageId()) {
_addAction( auto hasHidden = HistoryWidget::hasHiddenPinnedMessage(chat);
tr::lng_pinned_message(tr::now), if (hasHidden) {
[=] { PeerMenuUnhidePinnedMessage(chat); }); _addAction(
tr::ktg_pinned_message_show(tr::now),
[=] { PeerMenuUnhidePinnedMessage(chat); });
} else {
_addAction(
tr::ktg_pinned_message_hide(tr::now),
[=] { PeerMenuHidePinnedMessage(chat); });
}
} }
if (chat->canAddMembers()) { if (chat->canAddMembers()) {
_addAction( _addAction(
@ -496,10 +510,17 @@ void Filler::addChannelActions(not_null<ChannelData*> channel) {
controller->showEditPeerBox(channel); controller->showEditPeerBox(channel);
}); });
} }
if (HistoryWidget::hasHiddenPinnedMessage(channel)) { if (channel->pinnedMessageId()) {
_addAction( auto hasHidden = HistoryWidget::hasHiddenPinnedMessage(channel);
tr::lng_pinned_message(tr::now), if (hasHidden) {
[=] { PeerMenuUnhidePinnedMessage(channel); }); _addAction(
tr::ktg_pinned_message_show(tr::now),
[=] { PeerMenuUnhidePinnedMessage(channel); });
} else {
_addAction(
tr::ktg_pinned_message_hide(tr::now),
[=] { PeerMenuHidePinnedMessage(channel); });
}
} }
if (channel->canAddMembers()) { if (channel->canAddMembers()) {
_addAction( _addAction(
@ -653,8 +674,18 @@ void FolderFiller::addTogglesForArchive() {
} // namespace } // namespace
void PeerMenuHidePinnedMessage(not_null<PeerData*> peer) {
auto hidden = HistoryWidget::switchPinnedHidden(peer, true);
if (hidden) {
Notify::peerUpdatedDelayed(
peer,
Notify::PeerUpdate::Flag::PinnedMessageChanged);
}
}
void PeerMenuUnhidePinnedMessage(not_null<PeerData*> peer) { void PeerMenuUnhidePinnedMessage(not_null<PeerData*> peer) {
auto unhidden = HistoryWidget::unhidePinnedMessage(peer); auto unhidden = HistoryWidget::switchPinnedHidden(peer, false);
if (unhidden) { if (unhidden) {
Notify::peerUpdatedDelayed( Notify::peerUpdatedDelayed(
peer, peer,

View file

@ -48,6 +48,7 @@ void PeerMenuAddMuteAction(
not_null<PeerData*> peer, not_null<PeerData*> peer,
const PeerMenuCallback &addAction); const PeerMenuCallback &addAction);
void PeerMenuHidePinnedMessage(not_null<PeerData*> peer);
void PeerMenuUnhidePinnedMessage(not_null<PeerData*> peer); void PeerMenuUnhidePinnedMessage(not_null<PeerData*> peer);
void PeerMenuExportChat(not_null<PeerData*> peer); void PeerMenuExportChat(not_null<PeerData*> peer);
void PeerMenuDeleteContact(not_null<UserData*> user); void PeerMenuDeleteContact(not_null<UserData*> user);