Skip to content
This repository was archived by the owner on Apr 28, 2022. It is now read-only.

Commit bc5da22

Browse files
committed
Merge branch 'jb42943' into 'master'
Make block devices without partition/partitiontable visible in model See merge request mer-core/nemo-qml-plugin-systemsettings!91
2 parents e1d9073 + 7b6a8ed commit bc5da22

17 files changed

+783
-386
lines changed

src/partition.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ Partition::StorageType Partition::storageType() const
101101
return d ? d->storageType : Invalid;
102102
}
103103

104-
Partition::ConnectionBus Partition::connectionBus() const
104+
QVariantMap Partition::drive() const
105105
{
106-
return d ? d->connectionBus : UnknownBus;
106+
return d ? d->drive : QVariantMap();
107107
}
108108

109109
QString Partition::devicePath() const

src/partition.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class SYSTEMSETTINGS_EXPORT Partition
115115
QString cryptoBackingDevicePath() const;
116116

117117
StorageType storageType() const;
118-
ConnectionBus connectionBus() const;
118+
QVariantMap drive() const;
119119

120120
QString devicePath() const;
121121
QString deviceName() const;

src/partition_p.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434

3535
#include "partition.h"
3636

37+
#include <QVariantMap>
38+
3739
class PartitionManagerPrivate;
3840

3941
class PartitionPrivate : public QSharedData
@@ -45,7 +47,6 @@ class PartitionPrivate : public QSharedData
4547
, bytesTotal(0)
4648
, bytesFree(0)
4749
, storageType(Partition::Invalid)
48-
, connectionBus(Partition::UnknownBus)
4950
, status(Partition::Unmounted)
5051
, readOnly(true)
5152
, canMount(false)
@@ -76,8 +77,8 @@ class PartitionPrivate : public QSharedData
7677
qint64 bytesTotal;
7778
qint64 bytesFree;
7879
Partition::StorageType storageType;
79-
Partition::ConnectionBus connectionBus;
8080
Partition::Status status;
81+
QVariantMap drive;
8182
bool readOnly;
8283
bool canMount;
8384
bool isEncrypted;

src/partitionmanager.cpp

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
#include "partitionmanager_p.h"
3333
#include "udisks2monitor_p.h"
34+
#include "udisks2blockdevices_p.h"
3435
#include "logging_p.h"
3536

3637
#include <QFile>
@@ -62,17 +63,22 @@ PartitionManagerPrivate::PartitionManagerPrivate()
6263
connect(m_udisksMonitor.data(), &UDisks2::Monitor::unmountError, this, &PartitionManagerPrivate::unmountError);
6364
connect(m_udisksMonitor.data(), &UDisks2::Monitor::formatError, this, &PartitionManagerPrivate::formatError);
6465

66+
QVariantMap defaultDrive;
67+
defaultDrive.insert(QLatin1String("model"), QString());
68+
defaultDrive.insert(QLatin1String("vendor"), QString());
69+
defaultDrive.insert(QLatin1String("connectionBus"), Partition::SDIO);
70+
6571
QExplicitlySharedDataPointer<PartitionPrivate> root(new PartitionPrivate(this));
6672
root->storageType = Partition::System;
67-
root->connectionBus = Partition::SDIO;
6873
root->mountPath = QStringLiteral("/");
74+
root->drive = defaultDrive;
6975

7076
m_partitions.append(root);
7177

7278
QExplicitlySharedDataPointer<PartitionPrivate> home(new PartitionPrivate(this));
7379
home->storageType = Partition::User;
74-
home->connectionBus = Partition::SDIO;
7580
home->mountPath = QStringLiteral("/home");
81+
home->drive = defaultDrive;
7682

