tdehw lib: reworked code for eject operation to support return type TQStringVariantMap.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
pull/113/head
Michele Calgaro 5 years ago
parent b44ff1c0a9
commit 07200a5475
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -327,28 +327,47 @@ bool TDEStorageDevice::lockDriveMedia(bool lock) {
} }
} }
bool TDEStorageDevice::ejectDrive() { TQStringVariantMap TDEStorageDevice::ejectDrive() {
TQStringVariantMap result;
TQStringVariantMap ejectResult;
#ifdef WITH_UDISKS2 #ifdef WITH_UDISKS2
if (!(TDEGlobal::dirs()->findExe("udisksctl").isEmpty())) { if (!(TDEGlobal::dirs()->findExe("udisksctl").isEmpty())) {
TQStringVariantMap ejectResult = udisks2EjectDrive(this); ejectResult = udisks2EjectDrive(this);
if (ejectResult["result"].toBool()) { if (ejectResult["result"].toBool()) {
return true; // Update internal mount data
TDEGlobal::hardwareDevices()->rescanDeviceInformation(this);
TDEGlobal::hardwareDevices()->processModifiedMounts();
result["result"] = true;
return result;
} }
else { else {
printf("[tdehwlib] Failed to eject drive '%s' via udisks2, falling back to alternate mechanism\n", deviceNode().ascii()); // Update internal mount data
fflush(stdout); TDEGlobal::hardwareDevices()->rescanDeviceInformation(this);
TDEGlobal::hardwareDevices()->processModifiedMounts();
result["errStr"] = ejectResult["errStr"];
result["result"] = false;
return result;
} }
} }
#endif #endif
#ifdef WITH_UDISKS #ifdef WITH_UDISKS
if (!(TDEGlobal::dirs()->findExe("udisks").isEmpty())) { if (!(TDEGlobal::dirs()->findExe("udisks").isEmpty())) {
TQStringVariantMap ejectResult = udisksEjectDrive(this); ejectResult = udisksEjectDrive(this);
if (ejectResult["result"].toBool()) { if (ejectResult["result"].toBool()) {
return true; // Update internal mount data
TDEGlobal::hardwareDevices()->rescanDeviceInformation(this);
TDEGlobal::hardwareDevices()->processModifiedMounts();
result["result"] = true;
return result;
} }
else { else {
printf("[tdehwlib] Failed to eject drive '%s' via udisks, falling back to alternate mechanism\n", deviceNode().ascii()); // Update internal mount data
fflush(stdout); TDEGlobal::hardwareDevices()->rescanDeviceInformation(this);
TDEGlobal::hardwareDevices()->processModifiedMounts();
result["errStr"] = ejectResult["errStr"];
result["result"] = false;
return result;
} }
} }
#endif #endif
@ -363,14 +382,24 @@ bool TDEStorageDevice::ejectDrive() {
eject_output = ts.read(); eject_output = ts.read();
int retcode = pclose(exepipe); int retcode = pclose(exepipe);
if (retcode == 0) { 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() { bool TDEStorageDevice::ejectDriveMedia() {

@ -347,7 +347,7 @@ class TDECORE_EXPORT TDEStorageDevice : public TDEGenericDevice
* *
* This method currently works on all removable storage devices * This method currently works on all removable storage devices
*/ */
bool ejectDrive(); TQStringVariantMap ejectDrive();
/** /**
* @param path Full path to arbitrary file or directory * @param path Full path to arbitrary file or directory

Loading…
Cancel
Save