/
partitionmodel.h
182 lines (154 loc) · 6.68 KB
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
/*
* Copyright (C) 2016 Jolla Ltd. <andrew.den.exter@jolla.com>
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/
#ifndef PARTITIONMODEL_H
#define PARTITIONMODEL_H
#include <QAbstractListModel>
#include <partitionmanager.h>
class SYSTEMSETTINGS_EXPORT PartitionModel : public QAbstractListModel
{
Q_OBJECT
Q_ENUMS(Status)
Q_ENUMS(StorageType)
Q_FLAGS(StorageTypes)
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
Q_PROPERTY(StorageTypes storageTypes READ storageTypes WRITE setStorageTypes NOTIFY storageTypesChanged)
47
Q_PROPERTY(QStringList supportedFormatTypes READ supportedFormatTypes CONSTANT)
48
Q_PROPERTY(bool externalStoragesPopulated READ externalStoragesPopulated NOTIFY externalStoragesPopulatedChanged)
49
50
51
52
53
54
55
56
57
public:
enum {
ReadOnlyRole,
StatusRole,
CanMountRole,
MountFailedRole,
StorageTypeRole,
FilesystemTypeRole,
58
DeviceLabelRole,
59
DevicePathRole,
60
DeviceNameRole,
61
62
63
64
MountPathRole,
BytesAvailableRole,
BytesTotalRole,
BytesFreeRole,
65
66
PartitionModelRole,
IsCryptoDeviceRoles,
67
IsSupportedFileSystemType,
68
IsEncryptedRoles,
69
CryptoBackingDevicePath,
70
DriveRole,
71
72
};
73
// For Status role
74
75
76
77
enum Status {
Unmounted = Partition::Unmounted,
Mounting = Partition::Mounting,
Mounted = Partition::Mounted,
78
79
Unmounting = Partition::Unmounting,
Formatting = Partition::Formatting,
80
81
82
83
84
Formatted = Partition::Formatted,
Unlocking = Partition::Unlocking,
Unlocked = Partition::Unlocked,
Locking = Partition::Locking,
Locked = Partition::Locked,
85
86
87
88
89
90
91
92
93
};
enum StorageType {
Invalid = Partition::Invalid,
System = Partition::System,
User = Partition::User,
Mass = Partition::Mass,
External = Partition::External,
94
ExcludeParents = Partition::ExcludeParents,
95
96
97
98
99
Internal = Partition::Internal,
Any = Partition::Any
};
100
101
102
103
104
105
106
107
enum ConnectionBus {
SDIO = Partition::SDIO,
USB = Partition::USB,
IEEE1394 = Partition::IEEE1394,
UnknownBus = Partition::UnknownBus
};
Q_ENUM(ConnectionBus)
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
enum Error {
ErrorFailed = Partition::ErrorFailed,
ErrorCancelled = Partition::ErrorCancelled,
ErrorAlreadyCancelled = Partition::ErrorAlreadyCancelled,
ErrorNotAuthorized = Partition::ErrorNotAuthorized,
ErrorNotAuthorizedCanObtain = Partition::ErrorNotAuthorizedCanObtain,
ErrorNotAuthorizedDismissed = Partition::ErrorNotAuthorizedDismissed,
ErrorAlreadyMounted = Partition::ErrorAlreadyMounted,
ErrorNotMounted = Partition::ErrorNotMounted,
ErrorOptionNotPermitted = Partition::ErrorOptionNotPermitted,
ErrorMountedByOtherUser = Partition::ErrorMountedByOtherUser,
ErrorAlreadyUnmounting = Partition::ErrorAlreadyUnmounting,
ErrorNotSupported = Partition::ErrorNotSupported,
ErrorTimedout = Partition::ErrorTimedout,
ErrorWouldWakeup = Partition::ErrorWouldWakeup,
ErrorDeviceBusy = Partition::ErrorDeviceBusy
};
Q_ENUM(Error)
127
128
129
130
131
132
133
134
Q_DECLARE_FLAGS(StorageTypes, StorageType)
explicit PartitionModel(QObject *parent = 0);
~PartitionModel();
StorageTypes storageTypes() const;
void setStorageTypes(StorageTypes storageTypes);
135
QStringList supportedFormatTypes() const;
136
bool externalStoragesPopulated() const;
137
138
139
140
Q_INVOKABLE void refresh();
Q_INVOKABLE void refresh(int index);
141
142
143
144
Q_INVOKABLE void lock(const QString &devicePath);
Q_INVOKABLE void unlock(const QString &devicePath, const QString &passphrase);
Q_INVOKABLE void mount(const QString &devicePath);
Q_INVOKABLE void unmount(const QString &devicePath);
145
Q_INVOKABLE void format(const QString &devicePath, const QVariantMap &arguments);
146
147
Q_INVOKABLE QString objectPath(const QString &devicePath) const;
148
149
150
151
152
153
154
155
156
QHash<int, QByteArray> roleNames() const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const;
signals:
void countChanged();
void storageTypesChanged();
157
void externalStoragesPopulatedChanged();
158
159
void errorMessage(const QString &objectPath, const QString &errorName);
160
161
void lockError(Error error);
void unlockError(Error error);
162
163
164
165
void mountError(Error error);
void unmountError(Error error);
void formatError(Error error);
166
167
168
private:
void update();
169
const Partition *getPartition(const QString &devicePath) const;
170
171
172
173
174
175
176
177
178
179
180
181
182
void partitionChanged(const Partition &partition);
void partitionAdded(const Partition &partition);
void partitionRemoved(const Partition &partition);
QExplicitlySharedDataPointer<PartitionManagerPrivate> m_manager;
QVector<Partition> m_partitions;
StorageTypes m_storageTypes;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(PartitionModel::StorageTypes)
#endif