diff --git a/Telegram/SourceFiles/api/api_who_reacted.cpp b/Telegram/SourceFiles/api/api_who_reacted.cpp index d2a8ea3776..3fed575718 100644 --- a/Telegram/SourceFiles/api/api_who_reacted.cpp +++ b/Telegram/SourceFiles/api/api_who_reacted.cpp @@ -33,6 +33,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL // AyuGram includes #include "ayu/ayu_settings.h" +#include "ayu/features/filters/filters_controller.h" namespace Api { @@ -445,6 +446,8 @@ bool UpdateUserpics( }; }) | ranges::views::filter([](ResolvedPeer resolved) { return resolved.peer != nullptr; + }) | ranges::views::filter([](const ResolvedPeer &resolved) { + return !FiltersController::isBlocked(resolved.peer); }) | ranges::to_vector; const auto same = ranges::equal( @@ -605,9 +608,29 @@ rpl::producer WhoReacted( }); return; } + auto &owner = item->history()->owner(); + auto blockedReactionsCount = 0; + const auto &settings = AyuSettings::getInstance(); + if (settings.filtersEnabled()) { + peers.list.erase(ranges::remove_if(peers.list, [&](const PeerWithReaction &p) { + const auto peer = owner.peerLoaded(p.peerWithDate.peer); + if (peer && FiltersController::isBlocked(peer)) { + if (!p.reaction.empty()) { + ++blockedReactionsCount; + } + return true; + } + return false; + }), end(peers.list)); + peers.read.erase(ranges::remove_if(peers.read, [&](const WhoReadPeer &p) { + const auto peer = owner.peerLoaded(p.peer); + return peer && FiltersController::isBlocked(peer); + }), end(peers.read)); + } + state->current.state = peers.state; state->current.fullReadCount = int(peers.read.size()); - state->current.fullReactionsCount = peers.fullReactionsCount; + state->current.fullReactionsCount = peers.fullReactionsCount - blockedReactionsCount; if (whoReadIds) { const auto reacted = peers.list.size() - ranges::count( peers.list, diff --git a/Telegram/SourceFiles/ayu/features/filters/filters_controller.cpp b/Telegram/SourceFiles/ayu/features/filters/filters_controller.cpp index 8636e0de7d..abd31943de 100644 --- a/Telegram/SourceFiles/ayu/features/filters/filters_controller.cpp +++ b/Telegram/SourceFiles/ayu/features/filters/filters_controller.cpp @@ -113,6 +113,15 @@ bool isBlocked(const not_null item) { ); } +bool isBlocked(const not_null peer) { + const auto &settings = AyuSettings::getInstance(); + return settings.filtersEnabled() && + ( + (peer->isUser() && peer->asUser()->isBlocked() && settings.hideFromBlocked()) || + ((peer->isUser() || peer->isBroadcast()) && settings.isShadowBanned(getDialogIdFromPeer(peer))) + ); +} + bool filtered(const not_null item) { const auto &settings = AyuSettings::getInstance(); if (!settings.filtersEnabled()) { diff --git a/Telegram/SourceFiles/ayu/features/filters/filters_controller.h b/Telegram/SourceFiles/ayu/features/filters/filters_controller.h index 1b720c7de5..810dda3137 100644 --- a/Telegram/SourceFiles/ayu/features/filters/filters_controller.h +++ b/Telegram/SourceFiles/ayu/features/filters/filters_controller.h @@ -17,6 +17,7 @@ namespace FiltersController { bool isEnabled(PeerData *peer); bool isBlocked(not_null item); +bool isBlocked(not_null peer); bool filtered(not_null historyItem); void invalidate(not_null item); diff --git a/Telegram/SourceFiles/history/view/history_view_send_action.cpp b/Telegram/SourceFiles/history/view/history_view_send_action.cpp index 75d53f6172..a8c549ffbf 100644 --- a/Telegram/SourceFiles/history/view/history_view_send_action.cpp +++ b/Telegram/SourceFiles/history/view/history_view_send_action.cpp @@ -22,6 +22,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL // AyuGram includes #include "ayu/ayu_settings.h" +#include "ayu/features/filters/filters_controller.h" + namespace HistoryView { namespace { @@ -66,13 +68,7 @@ bool SendActionPainter::updateNeedsAnimating( return false; } - const auto &settings = AyuSettings::getInstance(); - if (settings.hideFromBlocked()) { - if (user->isBlocked()) { - return false; - } - } - if (AyuSettings::getInstance().isShadowBanned(user->id.value & PeerId::kChatTypeMask)) { + if (FiltersController::isBlocked(user)) { return false; } diff --git a/Telegram/SourceFiles/history/view/reactions/history_view_reactions.cpp b/Telegram/SourceFiles/history/view/reactions/history_view_reactions.cpp index cbcebff7c2..42ea94a6a0 100644 --- a/Telegram/SourceFiles/history/view/reactions/history_view_reactions.cpp +++ b/Telegram/SourceFiles/history/view/reactions/history_view_reactions.cpp @@ -35,6 +35,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ayu/ayu_settings.h" #include "ayu/features/message_shot/message_shot.h" #include "ayu/ui/ayu_userpic.h" +#include "ayu/features/filters/filters_controller.h" namespace HistoryView::Reactions { @@ -931,6 +932,13 @@ InlineListData InlineListDataFromMessage(not_null view) { } } } + if (AyuSettings::getInstance().filtersEnabled()) { + for (auto &[id, peers] : result.recent) { + peers.erase(ranges::remove_if(peers, [](not_null peer) { + return FiltersController::isBlocked(peer); + }), end(peers)); + } + } result.flags = (view->hasOutLayout() ? Flag::OutLayout : Flag()) | (view->embedReactionsInBubble() ? Flag::InBubble : Flag()) | (item->reactionsAreTags() ? Flag::Tags : Flag())