// SPDX-FileCopyrightText: 2021 Nicolas Fella // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL #include "messagefiltermodel.h" #include "messageeventmodel.h" #include "neochatconfig.h" using namespace Quotient; MessageFilterModel::MessageFilterModel(QObject *parent) : QSortFilterProxyModel(parent) { connect(NeoChatConfig::self(), &NeoChatConfig::ShowLeaveJoinEventChanged, this, [this] { beginResetModel(); endResetModel(); }); connect(NeoChatConfig::self(), &NeoChatConfig::ShowRenameChanged, this, [this] { beginResetModel(); endResetModel(); }); connect(NeoChatConfig::self(), &NeoChatConfig::ShowAvatarUpdateChanged, this, [this] { beginResetModel(); endResetModel(); }); connect(NeoChatConfig::self(), &NeoChatConfig::ShowDeletedMessagesChanged, this, [this] { beginResetModel(); endResetModel(); }); } bool MessageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); const int specialMarks = index.data(MessageEventModel::SpecialMarksRole).toInt(); if (index.data(MessageEventModel::IsNameChangeRole).toBool() && !NeoChatConfig::self()->showRename()) { return false; } if (index.data(MessageEventModel::IsAvatarChangeRole).toBool() && !NeoChatConfig::self()->showAvatarUpdate()) { return false; } if (index.data(MessageEventModel::IsRedactedRole).toBool() && !NeoChatConfig::self()->showDeletedMessages()) { return false; } if (specialMarks == EventStatus::Hidden || specialMarks == EventStatus::Replaced) { return false; } const auto eventType = index.data(MessageEventModel::EventTypeRole).toInt(); if (eventType == MessageEventModel::Other) { return false; } if (!NeoChatConfig::self()->showLeaveJoinEvent() && eventType == MessageEventModel::State) { return false; } return true; }