File indexing completed on 2024-05-19 05:13:17

0001 /*
0002     SPDX-FileCopyrightText: 2018 Daniel Vrátil <dvratil@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QAbstractItemModel>
0010 #include <QSet>
0011 
0012 class QStandardItemModel;
0013 
0014 class LoggingModel : public QAbstractItemModel
0015 {
0016     Q_OBJECT
0017 public:
0018     struct Message {
0019         qint64 timestamp;
0020         QString app;
0021         qint64 pid;
0022         QString category;
0023         QString file;
0024         QString function;
0025         QString message;
0026         QtMsgType type;
0027         int line;
0028     };
0029 
0030     enum Roles { MessageRole = Qt::UserRole };
0031 
0032     enum Columns {
0033         TimeColumn,
0034         AppColumn,
0035         TypeColumn,
0036         CategoryColumn,
0037         FileColumn,
0038         FunctionColumn,
0039         MessageColumn,
0040 
0041         _ColumnCount
0042     };
0043 
0044     explicit LoggingModel(QObject *parent = nullptr);
0045     ~LoggingModel() override;
0046 
0047     void addMessage(qint64 timestamp,
0048                     const QString &app,
0049                     qint64 pid,
0050                     QtMsgType type,
0051                     const QString &category,
0052                     const QString &file,
0053                     const QString &function,
0054                     int line,
0055                     const QString &message);
0056 
0057     void setAppFilterModel(QStandardItemModel *appFilterModel);
0058     void setCategoryFilterModel(QStandardItemModel *categoryFilterModel);
0059 
0060     int rowCount(const QModelIndex &parent = {}) const override;
0061     int columnCount(const QModelIndex &parent = {}) const override;
0062 
0063     QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override;
0064     QModelIndex parent(const QModelIndex &child = {}) const override;
0065 
0066     QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
0067     QVariant data(const QModelIndex &index, int role) const override;
0068 
0069 private:
0070     static QString cacheString(const QString &str, QSet<QString> &cache, QStandardItemModel *model = nullptr);
0071 
0072     QList<Message> mMessages;
0073     QStandardItemModel *mAppFilterModel = nullptr;
0074     QSet<QString> mAppCache;
0075     QStandardItemModel *mCategoryFilterModel = nullptr;
0076     QSet<QString> mCategoryCache;
0077     QSet<QString> mFileCache;
0078     QSet<QString> mFunctionCache;
0079 };