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 };