mirror of
https://github.com/cmclark00/retro-imager.git
synced 2025-05-18 16:05:21 +01:00
Linux/udisks2/multi-file zip extraction: handle auto-mount better
If mounting partition after FAT32 format fails, check if race occurs in which the Linux distribution was faster in auto-mounting the partition then we were in manually mounting it.
This commit is contained in:
parent
506330f486
commit
0f3a6a2786
2 changed files with 46 additions and 0 deletions
|
@ -160,6 +160,16 @@ bool UDisks2Api::formatDrive(const QString &device, bool mountAfterwards)
|
||||||
qDebug() << "Mounted new file system at:" << mp;
|
qDebug() << "Mounted new file system at:" << mp;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Check if already auto-mounted */
|
||||||
|
auto mps = mountPoints(filesystem);
|
||||||
|
if (!mps.isEmpty())
|
||||||
|
{
|
||||||
|
qDebug() << "Was already auto-mounted at:" << mps;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QThread::sleep(1);
|
QThread::sleep(1);
|
||||||
}
|
}
|
||||||
|
@ -207,3 +217,36 @@ void UDisks2Api::unmountDrive(const QString &device)
|
||||||
|
|
||||||
_unmountDrive(devpath);
|
_unmountDrive(devpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QByteArrayList UDisks2Api::mountPoints(const QString &partitionDevice)
|
||||||
|
{
|
||||||
|
QString devpath = _resolveDevice(partitionDevice);
|
||||||
|
if (devpath.isEmpty())
|
||||||
|
return QByteArrayList();
|
||||||
|
|
||||||
|
QDBusInterface filesystem("org.freedesktop.UDisks2", devpath,
|
||||||
|
"org.freedesktop.UDisks2.Filesystem", QDBusConnection::systemBus());
|
||||||
|
return mountPoints(filesystem);
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArrayList UDisks2Api::mountPoints(const QDBusInterface &filesystem)
|
||||||
|
{
|
||||||
|
QByteArrayList mps;
|
||||||
|
|
||||||
|
QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.UDisks2", filesystem.path(),
|
||||||
|
"org.freedesktop.DBus.Properties", "Get");
|
||||||
|
QVariantList args = {"org.freedesktop.UDisks2.Filesystem", "MountPoints"};
|
||||||
|
msg.setArguments(args);
|
||||||
|
QDBusMessage reply = QDBusConnection::systemBus().call(msg);
|
||||||
|
for (auto arg : reply.arguments())
|
||||||
|
{
|
||||||
|
arg.value<QDBusVariant>().variant().value<QDBusArgument>() >> mps;
|
||||||
|
}
|
||||||
|
for (auto &str : mps)
|
||||||
|
{
|
||||||
|
if (!str.isEmpty() && str.back() == '\0')
|
||||||
|
str.chop(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mps;
|
||||||
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QDBusInterface>
|
||||||
|
|
||||||
class UDisks2Api : public QObject
|
class UDisks2Api : public QObject
|
||||||
{
|
{
|
||||||
|
@ -18,6 +19,8 @@ public:
|
||||||
bool formatDrive(const QString &device, bool mountAfterwards = true);
|
bool formatDrive(const QString &device, bool mountAfterwards = true);
|
||||||
QString mountDevice(const QString &device);
|
QString mountDevice(const QString &device);
|
||||||
void unmountDrive(const QString &device);
|
void unmountDrive(const QString &device);
|
||||||
|
QByteArrayList mountPoints(const QString &partitionDevice);
|
||||||
|
QByteArrayList mountPoints(const QDBusInterface &filesystem);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QString _resolveDevice(const QString &device);
|
QString _resolveDevice(const QString &device);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue