File indexing completed on 2024-05-12 05:12:45

0001 /*
0002     SPDX-FileCopyrightText: 2018 Sandro Knauß <sknauss@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "debugfiltermodel.h"
0008 #include "akonadiconsole_debug.h"
0009 #include "debugmodel.h"
0010 
0011 #include <Libkdepim/KCheckComboBox>
0012 #include <chrono>
0013 
0014 using namespace std::chrono_literals;
0015 
0016 #ifndef COMPILE_WITH_UNITY_CMAKE_SUPPORT
0017 Q_DECLARE_METATYPE(DebugModel::Message)
0018 #endif
0019 
0020 using namespace KPIM;
0021 
0022 DebugFilterModel::DebugFilterModel(QObject *parent)
0023     : QSortFilterProxyModel(parent)
0024 {
0025     mInvalidateTimer.setInterval(50ms);
0026     mInvalidateTimer.setSingleShot(true);
0027     connect(&mInvalidateTimer, &QTimer::timeout, this, &DebugFilterModel::invalidate);
0028 }
0029 
0030 DebugFilterModel::~DebugFilterModel() = default;
0031 
0032 void DebugFilterModel::setSenderFilter(KCheckComboBox *senderFilter)
0033 {
0034     if (mSenderFilter) {
0035         mSenderFilter->disconnect(this);
0036     }
0037     mSenderFilter = senderFilter;
0038     connect(mSenderFilter, &KCheckComboBox::checkedItemsChanged, this, [this](const QStringList &_items) {
0039         Q_UNUSED(_items)
0040         const auto items = mSenderFilter->checkedItems(DebugModel::IdentifierRole);
0041         mCheckedSenders.clear();
0042         mCheckedSenders.reserve(items.count());
0043         for (const auto &item : items) {
0044             mCheckedSenders.insert(item);
0045         }
0046         if (!mInvalidateTimer.isActive()) {
0047             mInvalidateTimer.start();
0048         }
0049     });
0050 }
0051 
0052 bool DebugFilterModel::filterAcceptsRow(int source_row, const QModelIndex &) const
0053 {
0054     const auto source_idx = sourceModel()->index(source_row, 0);
0055     const auto msg = sourceModel()->data(source_idx, DebugModel::MessageRole).value<DebugModel::Message>();
0056     return mCheckedSenders.contains(msg.sender);
0057 }
0058 
0059 #include "moc_debugfiltermodel.cpp"