From 5f315b1985753fcb0812523685d8c81ce029128e Mon Sep 17 00:00:00 2001 From: Raine Makelainen Date: Tue, 27 Nov 2018 14:09:13 +0200 Subject: [PATCH] [nemo-storage] Expose drive map from the partition model. Contributes to JB#42943 This can be used e.g. when showing unsupported partitions. --- src/partition.cpp | 4 ++-- src/partition.h | 2 +- src/partition_p.h | 5 +++-- src/partitionmanager.cpp | 12 +++++++++--- src/partitionmodel.cpp | 6 +++--- src/partitionmodel.h | 2 +- src/udisks2block.cpp | 10 ++++++++++ src/udisks2block_p.h | 4 +++- src/udisks2monitor.cpp | 13 +++++++++---- 9 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/partition.cpp b/src/partition.cpp index b456449..94b561c 100644 --- a/src/partition.cpp +++ b/src/partition.cpp @@ -101,9 +101,9 @@ Partition::StorageType Partition::storageType() const return d ? d->storageType : Invalid; } -Partition::ConnectionBus Partition::connectionBus() const +QVariantMap Partition::drive() const { - return d ? d->connectionBus : UnknownBus; + return d ? d->drive : QVariantMap(); } QString Partition::devicePath() const diff --git a/src/partition.h b/src/partition.h index bf144de..feabdf0 100644 --- a/src/partition.h +++ b/src/partition.h @@ -115,7 +115,7 @@ class SYSTEMSETTINGS_EXPORT Partition QString cryptoBackingDevicePath() const; StorageType storageType() const; - ConnectionBus connectionBus() const; + QVariantMap drive() const; QString devicePath() const; QString deviceName() const; diff --git a/src/partition_p.h b/src/partition_p.h index 11b9c0c..9faf49f 100644 --- a/src/partition_p.h +++ b/src/partition_p.h @@ -34,6 +34,8 @@ #include "partition.h" +#include + class PartitionManagerPrivate; class PartitionPrivate : public QSharedData @@ -45,7 +47,6 @@ class PartitionPrivate : public QSharedData , bytesTotal(0) , bytesFree(0) , storageType(Partition::Invalid) - , connectionBus(Partition::UnknownBus) , status(Partition::Unmounted) , readOnly(true) , canMount(false) @@ -76,8 +77,8 @@ class PartitionPrivate : public QSharedData qint64 bytesTotal; qint64 bytesFree; Partition::StorageType storageType; - Partition::ConnectionBus connectionBus; Partition::Status status; + QVariantMap drive; bool readOnly; bool canMount; bool isEncrypted; diff --git a/src/partitionmanager.cpp b/src/partitionmanager.cpp index 5239cd3..f128c3b 100644 --- a/src/partitionmanager.cpp +++ b/src/partitionmanager.cpp @@ -63,17 +63,22 @@ PartitionManagerPrivate::PartitionManagerPrivate() connect(m_udisksMonitor.data(), &UDisks2::Monitor::unmountError, this, &PartitionManagerPrivate::unmountError); connect(m_udisksMonitor.data(), &UDisks2::Monitor::formatError, this, &PartitionManagerPrivate::formatError); + QVariantMap defaultDrive; + defaultDrive.insert(QLatin1String("model"), QString()); + defaultDrive.insert(QLatin1String("vendor"), QString()); + defaultDrive.insert(QLatin1String("connectionBus"), Partition::SDIO); + QExplicitlySharedDataPointer root(new PartitionPrivate(this)); root->storageType = Partition::System; - root->connectionBus = Partition::SDIO; root->mountPath = QStringLiteral("/"); + root->drive = defaultDrive; m_partitions.append(root); QExplicitlySharedDataPointer home(new PartitionPrivate(this)); home->storageType = Partition::User; - home->connectionBus = Partition::SDIO; home->mountPath = QStringLiteral("/home"); + home->drive = defaultDrive; m_partitions.append(home); refresh(m_partitions, m_partitions); @@ -153,7 +158,8 @@ void PartitionManagerPrivate::add(QExplicitlySharedDataPointer { int insertIndex = 0; for (const auto existingPartition : m_partitions) { - if (existingPartition->connectionBus <= partition->connectionBus) + if (existingPartition->drive.value(QLatin1String("connectionBus")).toInt() + <= partition->drive.value(QLatin1String("connectionBus")).toInt()) ++insertIndex; else break; diff --git a/src/partitionmodel.cpp b/src/partitionmodel.cpp index 4dacded..0b0d439 100644 --- a/src/partitionmodel.cpp +++ b/src/partitionmodel.cpp @@ -261,7 +261,7 @@ QHash PartitionModel::roleNames() const { IsSupportedFileSystemType, "isSupportedFileSystemType"}, { IsEncryptedRoles, "isEncrypted"}, { CryptoBackingDevicePath, "cryptoBackingDevicePath"}, - { ConnectionBusRole, "connectionBus"}, + { DriveRole, "drive"}, }; return roleNames; @@ -316,8 +316,8 @@ QVariant PartitionModel::data(const QModelIndex &index, int role) const return partition.isEncrypted(); case CryptoBackingDevicePath: return partition.cryptoBackingDevicePath(); - case ConnectionBusRole: - return partition.connectionBus(); + case DriveRole: + return partition.drive(); default: return QVariant(); } diff --git a/src/partitionmodel.h b/src/partitionmodel.h index 719bfcc..249a3b0 100644 --- a/src/partitionmodel.h +++ b/src/partitionmodel.h @@ -66,7 +66,7 @@ class SYSTEMSETTINGS_EXPORT PartitionModel : public QAbstractListModel IsSupportedFileSystemType, IsEncryptedRoles, CryptoBackingDevicePath, - ConnectionBusRole, + DriveRole, }; // For Status role diff --git a/src/udisks2block.cpp b/src/udisks2block.cpp index c8169a3..5926bb8 100644 --- a/src/udisks2block.cpp +++ b/src/udisks2block.cpp @@ -129,6 +129,16 @@ QString UDisks2::Block::drive() const return value(QStringLiteral("Drive")).toString(); } +QString UDisks2::Block::driveModel() const +{ + return NemoDBus::demarshallDBusArgument(m_drive.value(QStringLiteral("Model"))).toString(); +} + +QString UDisks2::Block::driveVendor() const +{ + return NemoDBus::demarshallDBusArgument(m_drive.value(QStringLiteral("Vendor"))).toString(); +} + QString UDisks2::Block::connectionBus() const { QString bus = NemoDBus::demarshallDBusArgument(m_drive.value(QStringLiteral("ConnectionBus"))).toString(); diff --git a/src/udisks2block_p.h b/src/udisks2block_p.h index 0d62b9e..542ea77 100644 --- a/src/udisks2block_p.h +++ b/src/udisks2block_p.h @@ -57,9 +57,11 @@ class Block : public QObject QString device() const; QString preferredDevice() const; QString drive() const; + QString driveModel() const; + QString driveVendor() const; QString connectionBus() const; - QString partitionTable() const; + QString partitionTable() const; bool isPartition() const; bool isPartitionTable() const; diff --git a/src/udisks2monitor.cpp b/src/udisks2monitor.cpp index 2967e5f..a7d301e 100644 --- a/src/udisks2monitor.cpp +++ b/src/udisks2monitor.cpp @@ -331,16 +331,21 @@ void UDisks2::Monitor::setPartitionProperties(QExplicitlySharedDataPointerisEncrypted = blockDevice->isEncrypted(); partition->cryptoBackingDevicePath = blockDevice->cryptoBackingDevicePath(); + QVariantMap drive; + QString connectionBus = blockDevice->connectionBus(); if (connectionBus == QLatin1String("sdio")) { - partition->connectionBus = Partition::SDIO; + drive.insert(QLatin1String("connectionBus"), Partition::SDIO); } else if (connectionBus == QLatin1String("usb")) { - partition->connectionBus = Partition::USB; + drive.insert(QLatin1String("connectionBus"), Partition::USB); } else if (connectionBus == QLatin1String("ieee1394")) { - partition->connectionBus = Partition::IEEE1394; + drive.insert(QLatin1String("connectionBus"), Partition::IEEE1394); } else { - partition->connectionBus = Partition::UnknownBus; + drive.insert(QLatin1String("connectionBus"), Partition::UnknownBus); } + drive.insert(QLatin1String("model"), blockDevice->driveModel()); + drive.insert(QLatin1String("vendor"), blockDevice->driveVendor()); + partition->drive = drive; } void UDisks2::Monitor::updatePartitionProperties(const UDisks2::Block *blockDevice)