diff --git a/src/partition.cpp b/src/partition.cpp index 35e2cfb..a7a795b 100644 --- a/src/partition.cpp +++ b/src/partition.cpp @@ -126,6 +126,11 @@ QString Partition::filesystemType() const return d ? d->filesystemType : QString(); } +QString Partition::cryptoBackingDevicePath() const +{ + return d ? d->cryptoBackingDevicePath : QString(); +} + bool Partition::isSupportedFileSystemType() const { diff --git a/src/partition.h b/src/partition.h index 50146fe..5dc02e0 100644 --- a/src/partition.h +++ b/src/partition.h @@ -105,6 +105,7 @@ class SYSTEMSETTINGS_EXPORT Partition bool mountFailed() const; bool isCryptoDevice() const; bool isEncrypted() const; + QString cryptoBackingDevicePath() const; StorageType storageType() const; diff --git a/src/partition_p.h b/src/partition_p.h index ee0b629..1044af1 100644 --- a/src/partition_p.h +++ b/src/partition_p.h @@ -70,6 +70,7 @@ class PartitionPrivate : public QSharedData QString mountPath; QString filesystemType; QString activeState; + QString cryptoBackingDevicePath; qint64 bytesAvailable; qint64 bytesTotal; qint64 bytesFree; diff --git a/src/partitionmodel.cpp b/src/partitionmodel.cpp index 3560d9e..e17c9b0 100644 --- a/src/partitionmodel.cpp +++ b/src/partitionmodel.cpp @@ -253,6 +253,7 @@ QHash PartitionModel::roleNames() const { IsCryptoDeviceRoles, "isCryptoDevice"}, { IsSupportedFileSystemType, "isSupportedFileSystemType"}, { IsEncryptedRoles, "isEncrypted"}, + { CryptoBackingDevicePath, "cryptoBackingDevicePath"}, }; return roleNames; @@ -305,6 +306,8 @@ QVariant PartitionModel::data(const QModelIndex &index, int role) const return partition.isSupportedFileSystemType(); case IsEncryptedRoles: return partition.isEncrypted(); + case CryptoBackingDevicePath: + return partition.cryptoBackingDevicePath(); default: return QVariant(); } diff --git a/src/partitionmodel.h b/src/partitionmodel.h index 65c7eea..64f7168 100644 --- a/src/partitionmodel.h +++ b/src/partitionmodel.h @@ -65,6 +65,7 @@ class SYSTEMSETTINGS_EXPORT PartitionModel : public QAbstractListModel IsCryptoDeviceRoles, IsSupportedFileSystemType, IsEncryptedRoles, + CryptoBackingDevicePath }; // For Status role diff --git a/src/udisks2block.cpp b/src/udisks2block.cpp index 213d701..5db1817 100644 --- a/src/udisks2block.cpp +++ b/src/udisks2block.cpp @@ -152,10 +152,10 @@ bool UDisks2::Block::hasCryptoBackingDevice() const return cryptoBackingDev != QLatin1String("/"); } -QString UDisks2::Block::cryptoBackingDeviceName() const +QString UDisks2::Block::cryptoBackingDevicePath() const { const QString object = cryptoBackingDeviceObjectPath(); - return Block::cryptoBackingDeviceName(object); + return Block::cryptoBackingDevicePath(object); } QString UDisks2::Block::cryptoBackingDeviceObjectPath() const @@ -259,10 +259,10 @@ void UDisks2::Block::dumpInfo() const qCInfo(lcMemoryCardLog) << "- idversion:" << idVersion() << "idlabel:" << idLabel(); qCInfo(lcMemoryCardLog) << "- iduuid:" << idUUID(); qCInfo(lcMemoryCardLog) << "- ismountable:" << isMountable() << "mount path:" << mountPath(); - qCInfo(lcMemoryCardLog) << "- isencrypted:" << isEncrypted() << "crypto backing device:" << cryptoBackingDeviceName(); + qCInfo(lcMemoryCardLog) << "- isencrypted:" << isEncrypted() << "crypto backing device:" << cryptoBackingDevicePath(); } -QString UDisks2::Block::cryptoBackingDeviceName(const QString &objectPath) +QString UDisks2::Block::cryptoBackingDevicePath(const QString &objectPath) { if (objectPath == QLatin1String("/") || objectPath.isEmpty()) { return QString(); diff --git a/src/udisks2block_p.h b/src/udisks2block_p.h index 4ae2a72..75f9ccf 100644 --- a/src/udisks2block_p.h +++ b/src/udisks2block_p.h @@ -64,7 +64,7 @@ class Block : public QObject qint64 size() const; bool hasCryptoBackingDevice() const; - QString cryptoBackingDeviceName() const; + QString cryptoBackingDevicePath() const; QString cryptoBackingDeviceObjectPath() const; bool isEncrypted() const; @@ -92,7 +92,7 @@ class Block : public QObject void dumpInfo() const; - static QString cryptoBackingDeviceName(const QString &objectPath); + static QString cryptoBackingDevicePath(const QString &objectPath); signals: void completed(); diff --git a/src/udisks2monitor.cpp b/src/udisks2monitor.cpp index 7ec0f27..dbb5ee1 100644 --- a/src/udisks2monitor.cpp +++ b/src/udisks2monitor.cpp @@ -295,14 +295,16 @@ void UDisks2::Monitor::setPartitionProperties(QExplicitlySharedDataPointermountPath().isEmpty() ? Partition::Unmounted : Partition::Mounted; partition->isCryptoDevice = blockDevice->isEncrypted() || blockDevice->hasCryptoBackingDevice(); partition->isEncrypted = blockDevice->isEncrypted(); + partition->cryptoBackingDevicePath = blockDevice->cryptoBackingDevicePath(); } void UDisks2::Monitor::updatePartitionProperties(const UDisks2::Block *blockDevice) { bool hasCryptoBackingDevice = blockDevice->hasCryptoBackingDevice(); - const QString cryptoBackingDevice = blockDevice->cryptoBackingDeviceName(); + const QString cryptoBackingDevicePath = blockDevice->cryptoBackingDevicePath(); + for (auto partition : m_manager->m_partitions) { - if ((partition->devicePath == blockDevice->device()) || (hasCryptoBackingDevice && (partition->devicePath == cryptoBackingDevice))) { + if ((partition->devicePath == blockDevice->device()) || (hasCryptoBackingDevice && (partition->devicePath == cryptoBackingDevicePath))) { setPartitionProperties(partition, blockDevice); partition->valid = true; m_manager->refresh(partition.data());