From ddd9f928a4a170fa527212b92953a036f2049726 Mon Sep 17 00:00:00 2001 From: blank X Date: Sat, 5 Feb 2022 16:20:50 +0000 Subject: [PATCH] Fix chat status filters (#308) --- .../SourceFiles/data/data_chat_filters.cpp | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/data/data_chat_filters.cpp b/Telegram/SourceFiles/data/data_chat_filters.cpp index a030b3a14..9ff62e4a6 100644 --- a/Telegram/SourceFiles/data/data_chat_filters.cpp +++ b/Telegram/SourceFiles/data/data_chat_filters.cpp @@ -316,18 +316,36 @@ bool ChatFilter::contains(not_null history) const { const auto peer = history->peer; if (const auto chat = peer->asChat()) { - if ((chat->amCreator() && (_flags & Flag::Owned) && !(_flags & Flag::NotOwned)) - || (chat->hasAdminRights() && (_flags & Flag::Admin) && !(_flags & Flag::NotAdmin)) - || (!chat->amCreator() && !(_flags & Flag::Owned) && (_flags & Flag::NotOwned)) - || (!chat->hasAdminRights() && !(_flags & Flag::Admin) && (_flags & Flag::NotAdmin))) { - return true; + // if i created the chat: + // // if the filter excludes owned chats, don't add in list + // // if the filter excludes non-admin chats, add only if filter includes owned chats + // else if i am admin in chat: + // // if the filter excludes admin chats, don't add in list + // // if the filter excludes non-owned chats, add only if filter includes admin chats + // else: + // // add in list only if filter doesn't exclude non-owned or non-admin chats + if (chat->amCreator()) { + return !(_flags & Flag::NotOwned) && ((_flags & Flag::Admin) + ? (_flags & Flag::Owned) + : true); + } else if (chat->hasAdminRights()) { + return !(_flags & Flag::NotAdmin) && ((_flags & Flag::Owned) + ? (_flags & Flag::Admin) + : true); + } else { + return !(_flags & Flag::Owned) && !(_flags & Flag::Admin); } } else if (const auto channel = peer->asChannel()) { - if ((channel->amCreator() && (_flags & Flag::Owned) && !(_flags & Flag::NotOwned)) - || (channel->hasAdminRights() && (_flags & Flag::Admin) && !(_flags & Flag::NotAdmin)) - || (!channel->amCreator() && !(_flags & Flag::Owned) && (_flags & Flag::NotOwned)) - || (!channel->hasAdminRights() && !(_flags & Flag::Admin) && (_flags & Flag::NotAdmin))) { - return true; + if (channel->amCreator()) { + return !(_flags & Flag::NotOwned) && ((_flags & Flag::Admin) + ? (_flags & Flag::Owned) + : true); + } else if (channel->hasAdminRights()) { + return !(_flags & Flag::NotAdmin) && ((_flags & Flag::Owned) + ? (_flags & Flag::Admin) + : true); + } else { + return !(_flags & Flag::Owned) && !(_flags & Flag::Admin); } }