File: soliddeviceengine.h

package info (click to toggle)
plasma-workspace 4%3A5.27.5-2%2Bdeb12u2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 102,040 kB
  • sloc: cpp: 121,800; xml: 3,238; python: 645; perl: 586; sh: 254; javascript: 113; ruby: 62; makefile: 15; ansic: 13
file content (87 lines) | stat: -rw-r--r-- 2,493 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
    SPDX-FileCopyrightText: 2007 Christopher Blauvelt <cblauvelt@gmail.com>

    SPDX-License-Identifier: LGPL-2.0-only
*/

#pragma once

#include <QList>
#include <QMap>
#include <QObject>
#include <QPair>
#include <QString>

#include <solid/device.h>
#include <solid/deviceinterface.h>
#include <solid/devicenotifier.h>
#include <solid/predicate.h>

#include "devicesignalmapmanager.h"
#include "devicesignalmapper.h"
#include "hddtemp.h"
#include <KIO/FileSystemFreeSpaceJob>
#include <Plasma/DataEngine>
#include <Plasma/Service>

enum State {
    Idle = 0,
    Mounting = 1,
    Unmounting = 2,
};

enum OperationResult {
    Working = 0,
    Successful = 1,
    Unsuccessful = 2,
};

/**
 * This class evaluates the basic expressions given in the interface.
 */
class SolidDeviceEngine : public Plasma::DataEngine
{
    Q_OBJECT
    friend class SolidDeviceService;

public:
    SolidDeviceEngine(QObject *parent, const QVariantList &args);
    ~SolidDeviceEngine() override;
    Plasma::Service *serviceForSource(const QString &source) override;

protected:
    bool sourceRequestEvent(const QString &name) override;
    bool updateSourceEvent(const QString &source) override;

private:
    bool populateDeviceData(const QString &name);
    bool updateStorageSpace(const QString &udi);
    bool updateHardDiskTemperature(const QString &udi);
    bool updateEmblems(const QString &udi);
    bool updateInUse(const QString &udi);
    bool forceUpdateAccessibility(const QString &udi);
    void listenForNewDevices();

    // predicate in string form, list of devices by udi
    QMap<QString, QStringList> m_predicatemap;
    // udi, corresponding device
    QMap<QString, Solid::Device> m_devicemap;
    // udi, corresponding encrypted container udi;
    QMap<QString, QString> m_encryptedContainerMap;
    // path, for pending file system free space jobs
    QSet<QString> m_paths;
    DeviceSignalMapManager *m_signalmanager;

    HddTemp *m_temperature;
    Solid::DeviceNotifier *m_notifier;

private Q_SLOTS:
    void deviceAdded(const QString &udi);
    void deviceRemoved(const QString &udi);
    void deviceChanged(const QString &udi, const QString &property, const QVariant &value);
    void sourceWasRemoved(const QString &source);
    void setMountingState(const QString &udi);
    void setUnmountingState(const QString &udi);
    void setIdleState(Solid::ErrorType error, QVariant errorData, const QString &udi);
    void deviceChanged(const QMap<QString, int> &props);
};