From 07200a5475b2c7634d1c7b3d28d6cdbdca653bd7 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sat, 21 Nov 2020 16:35:47 +0800 Subject: tdehw lib: reworked code for eject operation to support return type TQStringVariantMap. Signed-off-by: Michele Calgaro --- tdecore/tdehw/tdestoragedevice.cpp | 55 +++++++++++++++++++++++++++++--------- tdecore/tdehw/tdestoragedevice.h | 48 ++++++++++++++++----------------- 2 files changed, 66 insertions(+), 37 deletions(-) diff --git a/tdecore/tdehw/tdestoragedevice.cpp b/tdecore/tdehw/tdestoragedevice.cpp index ba88d6de1..60ea51912 100644 --- a/tdecore/tdehw/tdestoragedevice.cpp +++ b/tdecore/tdehw/tdestoragedevice.cpp @@ -327,28 +327,47 @@ bool TDEStorageDevice::lockDriveMedia(bool lock) { } } -bool TDEStorageDevice::ejectDrive() { +TQStringVariantMap TDEStorageDevice::ejectDrive() { + TQStringVariantMap result; + TQStringVariantMap ejectResult; + #ifdef WITH_UDISKS2 if (!(TDEGlobal::dirs()->findExe("udisksctl").isEmpty())) { - TQStringVariantMap ejectResult = udisks2EjectDrive(this); + ejectResult = udisks2EjectDrive(this); if (ejectResult["result"].toBool()) { - return true; + // Update internal mount data + TDEGlobal::hardwareDevices()->rescanDeviceInformation(this); + TDEGlobal::hardwareDevices()->processModifiedMounts(); + result["result"] = true; + return result; } else { - printf("[tdehwlib] Failed to eject drive '%s' via udisks2, falling back to alternate mechanism\n", deviceNode().ascii()); - fflush(stdout); + // Update internal mount data + TDEGlobal::hardwareDevices()->rescanDeviceInformation(this); + TDEGlobal::hardwareDevices()->processModifiedMounts(); + result["errStr"] = ejectResult["errStr"]; + result["result"] = false; + return result; } } #endif #ifdef WITH_UDISKS if (!(TDEGlobal::dirs()->findExe("udisks").isEmpty())) { - TQStringVariantMap ejectResult = udisksEjectDrive(this); + ejectResult = udisksEjectDrive(this); if (ejectResult["result"].toBool()) { - return true; + // Update internal mount data + TDEGlobal::hardwareDevices()->rescanDeviceInformation(this); + TDEGlobal::hardwareDevices()->processModifiedMounts(); + result["result"] = true; + return result; } else { - printf("[tdehwlib] Failed to eject drive '%s' via udisks, falling back to alternate mechanism\n", deviceNode().ascii()); - fflush(stdout); + // Update internal mount data + TDEGlobal::hardwareDevices()->rescanDeviceInformation(this); + TDEGlobal::hardwareDevices()->processModifiedMounts(); + result["errStr"] = ejectResult["errStr"]; + result["result"] = false; + return result; } } #endif @@ -363,14 +382,24 @@ bool TDEStorageDevice::ejectDrive() { eject_output = ts.read(); int retcode = pclose(exepipe); if (retcode == 0) { - return true; + // Update internal mount data + TDEGlobal::hardwareDevices()->rescanDeviceInformation(this); + TDEGlobal::hardwareDevices()->processModifiedMounts(); + result["result"] = true; + return result; + } + else { + result["errStr"] = eject_output; + result["retCode"] = retcode; } } - printf("[tdehwlib] Failed to eject drive '%s' via 'eject' command\n", deviceNode().ascii()); - fflush(stdout); } - return false; + // Update internal mount data + TDEGlobal::hardwareDevices()->rescanDeviceInformation(this); + TDEGlobal::hardwareDevices()->processModifiedMounts(); + result["result"] = false; + return result; } bool TDEStorageDevice::ejectDriveMedia() { diff --git a/tdecore/tdehw/tdestoragedevice.h b/tdecore/tdehw/tdestoragedevice.h index 47ea4debc..61ef6daad 100644 --- a/tdecore/tdehw/tdestoragedevice.h +++ b/tdecore/tdehw/tdestoragedevice.h @@ -99,17 +99,17 @@ inline TDEDiskDeviceType operator~(TDEDiskDeviceType a) namespace TDEDiskDeviceStatus { enum TDEDiskDeviceStatus { - Null = 0x00000000, - Mountable = 0x00000001, - Removable = 0x00000002, - Inserted = 0x00000004, - Blank = 0x00000008, - UsedByDevice = 0x00000010, - UsesDevice = 0x00000020, - ContainsFilesystem = 0x00000040, - Hotpluggable = 0x00000080, - Hidden = 0x00000100, - Other = 0x80000000 + Null = 0x00000000, + Mountable = 0x00000001, + Removable = 0x00000002, + Inserted = 0x00000004, + Blank = 0x00000008, + UsedByDevice = 0x00000010, + UsesDevice = 0x00000020, + ContainsFilesystem = 0x00000040, + Hotpluggable = 0x00000080, + Hidden = 0x00000100, + Other = 0x80000000 }; inline TDEDiskDeviceStatus operator|(TDEDiskDeviceStatus a, TDEDiskDeviceStatus b) @@ -130,11 +130,11 @@ inline TDEDiskDeviceStatus operator~(TDEDiskDeviceStatus a) namespace TDELUKSKeySlotStatus { enum TDELUKSKeySlotStatus { - Invalid = 0x00000000, - Inactive = 0x00000001, - Active = 0x00000002, - Last = 0x00000004, - Other = 0x80000000 + Invalid = 0x00000000, + Inactive = 0x00000001, + Active = 0x00000002, + Last = 0x00000004, + Other = 0x80000000 }; inline TDELUKSKeySlotStatus operator|(TDELUKSKeySlotStatus a, TDELUKSKeySlotStatus b) @@ -157,13 +157,13 @@ typedef TQValueList TDELUKSKeySlotSt namespace TDELUKSResult { enum TDELUKSResult { - Invalid = 0x00000000, - Success = 0x00000001, - LUKSNotSupported = 0x00000002, - LUKSNotFound = 0x00000003, - InvalidKeyslot = 0x00000004, - KeyslotOpFailed = 0x00000005, - Other = 0x80000000 + Invalid = 0x00000000, + Success = 0x00000001, + LUKSNotSupported = 0x00000002, + LUKSNotFound = 0x00000003, + InvalidKeyslot = 0x00000004, + KeyslotOpFailed = 0x00000005, + Other = 0x80000000 }; }; @@ -347,7 +347,7 @@ class TDECORE_EXPORT TDEStorageDevice : public TDEGenericDevice * * This method currently works on all removable storage devices */ - bool ejectDrive(); + TQStringVariantMap ejectDrive(); /** * @param path Full path to arbitrary file or directory -- cgit v1.2.1