solid: unmount optical drives conditionally

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-09-07 21:40:51 +03:00
parent b77a8b70fd
commit 49637b249d

View file

@ -19,6 +19,7 @@
*/ */
#include "udevopticaldrive.h" #include "udevopticaldrive.h"
#include "kmountpoint.h"
#include <QDBusInterface> #include <QDBusInterface>
#include <QDBusReply> #include <QDBusReply>
@ -64,8 +65,13 @@ OpticalDrive::~OpticalDrive()
bool OpticalDrive::eject() bool OpticalDrive::eject()
{ {
// cdio fails to unmount unless current user is root // cdio fails to unmount unless current user is root
const KMountPoint::List mountpoints = KMountPoint::currentMountPoints();
const QString devname(m_device->deviceProperty("DEVNAME"));
const KMountPoint::Ptr mp = mountpoints.findByDevice(devname);
if (mp && !mp->mountPoint().isEmpty()) {
QDBusInterface soliduiserver("org.kde.kded", "/modules/soliduiserver", "org.kde.SolidUiServer"); QDBusInterface soliduiserver("org.kde.kded", "/modules/soliduiserver", "org.kde.SolidUiServer");
soliduiserver.call("unmountUdi", m_device->udi()); soliduiserver.call("unmountUdi", m_device->udi());
}
emit ejectRequested(m_device->udi()); emit ejectRequested(m_device->udi());