From a306fa45a3640840ff102d65f0b6ee4f71436f20 Mon Sep 17 00:00:00 2001 From: Raine Makelainen Date: Thu, 30 Aug 2018 17:29:43 +0300 Subject: [PATCH] [systemsettings] Add a role to partition that tells whether partition is encrypted. Contributes to JB#42527 The role isCryptoDevice is true when the block device is encrypted meaning that it has Encrypted interface but not FileSystem or if the block has been unlocked and it has crypto backing device. --- src/partition.cpp | 5 +++++ src/partition.h | 1 + src/partition_p.h | 2 ++ src/partitionmodel.cpp | 5 ++++- src/partitionmodel.h | 3 ++- src/udisks2monitor.cpp | 1 + 6 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/partition.cpp b/src/partition.cpp index 3b5080d..8f8f289 100644 --- a/src/partition.cpp +++ b/src/partition.cpp @@ -86,6 +86,11 @@ bool Partition::mountFailed() const return d && d->mountFailed; } +bool Partition::isCryptoDevice() const +{ + return d ? d->isCryptoDevice : false; +} + Partition::StorageType Partition::storageType() const { return d ? d->storageType : Invalid; diff --git a/src/partition.h b/src/partition.h index 79c3190..42850cd 100644 --- a/src/partition.h +++ b/src/partition.h @@ -103,6 +103,7 @@ class SYSTEMSETTINGS_EXPORT Partition bool canMount() const; bool mountFailed() const; + bool isCryptoDevice() const; StorageType storageType() const; diff --git a/src/partition_p.h b/src/partition_p.h index c84d0af..c8c1ec5 100644 --- a/src/partition_p.h +++ b/src/partition_p.h @@ -48,6 +48,7 @@ class PartitionPrivate : public QSharedData , status(Partition::Unmounted) , readOnly(true) , canMount(false) + , isCryptoDevice(false) , mountFailed(false) , deviceRoot(false) , valid(false) @@ -74,6 +75,7 @@ class PartitionPrivate : public QSharedData Partition::Status status; bool readOnly; bool canMount; + bool isCryptoDevice; bool mountFailed; bool deviceRoot; // If valid, only mount status and available bytes will be checked diff --git a/src/partitionmodel.cpp b/src/partitionmodel.cpp index 7f222fa..e148e1e 100644 --- a/src/partitionmodel.cpp +++ b/src/partitionmodel.cpp @@ -267,7 +267,8 @@ QHash PartitionModel::roleNames() const { BytesAvailableRole, "bytesAvailable" }, { BytesTotalRole, "bytesTotal" }, { BytesFreeRole, "bytesFree" }, - { PartitionModelRole, "partitionModel" } + { PartitionModelRole, "partitionModel" }, + { IsCryptoDeviceRoles, "isCryptoDevice"}, }; return roleNames; @@ -314,6 +315,8 @@ QVariant PartitionModel::data(const QModelIndex &index, int role) const return partition.bytesFree(); case PartitionModelRole: return QVariant::fromValue(static_cast(const_cast((this)))); + case IsCryptoDeviceRoles: + return partition.isCryptoDevice(); default: return QVariant(); } diff --git a/src/partitionmodel.h b/src/partitionmodel.h index fee3723..c1d006a 100644 --- a/src/partitionmodel.h +++ b/src/partitionmodel.h @@ -61,7 +61,8 @@ class SYSTEMSETTINGS_EXPORT PartitionModel : public QAbstractListModel BytesAvailableRole, BytesTotalRole, BytesFreeRole, - PartitionModelRole + PartitionModelRole, + IsCryptoDeviceRoles, }; // For Status role diff --git a/src/udisks2monitor.cpp b/src/udisks2monitor.cpp index fd3917c..9799a2a 100644 --- a/src/udisks2monitor.cpp +++ b/src/udisks2monitor.cpp @@ -291,6 +291,7 @@ void UDisks2::Monitor::setPartitionProperties(QExplicitlySharedDataPointercanMount = blockDevice->isMountable() && m_manager->supportedFileSystems().contains(partition->filesystemType); partition->status = blockDevice->isEncrypted() ? Partition::Locked : blockDevice->mountPath().isEmpty() ? Partition::Unmounted : Partition::Mounted; + partition->isCryptoDevice = blockDevice->isEncrypted() || blockDevice->hasCryptoBackingDevice(); } void UDisks2::Monitor::updatePartitionProperties(const UDisks2::Block *blockDevice)