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
28namespace 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