summaryrefslogtreecommitdiffstats
path: root/tdecore/tdehw/disksHelper.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <[email protected]>2019-07-07 22:21:21 +0900
committerMichele Calgaro <[email protected]>2019-07-07 22:40:46 +0900
commit7214a7b6b590d62aac622dbf2de31b1ca1ba78d5 (patch)
treee63d5e40e1a2d4d4a8efb0990ebff10dcf163617 /tdecore/tdehw/disksHelper.cpp
parentc76553c4fb3ee8f839c17b4dc3c3beb3c4338eb3 (diff)
downloadtdelibs-7214a7b6b590d62aac622dbf2de31b1ca1ba78d5.tar.gz
tdelibs-7214a7b6b590d62aac622dbf2de31b1ca1ba78d5.zip
tdehw: code restructuring for tdestoragedevice.
1. added disk helper source files 2. removed WITH_UDISKS2, WITH_UDISK, WITH_UDEVIL defines. The respective code is always included 3. order of execution for mount/umount activities: udisks2, udisk, udevil, pmount. Signed-off-by: Michele Calgaro <[email protected]>
Diffstat (limited to 'tdecore/tdehw/disksHelper.cpp')
-rw-r--r--tdecore/tdehw/disksHelper.cpp301
1 files changed, 301 insertions, 0 deletions
diff --git a/tdecore/tdehw/disksHelper.cpp b/tdecore/tdehw/disksHelper.cpp
new file mode 100644
index 000000000..e8e164b56
--- /dev/null
+++ b/tdecore/tdehw/disksHelper.cpp
@@ -0,0 +1,301 @@
+/* This file is part of the TDE libraries
+ Copyright (C) 2012 Timothy Pearson <[email protected]>
+ (C) 2013 Golubev Alexander <[email protected]>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "disksHelper.h"
+#include "tdestoragedevice.h"
+
+#include <tqdbusdata.h>
+#include <tqdbusmessage.h>
+#include <tqdbusproxy.h>
+#include <tqdbusvariant.h>
+#include <tqdbusconnection.h>
+#include <tqdbuserror.h>
+#include <tqdbusdatamap.h>
+#include <tqdbusobjectpath.h>
+#include "tqdbusdatalist.h"
+
+//-------------------------------
+// UDisks
+//-------------------------------
+bool ejectDriveUDisks(TDEStorageDevice* sdevice) {
+ TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
+ if (dbusConn.isConnected()) {
+ TQString blockDeviceString = sdevice->deviceNode();
+ blockDeviceString.replace("/dev/", "");
+ blockDeviceString.replace("-", "_2d");
+ blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString;
+
+ // Eject the drive!
+ TQT_DBusError error;
+ TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn);
+ if (driveControl.canSend()) {
+ TQValueList<TQT_DBusData> params;
+ TQT_DBusDataList options;
+ params << TQT_DBusData::fromList(options);
+ TQT_DBusMessage reply = driveControl.sendWithReply("DriveEject", params, &error);
+ if (error.isValid()) {
+ // Error!
+ printf("[ERROR][tdehwlib] ejectDriveUDisks: %s\n", error.name().ascii()); fflush(stdout);
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+int mountDriveUDisks(TQString deviceNode, TQString fileSystemType, TQStringList mountOptions, TQString* errStr) {
+ TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
+ if (dbusConn.isConnected()) {
+ TQString blockDeviceString = deviceNode;
+ blockDeviceString.replace("/dev/", "");
+ blockDeviceString.replace("-", "_2d");
+ blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString;
+
+ // Mount the drive!
+ TQT_DBusError error;
+ TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn);
+ if (driveControl.canSend()) {
+ TQValueList<TQT_DBusData> params;
+ params << TQT_DBusData::fromString(fileSystemType);
+ params << TQT_DBusData::fromList(TQT_DBusDataList(mountOptions));
+ TQT_DBusMessage reply = driveControl.sendWithReply("FilesystemMount", params, &error);
+ if (error.isValid()) {
+ // Error!
+ if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") {
+ // Service not installed or unavailable
+ return -2;
+ }
+ if (errStr) {
+ *errStr = error.name() + ": " + error.message();
+ }
+ else {
+ printf("[ERROR][tdehwlib] mountDriveUDisks: %s\n", error.name().ascii()); fflush(stdout);
+ }
+ return -1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return -2;
+ }
+ }
+ return -2;
+}
+
+int unMountDriveUDisks(TQString deviceNode, TQStringList unMountOptions, TQString* errStr) {
+ TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
+ if (dbusConn.isConnected()) {
+ TQString blockDeviceString = deviceNode;
+ blockDeviceString.replace("/dev/", "");
+ blockDeviceString.replace("-", "_2d");
+ blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString;
+
+ // Mount the drive!
+ TQT_DBusError error;
+ TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn);
+ if (driveControl.canSend()) {
+ TQValueList<TQT_DBusData> params;
+ params << TQT_DBusData::fromList(TQT_DBusDataList(unMountOptions));
+ TQT_DBusMessage reply = driveControl.sendWithReply("FilesystemUnmount", params, &error);
+ if (error.isValid()) {
+ // Error!
+ if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") {
+ // Service not installed or unavailable
+ return -2;
+ }
+ if (errStr) {
+ *errStr = error.name() + ": " + error.message();
+ }
+ else {
+ printf("[ERROR][tdehwlib] unMountDriveUDisks: %s\n", error.name().ascii()); fflush(stdout);
+ }
+ return -1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return -2;
+ }
+ }
+ return -2;
+}
+
+//-------------------------------
+// UDisks2
+//-------------------------------
+bool ejectDriveUDisks2(TDEStorageDevice* sdevice) {
+ TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
+ if (dbusConn.isConnected()) {
+ TQString blockDeviceString = sdevice->deviceNode();
+ blockDeviceString.replace("/dev/", "");
+ blockDeviceString.replace("-", "_2d");
+ blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString;
+ TQT_DBusProxy hardwareControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.DBus.Properties", dbusConn);
+ if (hardwareControl.canSend()) {
+ // get associated udisks2 drive path
+ TQT_DBusError error;
+ TQValueList<TQT_DBusData> params;
+ params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Block") << TQT_DBusData::fromString("Drive");
+ TQT_DBusMessage reply = hardwareControl.sendWithReply("Get", params, &error);
+ if (error.isValid()) {
+ // Error!
+ printf("[ERROR][tdehwlib] ejectDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout);
+ return false;
+ }
+ else {
+ if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
+ TQT_DBusObjectPath driveObjectPath = reply[0].toVariant().value.toObjectPath();
+ if (!driveObjectPath.isValid()) {
+ return false;
+ }
+
+ error = TQT_DBusError();
+ TQT_DBusProxy driveInformation("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.DBus.Properties", dbusConn);
+ // can eject?
+ TQValueList<TQT_DBusData> params;
+ params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Drive") << TQT_DBusData::fromString("Ejectable");
+ TQT_DBusMessage reply = driveInformation.sendWithReply("Get", params, &error);
+ if (error.isValid()) {
+ // Error!
+ printf("[ERROR][tdehwlib] ejectDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout);
+ return false;
+ }
+ if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
+ bool ejectable = reply[0].toVariant().value.toBool();
+ if (!ejectable) {
+ return false;
+ }
+
+ // Eject the drive!
+ TQT_DBusProxy driveControl("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.UDisks2.Drive", dbusConn);
+ TQValueList<TQT_DBusData> params;
+ TQT_DBusDataMap<TQString> options(TQT_DBusData::Variant);
+ params << TQT_DBusData::fromStringKeyMap(options);
+ TQT_DBusMessage reply = driveControl.sendWithReply("Eject", params, &error);
+ if (error.isValid()) {
+ // Error!
+ printf("[ERROR][tdehwlib] ejectDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout);
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+}
+
+int mountDriveUDisks2(TQString deviceNode, TQString fileSystemType, TQString mountOptions, TQString* errStr) {
+ TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
+ if (dbusConn.isConnected()) {
+ TQString blockDeviceString = deviceNode;
+ blockDeviceString.replace("/dev/", "");
+ blockDeviceString.replace("-", "_2d");
+ blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString;
+
+ // Mount the drive!
+ TQT_DBusError error;
+ TQT_DBusProxy driveControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.UDisks2.Filesystem", dbusConn);
+ if (driveControl.canSend()) {
+ TQValueList<TQT_DBusData> params;
+ TQMap<TQString, TQT_DBusData> optionsMap;
+ if (fileSystemType != "") {
+ optionsMap["fstype"] = (TQT_DBusData::fromString(fileSystemType)).getAsVariantData();
+ }
+ optionsMap["options"] = (TQT_DBusData::fromString(mountOptions)).getAsVariantData();
+ params << TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(optionsMap));
+ TQT_DBusMessage reply = driveControl.sendWithReply("Mount", params, &error);
+ if (error.isValid()) {
+ // Error!
+ if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") {
+ // Service not installed or unavailable
+ return -2;
+ }
+ if (errStr) {
+ *errStr = error.name() + ": " + error.message();
+ }
+ else {
+ printf("[ERROR][tdehwlib] mountDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout);
+ }
+ return -1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return -2;
+ }
+ }
+ return -2;
+}
+
+int unMountDriveUDisks2(TQString deviceNode, TQString unMountOptions, TQString* errStr) {
+ TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
+ if (dbusConn.isConnected()) {
+ TQString blockDeviceString = deviceNode;
+ blockDeviceString.replace("/dev/", "");
+ blockDeviceString.replace("-", "_2d");
+ blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString;
+
+ // Mount the drive!
+ TQT_DBusError error;
+ TQT_DBusProxy driveControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.UDisks2.Filesystem", dbusConn);
+ if (driveControl.canSend()) {
+ TQValueList<TQT_DBusData> params;
+ TQMap<TQString, TQT_DBusData> optionsMap;
+ optionsMap["options"] = (TQT_DBusData::fromString(unMountOptions)).getAsVariantData();
+ params << TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(optionsMap));
+ TQT_DBusMessage reply = driveControl.sendWithReply("Unmount", params, &error);
+ if (error.isValid()) {
+ // Error!
+ if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") {
+ // Service not installed or unavailable
+ return -2;
+ }
+ if (errStr) {
+ *errStr = error.name() + ": " + error.message();
+ }
+ else {
+ printf("[ERROR][tdehwlib] unMountDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout);
+ }
+ return -1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return -2;
+ }
+ }
+ return -2;
+}
+
+