File indexing completed on 2024-02-18 15:43:50

0001 /*
0002    SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "deviceinfomodel.h"
0008 #include <KLocalizedString>
0009 
0010 DeviceInfoModel::DeviceInfoModel(QObject *parent)
0011     : CustomBaseModel(parent)
0012 {
0013 }
0014 
0015 DeviceInfoModel::~DeviceInfoModel() = default;
0016 
0017 int DeviceInfoModel::rowCount(const QModelIndex &parent) const
0018 {
0019     if (parent.isValid()) {
0020         return 0; // flat model
0021     }
0022     return mDeviceInfos.count();
0023 }
0024 
0025 QVariant DeviceInfoModel::headerData(int section, Qt::Orientation orientation, int role) const
0026 {
0027     if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
0028         switch (static_cast<DeviceInfoRoles>(section)) {
0029         case DeviceInfoRoles::Identifier:
0030             return {};
0031         case DeviceInfoRoles::Host:
0032             return i18n("Host");
0033         case DeviceInfoRoles::Os:
0034             return i18n("Os");
0035         case DeviceInfoRoles::Client:
0036             return i18n("Client");
0037         case DeviceInfoRoles::SessionId:
0038             return i18n("Session Id");
0039         case DeviceInfoRoles::Ip:
0040             return i18n("Ip");
0041         case DeviceInfoRoles::UserId:
0042             return {};
0043         case DeviceInfoRoles::LoginAt:
0044             return i18n("Login At");
0045         }
0046     }
0047     return {};
0048 }
0049 
0050 int DeviceInfoModel::columnCount(const QModelIndex &parent) const
0051 {
0052     Q_UNUSED(parent)
0053     constexpr int val = static_cast<int>(DeviceInfoRoles::LastColumn) + 1;
0054     return val;
0055 }
0056 
0057 QVariant DeviceInfoModel::data(const QModelIndex &index, int role) const
0058 {
0059     if (index.row() < 0 || index.row() >= mDeviceInfos.count()) {
0060         return {};
0061     }
0062     if (role != Qt::DisplayRole) {
0063         return {};
0064     }
0065 
0066     const DeviceInfo &deviceInfo = mDeviceInfos.at(index.row());
0067     const int col = index.column();
0068     switch (static_cast<DeviceInfoRoles>(col)) {
0069     case DeviceInfoRoles::Identifier:
0070         return deviceInfo.identifier();
0071     case DeviceInfoRoles::Host:
0072         return deviceInfo.host();
0073     case DeviceInfoRoles::SessionId:
0074         return deviceInfo.sessionId();
0075     case DeviceInfoRoles::Ip:
0076         return deviceInfo.ip();
0077     case DeviceInfoRoles::UserId:
0078         return deviceInfo.userId();
0079     case DeviceInfoRoles::LoginAt:
0080         return deviceInfo.loginAtDisplay();
0081     case DeviceInfoRoles::Os:
0082         return deviceInfo.os();
0083     case DeviceInfoRoles::Client:
0084         return deviceInfo.client();
0085     }
0086     return {};
0087 }
0088 
0089 int DeviceInfoModel::total() const
0090 {
0091     return mDeviceInfos.count();
0092 }
0093 
0094 void DeviceInfoModel::clear()
0095 {
0096     if (!mDeviceInfos.isEmpty()) {
0097         beginResetModel();
0098         mDeviceInfos.clear();
0099         endResetModel();
0100     }
0101 }
0102 
0103 void DeviceInfoModel::parseElements(const QJsonObject &obj)
0104 {
0105     clear();
0106     mDeviceInfos.parseDeviceInfos(obj);
0107     if (!mDeviceInfos.isEmpty()) {
0108         beginInsertRows(QModelIndex(), 0, mDeviceInfos.count() - 1);
0109         endInsertRows();
0110     }
0111     checkFullList();
0112     Q_EMIT totalChanged();
0113 }
0114 
0115 void DeviceInfoModel::checkFullList()
0116 {
0117     setHasFullList(mDeviceInfos.count() == mDeviceInfos.total());
0118 }
0119 
0120 const DeviceInfos &DeviceInfoModel::deviceInfos() const
0121 {
0122     return mDeviceInfos;
0123 }
0124 
0125 void DeviceInfoModel::setDeviceInfos(const DeviceInfos &newDeviceInfos)
0126 {
0127     clear();
0128     if (!mDeviceInfos.isEmpty()) {
0129         beginInsertRows(QModelIndex(), 0, mDeviceInfos.count() - 1);
0130         mDeviceInfos = newDeviceInfos;
0131         endInsertRows();
0132     }
0133 }
0134 
0135 void DeviceInfoModel::addMoreElements(const QJsonObject &obj)
0136 {
0137     const int numberOfElement = mDeviceInfos.count();
0138     mDeviceInfos.parseDeviceInfos(obj);
0139     beginInsertRows(QModelIndex(), numberOfElement, mDeviceInfos.count() - 1);
0140     endInsertRows();
0141     checkFullList();
0142 }
0143 
0144 QList<int> DeviceInfoModel::hideColumns() const
0145 {
0146     return {DeviceInfoRoles::Identifier, DeviceInfoRoles::UserId, DeviceInfoRoles::SessionId};
0147 }
0148 
0149 void DeviceInfoModel::removeElement(const QString &identifier)
0150 {
0151     const int userCount = mDeviceInfos.count();
0152     for (int i = 0; i < userCount; ++i) {
0153         if (mDeviceInfos.at(i).sessionId() == identifier) {
0154             beginRemoveRows(QModelIndex(), i, i);
0155             mDeviceInfos.takeAt(i);
0156             mDeviceInfos.setTotal(mDeviceInfos.count()); // Update total
0157             endRemoveRows();
0158             Q_EMIT totalChanged();
0159             break;
0160         }
0161     }
0162 }
0163 
0164 #include "moc_deviceinfomodel.cpp"