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:
Floris Bos 2021-11-20 13:08:52 +01:00
parent 506330f486
commit 0f3a6a2786
2 changed files with 46 additions and 0 deletions

View file

@ -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;
}