File indexing completed on 2024-05-12 05:37:20
0001 /* 0002 SPDX-FileCopyrightText: 2007 Christopher Blauvelt <cblauvelt@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #pragma once 0008 0009 #include <QList> 0010 #include <QMap> 0011 #include <QObject> 0012 #include <QPair> 0013 #include <QString> 0014 0015 #include <solid/device.h> 0016 #include <solid/deviceinterface.h> 0017 #include <solid/devicenotifier.h> 0018 #include <solid/predicate.h> 0019 0020 #include "devicesignalmapmanager.h" 0021 #include "devicesignalmapper.h" 0022 #include "hddtemp.h" 0023 #include <KIO/FileSystemFreeSpaceJob> 0024 #include <Plasma5Support/DataEngine> 0025 #include <Plasma5Support/Service> 0026 0027 enum State { 0028 Idle = 0, 0029 Mounting = 1, 0030 Unmounting = 2, 0031 }; 0032 0033 enum OperationResult { 0034 Working = 0, 0035 Successful = 1, 0036 Unsuccessful = 2, 0037 }; 0038 0039 /** 0040 * This class evaluates the basic expressions given in the interface. 0041 */ 0042 class SolidDeviceEngine : public Plasma5Support::DataEngine 0043 { 0044 Q_OBJECT 0045 friend class SolidDeviceService; 0046 0047 public: 0048 SolidDeviceEngine(QObject *parent); 0049 ~SolidDeviceEngine() override; 0050 Plasma5Support::Service *serviceForSource(const QString &source) override; 0051 0052 protected: 0053 bool sourceRequestEvent(const QString &name) override; 0054 bool updateSourceEvent(const QString &source) override; 0055 0056 private: 0057 bool populateDeviceData(const QString &name); 0058 bool updateStorageSpace(const QString &udi); 0059 bool updateHardDiskTemperature(const QString &udi); 0060 bool updateEmblems(const QString &udi); 0061 bool updateInUse(const QString &udi); 0062 bool forceUpdateAccessibility(const QString &udi); 0063 void listenForNewDevices(); 0064 0065 // predicate in string form, list of devices by udi 0066 QMap<QString, QStringList> m_predicatemap; 0067 // udi, corresponding device 0068 QMap<QString, Solid::Device> m_devicemap; 0069 // udi, corresponding encrypted container udi; 0070 QMap<QString, QString> m_encryptedContainerMap; 0071 // path, for pending file system free space jobs 0072 QSet<QString> m_paths; 0073 DeviceSignalMapManager *m_signalmanager; 0074 0075 HddTemp *m_temperature; 0076 Solid::DeviceNotifier *m_notifier; 0077 0078 private Q_SLOTS: 0079 void deviceAdded(const QString &udi); 0080 void deviceRemoved(const QString &udi); 0081 void deviceChanged(const QString &udi, const QString &property, const QVariant &value); 0082 void sourceWasRemoved(const QString &source); 0083 void setMountingState(const QString &udi); 0084 void setUnmountingState(const QString &udi); 0085 void setIdleState(Solid::ErrorType error, QVariant errorData, const QString &udi); 0086 void deviceChanged(const QMap<QString, int> &props); 0087 };