File indexing completed on 2024-05-12 09:38:25

0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 // SPDX-FileCopyrightText: 2011 Craig Drummond <craig.p.drummond@gmail.com>
0003 // SPDX-FileCopyrightText: 2018 Alexis Lopes Zubeta <contact@azubieta.net>
0004 // SPDX-FileCopyrightText: 2020 Tomaz Canabrava <tcanabrava@kde.org>
0005 /*
0006  * UFW KControl Module
0007  */
0008 
0009 #include "loglistmodel.h"
0010 
0011 #include <QDateTime>
0012 #include <QRegularExpression>
0013 #include <klocalizedstring.h>
0014 
0015 LogListModel::LogListModel(QObject *parent)
0016     : QAbstractTableModel(parent)
0017 {
0018 }
0019 
0020 bool LogListModel::busy() const
0021 {
0022     return m_busy;
0023 }
0024 
0025 void LogListModel::setBusy(bool busy)
0026 {
0027     if (m_busy != busy) {
0028         m_busy = busy;
0029         Q_EMIT busyChanged();
0030     }
0031 }
0032 
0033 int LogListModel::rowCount(const QModelIndex &parent) const
0034 {
0035     if (parent.isValid()) {
0036         return 0;
0037     }
0038 
0039     return m_logsData.size();
0040 }
0041 
0042 int LogListModel::columnCount(const QModelIndex &parent) const
0043 {
0044     Q_UNUSED(parent)
0045     return 9;
0046 }
0047 
0048 QVariant LogListModel::data(const QModelIndex &index, int role) const
0049 {
0050     Q_UNUSED(role)
0051     const auto checkIndexFlags = QAbstractItemModel::CheckIndexOption::IndexIsValid | QAbstractItemModel::CheckIndexOption::ParentIsInvalid;
0052 
0053     if (!checkIndex(index, checkIndexFlags)) {
0054         return {};
0055     }
0056 
0057     LogData data = m_logsData.at(index.row());
0058 
0059     switch (index.column()) {
0060     case SourceAddressColumn:
0061         return data.sourceAddress;
0062     case SourcePortColumn:
0063         return data.sourcePort;
0064     case DestinationAddressColumn:
0065         return data.destinationAddress;
0066     case DestinationPortColumn:
0067         return data.destinationPort;
0068     case ProtocolColumn:
0069         return data.protocol;
0070     case InterfaceColumn:
0071         return data.interface;
0072     case ActionColumn:
0073         return data.action;
0074     case TimeColumn:
0075         return data.time;
0076     case DateColumn:
0077         return data.date;
0078     }
0079     return QVariant();
0080 }
0081 
0082 QVariant LogListModel::headerData(int section, Qt::Orientation orientation, int role) const
0083 {
0084     Q_UNUSED(orientation)
0085     Q_UNUSED(role)
0086     switch (section) {
0087     case SourceAddressColumn:
0088         return i18nc("@title:column", "From");
0089     case SourcePortColumn:
0090         return i18nc("@title:column", "Source port");
0091     case DestinationAddressColumn:
0092         return i18nc("@title:column", "To");
0093     case DestinationPortColumn:
0094         return i18nc("@title:column", "Destination port");
0095     case ProtocolColumn:
0096         return i18nc("@title:column", "Protocol");
0097     case InterfaceColumn:
0098         return i18nc("@title:column", "Interface");
0099     case ActionColumn:
0100         return i18nc("@title:column", "Action");
0101     case TimeColumn:
0102         return i18nc("@title:column", "Time");
0103     case DateColumn:
0104         return i18nc("@title:column", "Date");
0105     }
0106     return QVariant();
0107 }
0108 
0109 void LogListModel::appendLogData(const QList<LogData> &newData)
0110 {
0111     if (newData.isEmpty()) {
0112         return;
0113     }
0114     beginResetModel();
0115     m_logsData = newData;
0116     endResetModel();
0117     Q_EMIT countChanged();
0118 }