Move message filtering to C++
The filter callback is called very often (O(messages)). The current filter model shows some significant overhead in QML internals. Moving that to C++ makes it quite a bit faster.
This commit is contained in:
34
src/messagefiltermodel.cpp
Normal file
34
src/messagefiltermodel.cpp
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
* 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"
|
||||
|
||||
bool MessageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
||||
{
|
||||
const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
|
||||
|
||||
if (index.data(MessageEventModel::SpecialMarksRole).toInt() == EventStatus::Hidden) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (index.data(MessageEventModel::MessageRole).toInt() == 0x10) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const QString eventType = index.data(MessageEventModel::EventTypeRole).toString();
|
||||
|
||||
if (eventType == QLatin1String("other")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!NeoChatConfig::self()->showLeaveJoinEvent() && eventType == QLatin1String("state")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user