Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[nemo-storage] Expose drive map from the partition model. Contributes…
… to JB#42943

This can be used e.g. when showing unsupported partitions.
  • Loading branch information
rainemak committed Nov 28, 2018
1 parent bc99cc0 commit 5f315b1
Show file tree
Hide file tree
Showing 9 changed files with 41 additions and 17 deletions.
4 changes: 2 additions & 2 deletions src/partition.cpp
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/partition.h
Expand Up @@ -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;
Expand Down
5 changes: 3 additions & 2 deletions src/partition_p.h
Expand Up @@ -34,6 +34,8 @@

#include "partition.h"

#include <QVariantMap>

class PartitionManagerPrivate;

class PartitionPrivate : public QSharedData
Expand All @@ -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)
Expand Down Expand Up @@ -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;
Expand Down
12 changes: 9 additions & 3 deletions src/partitionmanager.cpp
Expand Up @@ -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<PartitionPrivate> root(new PartitionPrivate(this));
root->storageType = Partition::System;
root->connectionBus = Partition::SDIO;
root->mountPath = QStringLiteral("/");
root->drive = defaultDrive;

m_partitions.append(root);

QExplicitlySharedDataPointer<PartitionPrivate> 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);
Expand Down Expand Up @@ -153,7 +158,8 @@ void PartitionManagerPrivate::add(QExplicitlySharedDataPointer<PartitionPrivate>
{
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;
Expand Down
6 changes: 3 additions & 3 deletions src/partitionmodel.cpp
Expand Up @@ -261,7 +261,7 @@ QHash<int, QByteArray> PartitionModel::roleNames() const
{ IsSupportedFileSystemType, "isSupportedFileSystemType"},
{ IsEncryptedRoles, "isEncrypted"},
{ CryptoBackingDevicePath, "cryptoBackingDevicePath"},
{ ConnectionBusRole, "connectionBus"},
{ DriveRole, "drive"},
};

return roleNames;
Expand Down Expand Up @@ -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();
}
Expand Down
2 changes: 1 addition & 1 deletion src/partitionmodel.h
Expand Up @@ -66,7 +66,7 @@ class SYSTEMSETTINGS_EXPORT PartitionModel : public QAbstractListModel
IsSupportedFileSystemType,
IsEncryptedRoles,
CryptoBackingDevicePath,
ConnectionBusRole,
DriveRole,
};

// For Status role
Expand Down
10 changes: 10 additions & 0 deletions src/udisks2block.cpp
Expand Up @@ -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();
Expand Down
4 changes: 3 additions & 1 deletion src/udisks2block_p.h
Expand Up @@ -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;

Expand Down
13 changes: 9 additions & 4 deletions src/udisks2monitor.cpp
Expand Up @@ -331,16 +331,21 @@ void UDisks2::Monitor::setPartitionProperties(QExplicitlySharedDataPointer<Parti
partition->isEncrypted = 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)
Expand Down

0 comments on commit 5f315b1

Please sign in to comment.