diff --git a/src/eventhandler.cpp b/src/eventhandler.cpp index 3817acd88..772b8694e 100644 --- a/src/eventhandler.cpp +++ b/src/eventhandler.cpp @@ -27,7 +27,6 @@ #include "events/locationbeaconevent.h" #include "events/pollevent.h" #include "events/widgetevent.h" -#include "neochatconfig.h" #include "neochatroom.h" #include "texthandler.h" #include "utils.h" @@ -149,7 +148,7 @@ bool EventHandler::isHighlighted(const NeoChatRoom *room, const Quotient::RoomEv return !room->isDirectChat() && room->isEventHighlighted(event); } -bool EventHandler::isHidden(const NeoChatRoom *room, const Quotient::RoomEvent *event) +bool EventHandler::isHidden(const NeoChatRoom *room, const Quotient::RoomEvent *event, std::function filter) { if (room == nullptr) { qCWarning(EventHandling) << "isHidden called with room set to nullptr."; @@ -160,22 +159,10 @@ bool EventHandler::isHidden(const NeoChatRoom *room, const Quotient::RoomEvent * return false; } - if (event->isStateEvent() && !NeoChatConfig::self()->showStateEvent()) { + if (filter && filter(event)) { return true; } - if (auto roomMemberEvent = eventCast(event)) { - if ((roomMemberEvent->isJoin() || roomMemberEvent->isLeave()) && !NeoChatConfig::self()->showLeaveJoinEvent()) { - return true; - } else if (roomMemberEvent->isRename() && roomMemberEvent->prevContent() && roomMemberEvent->prevContent()->membership == roomMemberEvent->membership() - && !NeoChatConfig::self()->showRename()) { - return true; - } else if (roomMemberEvent->isAvatarUpdate() && !roomMemberEvent->isJoin() && !roomMemberEvent->isLeave() - && !NeoChatConfig::self()->showAvatarUpdate()) { - return true; - } - } - if (event->isStateEvent() && eventCast(event)->repeatsState()) { return true; } diff --git a/src/eventhandler.h b/src/eventhandler.h index 3c71e463b..bac75613e 100644 --- a/src/eventhandler.h +++ b/src/eventhandler.h @@ -114,7 +114,7 @@ public: * user has hidden all state events or if the sender has been ignored by the local * user. */ - static bool isHidden(const NeoChatRoom *room, const Quotient::RoomEvent *event); + static bool isHidden(const NeoChatRoom *room, const Quotient::RoomEvent *event, std::function filter = {}); /** * @brief The input format of the body in the message. diff --git a/src/models/messagemodel.cpp b/src/models/messagemodel.cpp index 27a1a8d89..1be3f4a3f 100644 --- a/src/models/messagemodel.cpp +++ b/src/models/messagemodel.cpp @@ -7,6 +7,7 @@ #include "threadmodel.h" #include +#include #include #include #if Quotient_VERSION_MINOR > 9 || (Quotient_VERSION_MINOR == 9 && Quotient_VERSION_PATCH > 1) @@ -175,7 +176,22 @@ QVariant MessageModel::data(const QModelIndex &idx, int role) const return pendingIt->deliveryStatus(); } - if (EventHandler::isHidden(m_room, &event.value().get())) { + if (EventHandler::isHidden(m_room, &event.value().get(), [](const RoomEvent *event) -> bool { + if (event->isStateEvent() && !NeoChatConfig::showStateEvent()) { + return true; + } + if (auto roomMemberEvent = eventCast(event)) { + if ((roomMemberEvent->isJoin() || roomMemberEvent->isLeave()) && !NeoChatConfig::showLeaveJoinEvent()) { + return true; + } else if (roomMemberEvent->isRename() && !roomMemberEvent->isJoin() && !roomMemberEvent->isLeave() && !NeoChatConfig::showRename()) { + return true; + } else if (roomMemberEvent->isAvatarUpdate() && !roomMemberEvent->isJoin() && !roomMemberEvent->isLeave() + && !NeoChatConfig::showAvatarUpdate()) { + return true; + } + } + return false; + })) { return EventStatus::Hidden; }