fix: hide reactions from blocked peers

This commit is contained in:
AlexeyZavar
2026-03-01 23:21:00 +03:00
parent 439a8543e2
commit bfc1c83c0b
5 changed files with 45 additions and 8 deletions
+24 -1
View File
@@ -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<Ui::WhoReadContent> 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,
@@ -113,6 +113,15 @@ bool isBlocked(const not_null<HistoryItem*> item) {
);
}
bool isBlocked(const not_null<PeerData*> 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<HistoryItem*> item) {
const auto &settings = AyuSettings::getInstance();
if (!settings.filtersEnabled()) {
@@ -17,6 +17,7 @@ namespace FiltersController {
bool isEnabled(PeerData *peer);
bool isBlocked(not_null<HistoryItem*> item);
bool isBlocked(not_null<PeerData*> peer);
bool filtered(not_null<HistoryItem*> historyItem);
void invalidate(not_null<HistoryItem*> item);
@@ -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;
}
@@ -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<Element*> view) {
}
}
}
if (AyuSettings::getInstance().filtersEnabled()) {
for (auto &[id, peers] : result.recent) {
peers.erase(ranges::remove_if(peers, [](not_null<PeerData*> peer) {
return FiltersController::isBlocked(peer);
}), end(peers));
}
}
result.flags = (view->hasOutLayout() ? Flag::OutLayout : Flag())
| (view->embedReactionsInBubble() ? Flag::InBubble : Flag())
| (item->reactionsAreTags() ? Flag::Tags : Flag())