From a70d98338bdabc07c7b1ac5be534eb9e8559cf15 Mon Sep 17 00:00:00 2001 From: AlexeyZavar Date: Sat, 25 Apr 2026 03:33:37 +0300 Subject: [PATCH] fix: show date & counter in dialogs when last message is filtered --- Telegram/SourceFiles/dialogs/dialogs_row.cpp | 2 ++ .../SourceFiles/dialogs/ui/dialogs_layout.cpp | 29 ++++++++++++++----- Telegram/SourceFiles/history/history_item.cpp | 5 ++++ .../history/history_item_components.cpp | 17 ++--------- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_row.cpp b/Telegram/SourceFiles/dialogs/dialogs_row.cpp index 3fd064bb34..3bcfab9535 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_row.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_row.cpp @@ -38,6 +38,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL // AyuGram includes #include "ayu/ayu_settings.h" +#include "ayu/features/filters/filters_controller.h" #include "ayu/ui/ayu_userpic.h" @@ -774,6 +775,7 @@ void FakeRow::invalidateTopic() { const Ui::Text::String &FakeRow::name() const { if (_name.isEmpty()) { const auto from = _searchInChat + && !FiltersController::filtered(_item) ? _item->displayFrom() : nullptr; const auto peer = from ? from : _item->history()->peer.get(); diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp index 28c49226d2..9cadc432fd 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp @@ -51,6 +51,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_window.h" // AyuGram includes +#include "ayu/features/filters/filters_controller.h" #include "styles/style_ayu_icons.h" @@ -427,6 +428,11 @@ void PaintRow( const auto history = entry->asHistory(); const auto thread = entry->asThread(); const auto sublist = entry->asSublist(); + const auto itemIsFiltered = item && FiltersController::filtered(item); + const auto itemIsEmpty = item && (item->isEmpty() || itemIsFiltered); + const auto showFilteredItem = !fakeRow + && itemIsEmpty + && itemIsFiltered; auto bg = context.active ? st::dialogsBgActive @@ -517,7 +523,9 @@ void PaintRow( PaintExpandedTopicsBar(p, context.topicsExpanded); } if (context.narrow) { - if (!draft && item && !item->isEmpty()) { + if (!draft + && item + && (!itemIsEmpty || showFilteredItem)) { PaintNarrowCounter(p, context, badgesState); } return; @@ -738,7 +746,7 @@ void PaintRow( context.now)) { // Empty history } - } else if (!item->isEmpty()) { + } else if (!itemIsEmpty || showFilteredItem) { if ((thread || sublist) && !promoted) { PaintDialogDate(p, entry, fakeRow, date, rectForName, context); } @@ -1201,21 +1209,28 @@ void RowPainter::Paint( not_null row, const PaintContext &context) { const auto item = row->item(); + const auto itemIsFiltered = FiltersController::filtered(item); const auto topic = context.forum ? row->topic() : nullptr; const auto history = topic ? nullptr : item->history().get(); const auto entry = topic ? (Entry*)topic : (Entry*)history; auto cloudDraft = nullptr; const auto from = [&] { const auto in = row->searchInChat(); - return (topic && (in.topic() != topic)) - ? nullptr - : in - ? item->displayFrom() - : history->peer->migrateTo() + if (topic && (in.topic() != topic)) { + return (PeerData*)nullptr; + } else if (in && !itemIsFiltered) { + return item->displayFrom(); + } else if (!history) { + return (PeerData*)nullptr; + } + return history->peer->migrateTo() ? history->peer->migrateTo() : history->peer.get(); }(); const auto hiddenSenderInfo = [&]() -> const HiddenSenderInfo* { + if (itemIsFiltered) { + return nullptr; + } if (const auto searchChat = row->searchInChat()) { if (const auto peer = searchChat.peer()) { if (const auto forwarded = item->Get()) { diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index 1e1219eb80..2a84434d4e 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -75,6 +75,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL // AyuGram includes #include "ayu/ayu_settings.h" +#include "ayu/features/filters/filters_controller.h" #include "ayu/features/message_shot/message_shot.h" #include "ayu/utils/telegram_helpers.h" #include "ui/emoji_config.h" @@ -4329,6 +4330,10 @@ TextWithEntities HistoryItem::notificationText( } ItemPreview HistoryItem::toPreview(ToPreviewOptions options) const { + if (FiltersController::filtered(const_cast(this))) { + return {}; + } + if (isService()) { const_cast(this)->resolveDependent(); diff --git a/Telegram/SourceFiles/history/history_item_components.cpp b/Telegram/SourceFiles/history/history_item_components.cpp index 7450a9f5ec..d38a909146 100644 --- a/Telegram/SourceFiles/history/history_item_components.cpp +++ b/Telegram/SourceFiles/history/history_item_components.cpp @@ -62,7 +62,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include // AyuGram includes -#include "ayu/ayu_settings.h" #include "ayu/features/filters/filters_controller.h" namespace { @@ -533,18 +532,6 @@ void HistoryMessageReply::updateData( && (asExternal || _fields.manualQuote); _multiline = !_fields.storyId && (asExternal || nonEmptyQuote); - const auto &settings = AyuSettings::getInstance(); - const auto author = resolvedMessage - ? resolvedMessage->from().get() - : resolvedStory - ? resolvedStory->peer().get() - : nullptr; - const auto blocked = settings.hideFromBlocked() - && author - && author->isUser() - && author->asUser()->isBlocked(); - - const auto filtered = resolvedMessage && !resolvedMessage.empty() && FiltersController::filtered(resolvedMessage.get()); @@ -553,12 +540,12 @@ void HistoryMessageReply::updateData( || resolvedStory || ((nonEmptyQuote || _fields.externalMedia) && (!_fields.messageId || force)); - _displaying = displaying && !blocked && !filtered ? 1 : 0; + _displaying = displaying && !filtered ? 1 : 0; const auto unavailable = !resolvedMessage && !resolvedStory && ((!_fields.storyId && !_fields.messageId) || force); - _unavailable = unavailable && !blocked && !filtered ? 1 : 0; + _unavailable = (unavailable || filtered) ? 1 : 0; if (force) { if (!_displaying && (_fields.messageId || _fields.storyId)) {