7783
m_partitions.append(home);
7884
refresh(m_partitions, m_partitions);
@@ -152,7 +158,8 @@ void PartitionManagerPrivate::add(QExplicitlySharedDataPointer<PartitionPrivate>
152158
{
153159
int insertIndex = 0;
154160
for (const auto existingPartition : m_partitions) {
155-
if (existingPartition->connectionBus <= partition->connectionBus)
161+
if (existingPartition->drive.value(QLatin1String("connectionBus")).toInt()
162+
<= partition->drive.value(QLatin1String("connectionBus")).toInt())
156163
++insertIndex;
157164
else
158165
break;
@@ -299,7 +306,7 @@ void PartitionManagerPrivate::unlock(const Partition &partition, const QString &
299306
{
300307
qCInfo(lcMemoryCardLog) << "Can unlock:" << externalMedia.match(partition.deviceName()).hasMatch() << partition.devicePath();
301308
if (externalMedia.match(partition.deviceName()).hasMatch()) {
302-
m_udisksMonitor->instance()->unlock(partition.devicePath(), passphrase);
309+
m_udisksMonitor->unlock(partition.devicePath(), passphrase);
303310
} else {
304311
qCWarning(lcMemoryCardLog) << "Unlock allowed only for external memory cards," << partition.devicePath() << "is not allowed";
305312
}
@@ -309,7 +316,7 @@ void PartitionManagerPrivate::mount(const Partition &partition)
309316
{
310317
qCInfo(lcMemoryCardLog) << "Can mount:" << externalMedia.match(partition.deviceName()).hasMatch() << partition.devicePath();
311318
if (externalMedia.match(partition.deviceName()).hasMatch()) {
312-
m_udisksMonitor->instance()->mount(partition.devicePath());
319+
m_udisksMonitor->mount(partition.devicePath());
313320
} else {
314321
qCWarning(lcMemoryCardLog) << "Mount allowed only for external memory cards," << partition.devicePath() << "is not allowed";
315322
}
@@ -319,7 +326,7 @@ void PartitionManagerPrivate::unmount(const Partition &partition)
319326
{
320327
qCInfo(lcMemoryCardLog) << "Can unmount:" << externalMedia.match(partition.deviceName()).hasMatch() << partition.devicePath();
321328
if (externalMedia.match(partition.deviceName()).hasMatch()) {
322-
m_udisksMonitor->instance()->unmount(partition.devicePath());
329+
m_udisksMonitor->unmount(partition.devicePath());
323330
} else {
324331
qCWarning(lcMemoryCardLog) << "Unmount allowed only for external memory cards," << partition.devicePath() << "is not allowed";
325332
}
@@ -330,7 +337,7 @@ void PartitionManagerPrivate::format(const QString &devicePath, const QString &f
330337
QString deviceName = devicePath.section(QChar('/'), 2);
331338
qCInfo(lcMemoryCardLog) << "Can format:" << externalMedia.match(deviceName).hasMatch() << devicePath;
332339
if (externalMedia.match(deviceName).hasMatch()) {
333-
m_udisksMonitor->instance()->format(devicePath, filesystemType, arguments);
340+
m_udisksMonitor->format(devicePath, filesystemType, arguments);
334341
} else {
335342
qCWarning(lcMemoryCardLog) << "Formatting allowed only for external memory cards," << devicePath << "is not allowed";
336343
}
@@ -340,7 +347,7 @@ QString PartitionManagerPrivate::objectPath(const QString &devicePath) const
340347
{
341348
QString deviceName = devicePath.section(QChar('/'), 2);
342349
if (externalMedia.match(deviceName).hasMatch()) {
343-
return m_udisksMonitor->instance()->objectPath(devicePath);
350+
return UDisks2::BlockDevices::instance()->objectPath(devicePath);
344351
} else {
345352
qCWarning(lcMemoryCardLog) << "Object path existing only for external memory cards:" << devicePath;
346353
return QString();

src/partitionmanager_p.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class PartitionManagerPrivate : public QObject, public QSharedData
9090
void formatError(Partition::Error error);
9191

9292
private:
93+
// TODO: This is leaking (Disks2::Monitor is never free'ed).
9394
static PartitionManagerPrivate *sharedInstance;
9495

9596
Partitions m_partitions;

src/partitionmodel.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ QHash<int, QByteArray> PartitionModel::roleNames() const
261261
{ IsSupportedFileSystemType, "isSupportedFileSystemType"},
262262
{ IsEncryptedRoles, "isEncrypted"},
263263
{ CryptoBackingDevicePath, "cryptoBackingDevicePath"},
264-
{ ConnectionBusRole, "connectionBus"},
264+
{ DriveRole, "drive"},
265265
};
266266

267267
return roleNames;
@@ -316,8 +316,8 @@ QVariant PartitionModel::data(const QModelIndex &index, int role) const
316316
return partition.isEncrypted();
317317
case CryptoBackingDevicePath:
318318
return partition.cryptoBackingDevicePath();
319-
case ConnectionBusRole:
320-
return partition.connectionBus();
319+
case DriveRole:
320+
return partition.drive();
321321
default:
322322
return QVariant();
323323
}

src/partitionmodel.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class SYSTEMSETTINGS_EXPORT PartitionModel : public QAbstractListModel
6666
IsSupportedFileSystemType,
6767
IsEncryptedRoles,
6868
CryptoBackingDevicePath,
69-
ConnectionBusRole,
69+
DriveRole,
7070
};
7171

7272
// For Status role

src/src.pro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ SOURCES += \
3939
locationsettings.cpp \
4040
timezoneinfo.cpp \
4141
udisks2block.cpp \
42+
udisks2blockdevices.cpp \
4243
udisks2job.cpp \
4344
udisks2monitor.cpp
4445

@@ -78,6 +79,7 @@ HEADERS += \
7879
partition_p.h \
7980
partitionmanager_p.h \
8081
udisks2block_p.h \
82+
udisks2blockdevices_p.h \
8183
udisks2job_p.h \
8284
udisks2monitor_p.h
8385

0 commit comments

Comments
 (0)