1 /*
2     This file is part of the KDE Baloo project.
3     SPDX-FileCopyrightText: 2011 Sebastian Trueg <trueg@kde.org>
4     SPDX-FileCopyrightText: 2014 Vishesh Handa <vhanda@kde.org>
5 
6     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8 
9 #ifndef STORAGE_DEVICES_H
10 #define STORAGE_DEVICES_H
11 
12 #include <QObject>
13 #include <QHash>
14 
15 #include <Solid/Device>
16 
17 namespace Baloo
18 {
19 
20 /**
21  * The removable media cache
22  * media that are supported by Baloo.
23  */
24 class StorageDevices : public QObject
25 {
26     Q_OBJECT
27 
28 public:
29     explicit StorageDevices(QObject* parent = nullptr);
30     ~StorageDevices();
31 
32     class Entry
33     {
34     public:
35         Entry();
36         explicit Entry(const Solid::Device& device);
37 
device()38         Solid::Device device() const {
39             return m_device;
40         }
41 
42         bool isMounted() const;
43         QString mountPath() const;
44 
45         /**
46          * Returns true if Baloo should be indexing this
47          * Currently we only index permanently mounted media
48          */
49         bool isUsable() const;
50 
udi()51         QString udi() const {
52             return m_device.udi();
53         }
54     private:
55         Solid::Device m_device;
56     };
57 
58     QList<Entry> allMedia() const;
59     bool isEmpty() const;
60 
61 Q_SIGNALS:
62     void deviceAdded(const Baloo::StorageDevices::Entry* entry);
63     void deviceRemoved(const Baloo::StorageDevices::Entry* entry);
64     void deviceAccessibilityChanged(const Baloo::StorageDevices::Entry* entry);
65 
66 private Q_SLOTS:
67     void slotSolidDeviceAdded(const QString& udi);
68     void slotSolidDeviceRemoved(const QString& udi);
69     void slotAccessibilityChanged(bool accessible, const QString& udi);
70 
71 private:
72     void initCacheEntries();
73 
74     Entry* createCacheEntry(const Solid::Device& dev);
75 
76     /// maps Solid UDI to Entry
77     QHash<QString, Entry> m_metadataCache;
78 };
79 
80 } // namespace Baloo
81 
82 #endif // STORAGE_DEVICES_H
83