1 | /* |
2 | Copyright 2006-2007 Kevin Ottens <ervin@kde.org> |
3 | |
4 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Lesser General Public |
6 | License as published by the Free Software Foundation; either |
7 | version 2.1 of the License, or (at your option) version 3, or any |
8 | later version accepted by the membership of KDE e.V. (or its |
9 | successor approved by the membership of KDE e.V.), which shall |
10 | act as a proxy defined in Section 6 of version 3 of the license. |
11 | |
12 | This library is distributed in the hope that it will be useful, |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 | Lesser General Public License for more details. |
16 | |
17 | You should have received a copy of the GNU Lesser General Public |
18 | License along with this library. If not, see <http://www.gnu.org/licenses/>. |
19 | */ |
20 | |
21 | #ifndef SOLID_STORAGEVOLUME_H |
22 | #define SOLID_STORAGEVOLUME_H |
23 | |
24 | #include <solid/solid_export.h> |
25 | |
26 | #include <solid/deviceinterface.h> |
27 | |
28 | namespace Solid |
29 | { |
30 | class StorageVolumePrivate; |
31 | class Device; |
32 | |
33 | /** |
34 | * This device interface is available on volume devices. |
35 | * |
36 | * A volume is anything that can contain data (partition, optical disc, |
37 | * memory card). It's a particular kind of block device. |
38 | */ |
39 | class SOLID_EXPORT StorageVolume : public DeviceInterface |
40 | { |
41 | Q_OBJECT |
42 | Q_ENUMS(UsageType) |
43 | Q_PROPERTY(bool ignored READ isIgnored) |
44 | Q_PROPERTY(UsageType usage READ usage) |
45 | Q_PROPERTY(QString fsType READ fsType) |
46 | Q_PROPERTY(QString label READ label) |
47 | Q_PROPERTY(QString uuid READ uuid) |
48 | Q_PROPERTY(qulonglong size READ size) |
49 | Q_DECLARE_PRIVATE(StorageVolume) |
50 | friend class Device; |
51 | |
52 | public: |
53 | /** |
54 | * This enum type defines the how a volume is used. |
55 | * |
56 | * - FileSystem : A mountable filesystem volume |
57 | * - PartitionTable : A volume containing a partition table |
58 | * - Raid : A volume member of a raid set (not mountable) |
59 | * - Other : A not mountable volume (like a swap partition) |
60 | * - Unused : An unused or free volume |
61 | */ |
62 | enum UsageType { Other = 0, Unused = 1, FileSystem = 2, PartitionTable = 3, Raid = 4, Encrypted = 5 }; |
63 | |
64 | |
65 | private: |
66 | /** |
67 | * Creates a new StorageVolume object. |
68 | * You generally won't need this. It's created when necessary using |
69 | * Device::as(). |
70 | * |
71 | * @param backendObject the device interface object provided by the backend |
72 | * @see Solid::Device::as() |
73 | */ |
74 | explicit StorageVolume(QObject *backendObject); |
75 | |
76 | public: |
77 | /** |
78 | * Destroys a StorageVolume object. |
79 | */ |
80 | virtual ~StorageVolume(); |
81 | |
82 | |
83 | /** |
84 | * Get the Solid::DeviceInterface::Type of the StorageVolume device interface. |
85 | * |
86 | * @return the StorageVolume device interface type |
87 | * @see Solid::DeviceInterface::Type |
88 | */ |
89 | static Type deviceInterfaceType() { return DeviceInterface::StorageVolume; } |
90 | |
91 | |
92 | /** |
93 | * Indicates if this volume should be ignored by applications. |
94 | * |
95 | * If it should be ignored, it generally means that it should be |
96 | * invisible to the user. It's useful for firmware partitions or |
97 | * OS reinstall partitions on some systems. |
98 | * |
99 | * @return true if the volume should be ignored |
100 | */ |
101 | bool isIgnored() const; |
102 | |
103 | /** |
104 | * Retrieves the type of use for this volume (for example filesystem). |
105 | * |
106 | * @return the usage type |
107 | * @see Solid::StorageVolume::UsageType |
108 | */ |
109 | UsageType usage() const; |
110 | |
111 | /** |
112 | * Retrieves the filesystem type of this volume. |
113 | * |
114 | * FIXME: It's a platform dependent string, maybe we should switch to |
115 | * an enum? |
116 | * |
117 | * @return the filesystem type if applicable, QString() otherwise |
118 | */ |
119 | QString fsType() const; |
120 | |
121 | /** |
122 | * Retrieves this volume label. |
123 | * |
124 | * @return the volume label if available, QString() otherwise |
125 | */ |
126 | QString label() const; |
127 | |
128 | /** |
129 | * Retrieves this volume Universal Unique IDentifier (UUID). |
130 | * |
131 | * You can generally assume that this identifier is unique with reasonable |
132 | * confidence. Except if the volume UUID has been forged to intentionally |
133 | * provoke a collision, the probability to have two volumes having the same |
134 | * UUID is low. |
135 | * |
136 | * @return the Universal Unique IDentifier if available, QString() otherwise |
137 | */ |
138 | QString uuid() const; |
139 | |
140 | /** |
141 | * Retrieves this volume size in bytes. |
142 | * |
143 | * @return the size of this volume |
144 | */ |
145 | qulonglong size() const; |
146 | |
147 | /** |
148 | * Retrieves the crypto container of this volume. |
149 | * |
150 | * @return the encrypted volume containing the current volume if appliable, |
151 | * an invalid device otherwise |
152 | */ |
153 | Device encryptedContainer() const; |
154 | |
155 | protected: |
156 | /** |
157 | * @internal |
158 | */ |
159 | StorageVolume(StorageVolumePrivate &dd, QObject *backendObject); |
160 | }; |
161 | } |
162 | |
163 | #endif // SOLID_STORAGEVOLUME_H |
164 | |