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;
|
||||
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);
|
||||
}
|
||||
|
@ -207,3 +217,36 @@ void UDisks2Api::unmountDrive(const QString &device)
|
|||
|
||||
_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 <QFile>
|
||||
#include <QDBusInterface>
|
||||
|
||||
class UDisks2Api : public QObject
|
||||
{
|
||||
|
@ -18,6 +19,8 @@ public:
|
|||
bool formatDrive(const QString &device, bool mountAfterwards = true);
|
||||
QString mountDevice(const QString &device);
|
||||
void unmountDrive(const QString &device);
|
||||
QByteArrayList mountPoints(const QString &partitionDevice);
|
||||
QByteArrayList mountPoints(const QDBusInterface &filesystem);
|
||||
|
||||
protected:
|
||||
QString _resolveDevice(const QString &device);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue