From c492b914837cead3fc5f2530c560ad76b65f4113 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Sun, 14 Jun 2020 03:25:53 +0400 Subject: [PATCH] Add an option to hide messages from blocked users in groups --- Telegram/Resources/langs/lang.strings | 2 ++ Telegram/Resources/langs/rewrites/en.json | 1 + Telegram/Resources/langs/rewrites/ru.json | 1 + .../history/history_item_components.cpp | 7 +++-- .../SourceFiles/history/history_widget.cpp | 28 +++++++++++++++++++ .../history/view/history_view_element.cpp | 7 +++++ Telegram/SourceFiles/kotato/json_settings.cpp | 5 ++++ Telegram/SourceFiles/kotato/settings.cpp | 11 ++++++++ Telegram/SourceFiles/kotato/settings.h | 4 +++ Telegram/SourceFiles/kotato/settings_menu.cpp | 1 + 10 files changed, 65 insertions(+), 2 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 2b8212d73..e1c7f2643 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2897,6 +2897,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ktg_settings_forward_chat_on_click" = "Open chat on click"; "ktg_settings_forward_chat_on_click_description" = "You can hold Ctrl to select multiple chats regardless of this option."; +"ktg_settings_block_users_in_groups" = "Block users in groups"; + "ktg_forward_menu_quoted" = "Quoted"; "ktg_forward_menu_unquoted" = "Unquoted with captions"; "ktg_forward_menu_uncaptioned" = "Unquoted without captions"; diff --git a/Telegram/Resources/langs/rewrites/en.json b/Telegram/Resources/langs/rewrites/en.json index 8c828daa4..2a1616ec9 100644 --- a/Telegram/Resources/langs/rewrites/en.json +++ b/Telegram/Resources/langs/rewrites/en.json @@ -181,6 +181,7 @@ "ktg_admin_log_banned_send_games": "Send games", "ktg_admin_log_banned_use_inline": "Use inline bots", "ktg_forward_go_to_chat": "Go to chat", + "ktg_settings_block_users_in_groups": "Block users in groups", "ktg_settings_forward": "Forward", "ktg_settings_forward_retain_selection": "Retain selection after forward", "ktg_settings_forward_chat_on_click": "Open chat on click", diff --git a/Telegram/Resources/langs/rewrites/ru.json b/Telegram/Resources/langs/rewrites/ru.json index 96c961099..b2ff772bd 100644 --- a/Telegram/Resources/langs/rewrites/ru.json +++ b/Telegram/Resources/langs/rewrites/ru.json @@ -181,6 +181,7 @@ "ktg_admin_log_banned_send_games": "Отправка игр", "ktg_admin_log_banned_use_inline": "Отправка через ботов", "ktg_forward_go_to_chat": "Перейти в чат", + "ktg_settings_block_users_in_groups": "Блокировать пользователей в группах", "ktg_settings_forward": "Пересылка", "ktg_settings_forward_retain_selection": "Сохранять выделение после пересылки", "ktg_settings_forward_chat_on_click": "Открывать чат по клику", diff --git a/Telegram/SourceFiles/history/history_item_components.cpp b/Telegram/SourceFiles/history/history_item_components.cpp index 90ab65500..fa921b256 100644 --- a/Telegram/SourceFiles/history/history_item_components.cpp +++ b/Telegram/SourceFiles/history/history_item_components.cpp @@ -349,7 +349,10 @@ void HistoryMessageReply::paint( p.fillRect(rbar, bar); if (w > st::msgReplyBarSkip) { - if (replyToMsg) { + auto blocked = replyToMsg + && replyToMsg->from()->isUser() + && replyToMsg->from()->asUser()->isBlocked(); + if (replyToMsg && (!blocked || !BlockUsersInGroups())) { auto hasPreview = replyToMsg->media() ? replyToMsg->media()->hasReplyPreview() : false; if (hasPreview && w < st::msgReplyBarSkip + st::msgReplyBarSize.height()) { hasPreview = false; @@ -390,7 +393,7 @@ void HistoryMessageReply::paint( p.setFont(st::msgDateFont); auto &date = outbg ? (selected ? st::msgOutDateFgSelected : st::msgOutDateFg) : (selected ? st::msgInDateFgSelected : st::msgInDateFg); p.setPen((flags & PaintFlag::InBubble) ? date : st::msgDateImgFg); - p.drawTextLeft(x + st::msgReplyBarSkip, y + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2, w + 2 * x, st::msgDateFont->elided(replyToMsgId ? tr::lng_profile_loading(tr::now) : tr::lng_deleted_message(tr::now), w - st::msgReplyBarSkip)); + p.drawTextLeft(x + st::msgReplyBarSkip, y + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2, w + 2 * x, st::msgDateFont->elided((replyToMsgId && (!blocked || !BlockUsersInGroups())) ? tr::lng_profile_loading(tr::now) : tr::lng_deleted_message(tr::now), w - st::msgReplyBarSkip)); } } } diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 1ceb4badf..585416c57 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -601,6 +601,34 @@ HistoryWidget::HistoryWidget( }); }, lifetime()); + BlockUsersInGroupsChanges( + ) | rpl::start_with_next([=] { + crl::on_main(this, [=] { + if (_history) { + _history->forceFullResize(); + if (_migrated) { + _migrated->forceFullResize(); + } + updateHistoryGeometry(); + update(); + } + }); + }, lifetime()); + + session().api().blockedPeersSlice( + ) | rpl::start_with_next([=] { + crl::on_main(this, [=] { + if (_history) { + _history->forceFullResize(); + if (_migrated) { + _migrated->forceFullResize(); + } + updateHistoryGeometry(); + update(); + } + }); + }, lifetime()); + HoverEmojiPanelChanges( ) | rpl::start_with_next([=] { crl::on_main(this, [=] { diff --git a/Telegram/SourceFiles/history/view/history_view_element.cpp b/Telegram/SourceFiles/history/view/history_view_element.cpp index ede5b7b51..fb361696a 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.cpp +++ b/Telegram/SourceFiles/history/view/history_view_element.cpp @@ -25,6 +25,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/toast/toast.h" #include "ui/toasts/common_toasts.h" #include "data/data_session.h" +#include "data/data_user.h" #include "data/data_groups.h" #include "data/data_media_types.h" #include "lang/lang_keys.h" @@ -433,6 +434,12 @@ bool Element::isHiddenByGroup() const { } bool Element::isHidden() const { + if (BlockUsersInGroups() + && data()->from()->isUser() + && data()->from()->asUser()->isBlocked()) { + return true; + } + return isHiddenByGroup(); } diff --git a/Telegram/SourceFiles/kotato/json_settings.cpp b/Telegram/SourceFiles/kotato/json_settings.cpp index 464264048..9a7b904e0 100644 --- a/Telegram/SourceFiles/kotato/json_settings.cpp +++ b/Telegram/SourceFiles/kotato/json_settings.cpp @@ -359,6 +359,7 @@ QByteArray GenerateSettingsJson(bool areDefault = false) { settings.insert(qsl("sticker_scale_both"), StickerScaleBoth()); settings.insert(qsl("adaptive_bubbles"), AdaptiveBubbles()); settings.insert(qsl("big_emoji_outline"), BigEmojiOutline()); + settings.insert(qsl("block_users_in_groups"), BlockUsersInGroups()); settings.insert(qsl("always_show_scheduled"), cAlwaysShowScheduled()); settings.insert(qsl("show_chat_id"), cShowChatId()); settings.insert(qsl("show_phone_in_drawer"), cShowPhoneInDrawer()); @@ -509,6 +510,10 @@ bool Manager::readCustomFile() { SetBigEmojiOutline(v); }); + ReadBoolOption(settings, "block_users_in_groups", [&](auto v) { + SetBlockUsersInGroups(v); + }); + ReadBoolOption(settings, "always_show_scheduled", [&](auto v) { cSetAlwaysShowScheduled(v); }); diff --git a/Telegram/SourceFiles/kotato/settings.cpp b/Telegram/SourceFiles/kotato/settings.cpp index 4614fc505..01bf7d71b 100644 --- a/Telegram/SourceFiles/kotato/settings.cpp +++ b/Telegram/SourceFiles/kotato/settings.cpp @@ -77,6 +77,17 @@ rpl::producer MonospaceLargeBubblesChanges() { return gMonospaceLargeBubbles.changes(); } +rpl::variable gBlockUsersInGroups = false; +void SetBlockUsersInGroups(bool enabled) { + gBlockUsersInGroups = enabled; +} +bool BlockUsersInGroups() { + return gBlockUsersInGroups.current(); +} +rpl::producer BlockUsersInGroupsChanges() { + return gBlockUsersInGroups.changes(); +} + bool gAlwaysShowScheduled = false; int gShowChatId = 2; diff --git a/Telegram/SourceFiles/kotato/settings.h b/Telegram/SourceFiles/kotato/settings.h index 209c5133d..36f88b338 100644 --- a/Telegram/SourceFiles/kotato/settings.h +++ b/Telegram/SourceFiles/kotato/settings.h @@ -53,6 +53,10 @@ void SetMonospaceLargeBubbles(bool enabled); [[nodiscard]] bool MonospaceLargeBubbles(); [[nodiscard]] rpl::producer MonospaceLargeBubblesChanges(); +void SetBlockUsersInGroups(bool enabled); +[[nodiscard]] bool BlockUsersInGroups(); +[[nodiscard]] rpl::producer BlockUsersInGroupsChanges(); + DeclareSetting(bool, AlwaysShowScheduled); DeclareSetting(int, ShowChatId); diff --git a/Telegram/SourceFiles/kotato/settings_menu.cpp b/Telegram/SourceFiles/kotato/settings_menu.cpp index 2c836018c..13396a94e 100644 --- a/Telegram/SourceFiles/kotato/settings_menu.cpp +++ b/Telegram/SourceFiles/kotato/settings_menu.cpp @@ -377,6 +377,7 @@ void SetupKotatoMessages(not_null container) { } SettingsMenuSwitch(ktg_settings_emoji_outline, BigEmojiOutline); + SettingsMenuSwitch(ktg_settings_block_users_in_groups, BlockUsersInGroups); AddSkip(container); } -- 2.31.1