Remove the dependency on NeoChatConfig from EventHandler

This commit is contained in:
James Graham
2025-04-06 11:02:29 +01:00
parent 16daca09e8
commit 0403ecbd70
3 changed files with 20 additions and 17 deletions

View File

@@ -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<bool(const Quotient::RoomEvent *)> 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<const RoomMemberEvent>(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<const StateEvent>(event)->repeatsState()) {
return true;
}

View File

@@ -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<bool(const Quotient::RoomEvent *)> filter = {});
/**
* @brief The input format of the body in the message.

View File

@@ -7,6 +7,7 @@
#include "threadmodel.h"
#include <Quotient/events/encryptedevent.h>
#include <Quotient/events/roommemberevent.h>
#include <Quotient/events/roommessageevent.h>
#include <Quotient/events/stickerevent.h>
#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<const RoomMemberEvent>(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;
}