7#include "fstabdevice.h"
8#include "fstab_debug.h"
9#include "fstabhandling.h"
10#include "fstabnetworkshare.h"
11#include "fstabservice.h"
12#include <QCoreApplication>
16using namespace Solid::Backends::Fstab;
18FstabDevice::FstabDevice(
QString uid)
22 m_device = m_uid.mid(parentUdi().length() + 1);
24 const QString &fstype = FstabHandling::fstype(m_device);
25 qCDebug(FSTAB_LOG) <<
"Adding " << m_device <<
"type:" << fstype;
28 m_vendor = m_device.mid(2, m_device.indexOf(
QLatin1String(
"/"), 2) - 2);
29 m_product = m_device.mid(m_device.indexOf(
QLatin1String(
"/"), 2) + 1);
30 m_storageType = StorageType::NetworkShare;
32 m_vendor = m_device.left(m_device.indexOf(
QLatin1String(
":/")));
33 m_product = m_device.mid(m_device.indexOf(
QLatin1String(
":/")) + 1);
34 m_storageType = StorageType::NetworkShare;
37 m_product = m_device.
mid(m_device.indexOf(fstype) + fstype.
length());
39 if (m_product.startsWith(home)) {
40 m_product = QStringLiteral(
"~") + m_product.mid(
home.length());
43 m_storageType = StorageType::Encrypted;
47 const QStringList &gvfsOptions = FstabHandling::options(m_device);
48 for (
const QString &option : gvfsOptions) {
49 if (
const auto tag =
QLatin1String(
"x-gvfs-name="); option.startsWith(tag)) {
52 }
else if (
const auto tag =
QLatin1String(
"x-gvfs-icon="); option.startsWith(tag)) {
58 if (m_storageType == StorageType::NetworkShare) {
64 if (m_displayName.isEmpty()) {
65 const QStringList currentMountPoints = FstabHandling::currentMountPoints(m_device);
66 if (currentMountPoints.
isEmpty()) {
67 const QStringList mountPoints = FstabHandling::mountPoints(m_device);
68 m_displayName = mountPoints.
isEmpty() ? m_description : mountPoints.
first();
70 m_displayName = currentMountPoints.
first();
74 if (m_iconName.isEmpty()) {
75 if (m_storageType == StorageType::NetworkShare) {
76 m_iconName = QStringLiteral(
"network-server");
77 }
else if (m_storageType == StorageType::Encrypted) {
78 m_iconName = QStringLiteral(
"folder-decrypted");
80 const QStringList &mountPoints = FstabHandling::mountPoints(m_device);
83 m_iconName = QStringLiteral(
"drive-harddisk-root");
84 }
else if (mountPoints.
contains(home)) {
85 m_iconName = QStringLiteral(
"user-home");
87 m_iconName = QStringLiteral(
"folder");
93FstabDevice::~FstabDevice()
102QString FstabDevice::parentUdi()
const
107QString FstabDevice::vendor()
const
112QString FstabDevice::product()
const
117QString FstabDevice::icon()
const
124 if (!m_storageAccess) {
125 FstabDevice *d =
const_cast<FstabDevice *
>(
this);
126 d->m_storageAccess =
new FstabStorageAccess(d);
128 if (m_storageAccess->isAccessible()) {
129 return {QStringLiteral(
"emblem-mounted")};
131 return {QStringLiteral(
"emblem-unmounted")};
135QString FstabDevice::displayName()
const
137 return m_displayName;
140QString FstabDevice::description()
const
142 return m_description;
145bool FstabDevice::isEncrypted()
const
147 return m_storageType == FstabDevice::StorageType::Encrypted;
152 if (interfaceType == Solid::DeviceInterface::StorageAccess) {
155 if ((m_storageType == StorageType::NetworkShare) && (interfaceType == Solid::DeviceInterface::NetworkShare)) {
163 if (interfaceType == Solid::DeviceInterface::StorageAccess) {
164 if (!m_storageAccess) {
165 m_storageAccess =
new FstabStorageAccess(
this);
167 return m_storageAccess;
168 }
else if ((m_storageType == StorageType::NetworkShare) && (interfaceType == Solid::DeviceInterface::NetworkShare)) {
169 return new FstabNetworkShare(
this);
174QString FstabDevice::device()
const
179void FstabDevice::onMtabChanged(
const QString &device)
181 if (m_device == device) {
182 Q_EMIT mtabChanged(device);
186#include "moc_fstabdevice.cpp"
Type
This enum type defines the type of device interface that a Device can have.
This class allows applications to deal with devices available in the underlying system.
QAction * home(const QObject *recvr, const char *slot, QObject *parent)
The single responsibility of this class is to create arguments valid for logind Inhibit call.
QString translate(const char *context, const char *sourceText, const char *disambiguation, int n)
bool isEmpty() const const
QString arg(Args &&... args) const const
QString fromLatin1(QByteArrayView str)
qsizetype length() const const
QString mid(qsizetype position, qsizetype n) const const
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
bool contains(QLatin1StringView str, Qt::CaseSensitivity cs) const const
QStringView mid(qsizetype start, qsizetype length) const const
QByteArray toLatin1() const const
QString fromPercentEncoding(const QByteArray &input)