File indexing completed on 2024-04-28 05:31:32
0001 /* 0002 SPDX-FileCopyrightText: 2020 Marco Martin <mart@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <KConfigGroup> 0010 #include <KConfigLoader> 0011 #include <KConfigPropertyMap> 0012 #include <KLocalizedContext> 0013 #include <KPackage/PackageLoader> 0014 #include <QJsonArray> 0015 #include <QQuickItem> 0016 #include <QStandardItemModel> 0017 0018 #include <functional> 0019 0020 #include "sensorfaces_export.h" 0021 0022 class QQmlEngine; 0023 0024 namespace KSysGuard 0025 { 0026 class SensorFaceController; 0027 class SensorFace; 0028 class SensorQuery; 0029 0030 class FacesModel : public QStandardItemModel 0031 { 0032 Q_OBJECT 0033 public: 0034 enum AdditionalRoles { 0035 PluginIdRole = Qt::UserRole + 1, 0036 }; 0037 Q_ENUM(AdditionalRoles) 0038 0039 FacesModel(QObject *parent = nullptr); 0040 ~FacesModel() override = default; 0041 0042 Q_INVOKABLE void reload(); 0043 Q_INVOKABLE QString pluginId(int row); 0044 0045 QHash<int, QByteArray> roleNames() const override; 0046 }; 0047 0048 class PresetsModel : public QStandardItemModel 0049 { 0050 Q_OBJECT 0051 public: 0052 enum AdditionalRoles { PluginIdRole = Qt::UserRole + 1, ConfigRole, WritableRole }; 0053 Q_ENUM(AdditionalRoles) 0054 0055 PresetsModel(QObject *parent = nullptr); 0056 ~PresetsModel() override = default; 0057 0058 Q_INVOKABLE void reload(); 0059 0060 QHash<int, QByteArray> roleNames() const override; 0061 }; 0062 0063 struct SensorResolver { 0064 SensorResolver(SensorFaceController *_controller, const QJsonArray &_expected); 0065 void execute(); 0066 0067 SensorFaceController *controller = nullptr; 0068 0069 QJsonArray expected; 0070 QJsonArray found; 0071 QJsonArray missing; 0072 0073 QList<SensorQuery *> queries; 0074 0075 std::function<void(SensorResolver *)> callback; 0076 }; 0077 0078 // This is exported so we can use it in autotests 0079 class SENSORFACES_EXPORT SensorFaceControllerPrivate 0080 { 0081 public: 0082 SensorFaceControllerPrivate(); 0083 0084 QJsonArray readSensors(const KConfigGroup &config, const QString &entryName); 0085 QJsonArray readAndUpdateSensors(KConfigGroup &config, const QString &entryName); 0086 QString replaceDiskId(const QString &entryname) const; 0087 QString replacePartitionId(const QString &entryname) const; 0088 void resolveSensors(const QJsonArray &partialEntries, std::function<void(SensorResolver *)>); 0089 SensorFace *createGui(const QString &qmlPath); 0090 QQuickItem *createConfigUi(const QString &file, const QVariantMap &initialProperties); 0091 0092 SensorFaceController *q; 0093 QString title; 0094 QQmlEngine *engine; 0095 0096 KConfigGroup faceProperties; 0097 KConfigPropertyMap *faceConfiguration = nullptr; 0098 KConfigLoader *faceConfigLoader = nullptr; 0099 0100 bool configNeedsSave = false; 0101 KPackage::Package facePackage; 0102 QString faceId; 0103 KLocalizedContext *contextObj = nullptr; 0104 KConfigGroup configGroup; 0105 KConfigGroup appearanceGroup; 0106 KConfigGroup sensorsGroup; 0107 KConfigGroup colorsGroup; 0108 KConfigGroup labelsGroup; 0109 QPointer<SensorFace> fullRepresentation; 0110 QPointer<SensorFace> compactRepresentation; 0111 QPointer<QQuickItem> faceConfigUi; 0112 QPointer<QQuickItem> appearanceConfigUi; 0113 QPointer<QQuickItem> sensorsConfigUi; 0114 0115 QJsonArray totalSensors; 0116 QJsonArray highPrioritySensorIds; 0117 QJsonArray lowPrioritySensorIds; 0118 QJsonArray missingSensors; 0119 0120 QTimer *syncTimer; 0121 bool shouldSync = true; 0122 FacesModel *availableFacesModel = nullptr; 0123 PresetsModel *availablePresetsModel = nullptr; 0124 0125 static QList<QPair<QRegularExpression, QString>> sensorIdReplacements; 0126 static QRegularExpression oldDiskSensor; 0127 static QRegularExpression oldPartitionSensor; 0128 }; 0129 0130 }