update the udisks2 backend patch, fixing some bugs with storage drives

This commit is contained in:
Lukas Tinkl 2012-05-24 10:53:26 +02:00
parent f3b60d6c33
commit 76ac32d95f
2 changed files with 242 additions and 238 deletions

View File

@ -1,118 +1,3 @@
diff --git a/tier1/solid/src/solid/CMakeLists.txt b/tier1/solid/src/solid/CMakeLists.txt
index 5deadcf..40af6bc 100644
--- a/tier1/solid/src/solid/CMakeLists.txt
+++ b/tier1/solid/src/solid/CMakeLists.txt
@@ -32,7 +32,6 @@ configure_file(config-processor.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-proce
file(MAKE_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
- ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
${CMAKE_CURRENT_BINARY_DIR}/backends/udev
${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
)
@@ -198,33 +197,6 @@ if(NOT WIN32 AND NOT APPLE)
endif( UDEV_FOUND )
- message(STATUS "Building Solid HAL backend." )
- set(solid_LIB_SRCS ${solid_LIB_SRCS}
- backends/hal/halacadapter.cpp
- backends/hal/halaudiointerface.cpp
- backends/hal/halbattery.cpp
- backends/hal/halblock.cpp
- backends/hal/halbutton.cpp
- backends/hal/halcamera.cpp
- backends/hal/halcdrom.cpp
- backends/hal/haldeviceinterface.cpp
- backends/hal/haldvbinterface.cpp
- backends/hal/halfstabhandling.cpp
- backends/hal/halgenericinterface.cpp
- backends/hal/haldevice.cpp
- backends/hal/halmanager.cpp
- backends/hal/halnetworkinterface.cpp
- backends/hal/halserialinterface.cpp
- backends/hal/halopticaldisc.cpp
- backends/hal/halportablemediaplayer.cpp
- backends/hal/halprocessor.cpp
- backends/hal/halstorageaccess.cpp
- backends/hal/halstorage.cpp
- backends/hal/halvideo.cpp
- backends/hal/halvolume.cpp
- backends/hal/halsmartcardreader.cpp
- )
-
message(STATUS "Building Solid UPower backend." )
set(solid_LIB_SRCS ${solid_LIB_SRCS}
backends/upower/upowermanager.cpp
@@ -237,18 +209,19 @@ if(NOT WIN32 AND NOT APPLE)
# FIXME: this should work on more Unix systems
if (CMAKE_SYSTEM_NAME MATCHES Linux)
- message(STATUS "Building Solid UDisks backend." )
+ message(STATUS "Building Solid UDisks2 backend." )
set(solid_LIB_SRCS ${solid_LIB_SRCS}
- backends/udisks/udisksmanager.cpp
- backends/udisks/udisksdevice.cpp
- backends/udisks/udisksblock.cpp
- backends/udisks/udisksstoragevolume.cpp
- backends/udisks/udisksdeviceinterface.cpp
- backends/udisks/udisksopticaldisc.cpp
- backends/udisks/udisksopticaldrive.cpp
- backends/udisks/udisksstoragedrive.cpp
- backends/udisks/udisksstorageaccess.cpp
- backends/udisks/udisksgenericinterface.cpp
+ backends/udisks2/udisksmanager.cpp
+ backends/udisks2/udisksdevice.cpp
+ backends/udisks2/udisksblock.cpp
+ backends/udisks2/udisksstoragevolume.cpp
+ backends/udisks2/udisksdeviceinterface.cpp
+ backends/udisks2/udisksopticaldisc.cpp
+ backends/udisks2/udisksopticaldrive.cpp
+ backends/udisks2/udisksstoragedrive.cpp
+ backends/udisks2/udisksstorageaccess.cpp
+ backends/udisks2/udisksgenericinterface.cpp
+ backends/udisks2/dbus/manager.cpp
)
endif (CMAKE_SYSTEM_NAME MATCHES Linux)
diff --git a/tier1/solid/src/solid/managerbase.cpp b/tier1/solid/src/solid/managerbase.cpp
index e228b48..7a7cc7d 100644
--- a/tier1/solid/src/solid/managerbase.cpp
+++ b/tier1/solid/src/solid/managerbase.cpp
@@ -30,8 +30,7 @@
#if defined (Q_OS_MAC)
#include "backends/iokit/iokitmanager.h"
#elif defined (Q_OS_UNIX)
-#include "backends/hal/halmanager.h"
-#include "backends/udisks/udisksmanager.h"
+#include "backends/udisks2/udisksmanager.h"
#include "backends/upower/upowermanager.h"
#if defined (HUPNP_FOUND)
@@ -71,22 +70,13 @@ void Solid::ManagerBasePrivate::loadBackends()
# elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
m_backends << new Solid::Backends::Wmi::WmiManager(0);
-# elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
- m_backends << new Solid::Backends::Hal::HalManager(0);
-
# elif defined(Q_OS_LINUX)
- bool solidHalLegacyEnabled
- = QString::fromLocal8Bit(qgetenv("SOLID_HAL_LEGACY")).toInt()==1;
- if (solidHalLegacyEnabled) {
- m_backends << new Solid::Backends::Hal::HalManager(0);
- } else {
# if defined(UDEV_FOUND)
m_backends << new Solid::Backends::UDev::UDevManager(0);
# endif
- m_backends << new Solid::Backends::UDisks::UDisksManager(0)
+ m_backends << new Solid::Backends::UDisks2::Manager(0)
<< new Solid::Backends::UPower::UPowerManager(0)
<< new Solid::Backends::Fstab::FstabManager(0);
- }
# endif
# if defined (HUPNP_FOUND)
diff --git a/tier1/solid/src/solid/backends/udisks2/dbus/manager.cpp b/tier1/solid/src/solid/backends/udisks2/dbus/manager.cpp
new file mode 100644
index 0000000..7ea4aa8
@ -322,10 +207,10 @@ index 0000000..25a1dc0
+#endif // SOLID_BACKENDS_UDISKS2_H
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksblock.cpp b/tier1/solid/src/solid/backends/udisks2/udisksblock.cpp
new file mode 100644
index 0000000..8a7a0b5
index 0000000..c27b1c4
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksblock.cpp
@@ -0,0 +1,52 @@
@@ -0,0 +1,84 @@
+/*
+ Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
+
@ -349,15 +234,47 @@ index 0000000..8a7a0b5
+#include <linux/kdev_t.h>
+
+#include <QFile>
+#include <QtDBus/QDBusConnection>
+#include <QtDBus/QDBusPendingReply>
+
+#include "udisksblock.h"
+#include "dbus/manager.h"
+
+using namespace Solid::Backends::UDisks2;
+
+Block::Block(Device *device)
+ : DeviceInterface(device)
+Block::Block(Device *dev)
+ : DeviceInterface(dev)
+{
+ m_devNum = m_device->prop("DeviceNumber").toULongLong();
+ m_devFile = QFile::decodeName(m_device->prop("Device").toByteArray());
+
+ // we have a drive (non-block device for udisks), so let's find the corresponding (real) block device
+ if (m_devNum == 0 || m_devFile.isEmpty()) {
+ org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, QDBusConnection::systemBus());
+ QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
+ reply.waitForFinished();
+ if (!reply.isError()) { // enum devices
+ Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
+ const QString udi = path.path();
+
+ if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
+ continue;
+
+ Device device(udi);
+ if (device.drivePath() == dev->udi()) {
+ m_devNum = device.prop("DeviceNumber").toULongLong();
+ m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
+ break;
+ }
+ }
+ }
+ else // show error
+ {
+ qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
+ }
+ }
+
+ qDebug() << "devnum:" << m_devNum << "dev file:" << m_devFile;
+}
+
+Block::~Block()
@ -366,7 +283,7 @@ index 0000000..8a7a0b5
+
+QString Block::device() const
+{
+ return QFile::decodeName(m_device->prop("Device").toByteArray());
+ return m_devFile;
+}
+
+int Block::deviceMinor() const
@ -380,10 +297,10 @@ index 0000000..8a7a0b5
+}
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksblock.h b/tier1/solid/src/solid/backends/udisks2/udisksblock.h
new file mode 100644
index 0000000..804d712
index 0000000..19cb70a
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksblock.h
@@ -0,0 +1,55 @@
@@ -0,0 +1,56 @@
+/*
+ Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
+
@ -424,7 +341,7 @@ index 0000000..804d712
+ Q_INTERFACES(Solid::Ifaces::Block)
+
+public:
+ Block(Device *device);
+ Block(Device *dev);
+ virtual ~Block();
+
+ virtual QString device() const;
@ -432,6 +349,7 @@ index 0000000..804d712
+ virtual int deviceMajor() const;
+private:
+ dev_t m_devNum;
+ QString m_devFile;
+};
+
+}
@ -441,10 +359,10 @@ index 0000000..804d712
+#endif // UDISKS2BLOCK_H
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdevice.cpp b/tier1/solid/src/solid/backends/udisks2/udisksdevice.cpp
new file mode 100644
index 0000000..628c0b0
index 0000000..fb74fa2
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksdevice.cpp
@@ -0,0 +1,906 @@
@@ -0,0 +1,910 @@
+/*
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
+ Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
@ -803,8 +721,7 @@ index 0000000..628c0b0
+ if (!volume_label.isEmpty())
+ return volume_label;
+
+ const QString drivePath = prop("Drive").value<QDBusObjectPath>().path();
+ UDisks2::Device storageDevice(drivePath);
+ UDisks2::Device storageDevice(drivePath());
+ const UDisks2::StorageDrive storageDrive(&storageDevice);
+ Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
+
@ -991,8 +908,7 @@ index 0000000..628c0b0
+ }
+ }
+ else if (isBlock()) {
+ const QString drivePath = prop("Drive").value<QDBusObjectPath>().path();
+ Device drive(drivePath);
+ Device drive(drivePath());
+
+ // handle media
+ const QString media = drive.prop("Media").toString();
@ -1143,7 +1059,7 @@ index 0000000..628c0b0
+ if (iface.startsWith("org.freedesktop.DBus"))
+ continue;
+ QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
+ call.setArguments(QList<QVariant>() << iface);
+ call << iface;
+ QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
+ reply.waitForFinished();
+
@ -1199,9 +1115,10 @@ index 0000000..628c0b0
+ QMapIterator<QString, QVariant> i(changedProps);
+ while (i.hasNext()) {
+ i.next();
+ m_cache.insert(i.key(), i.value()); // replace the value
+ changeMap.insert(i.key(), Solid::GenericInterface::PropertyModified);
+ qDebug() << "\t modified:" << i.key() << ":" << m_cache.value(i.key());
+ const QString key = i.key();
+ m_cache.insert(key, i.value()); // replace the value
+ changeMap.insert(key, Solid::GenericInterface::PropertyModified);
+ qDebug() << "\t modified:" << key << ":" << m_cache.value(key);
+ }
+
+ Q_EMIT propertyChanged(changeMap);
@ -1310,21 +1227,21 @@ index 0000000..628c0b0
+
+bool Device::isOpticalDisc() const
+{
+ QString drivePath = prop("Drive").value<QDBusObjectPath>().path();
+ if (drivePath.isEmpty() || drivePath == "/")
+ const QString drv = drivePath();
+ if (drv.isEmpty() || drv == "/")
+ return false;
+
+ Device drive(drivePath);
+ Device drive(drv);
+ return drive.prop("Optical").toBool();
+}
+
+bool Device::mightBeOpticalDisc() const
+{
+ QString drivePath = prop("Drive").value<QDBusObjectPath>().path();
+ if (drivePath.isEmpty() || drivePath == "/")
+ const QString drv = drivePath();
+ if (drv.isEmpty() || drv == "/")
+ return false;
+
+ Device drive(drivePath);
+ Device drive(drv);
+ return drive.isOpticalDrive();
+}
+
@ -1351,12 +1268,17 @@ index 0000000..628c0b0
+{
+ return hasInterface(UD2_DBUS_INTERFACE_SWAP);
+}
+
+QString Device::drivePath() const
+{
+ return prop("Drive").value<QDBusObjectPath>().path();
+}
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdevice.h b/tier1/solid/src/solid/backends/udisks2/udisksdevice.h
new file mode 100644
index 0000000..6f8056b
index 0000000..cf8e2f5
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksdevice.h
@@ -0,0 +1,110 @@
@@ -0,0 +1,112 @@
+/*
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
+ Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
@ -1439,6 +1361,8 @@ index 0000000..6f8056b
+ bool isEncryptedCleartext() const;
+ bool isSwap() const;
+
+ QString drivePath() const;
+
+Q_SIGNALS:
+ void changed();
+ void propertyChanged(const QMap<QString,int> &changes);
@ -1784,10 +1708,10 @@ index 0000000..d225f32
+#endif // SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksmanager.cpp b/tier1/solid/src/solid/backends/udisks2/udisksmanager.cpp
new file mode 100644
index 0000000..2e6f8c6
index 0000000..9af8ee2
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksmanager.cpp
@@ -0,0 +1,294 @@
@@ -0,0 +1,227 @@
+/*
+ Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
+
@ -1959,77 +1883,6 @@ index 0000000..2e6f8c6
+ return UD2_UDI_DISKS_PREFIX;
+}
+
+#if 0
+void Manager::slotDeviceAdded(const QDBusObjectPath &opath)
+{
+ const QString udi = opath.path();
+
+ if (!m_deviceCache.contains(udi)) {
+ m_deviceCache.append(udi);
+ }
+
+ Device device(udi);
+ if (device.queryDeviceInterface(Solid::DeviceInterface::StorageDrive)
+ && !device.prop("DeviceIsMediaAvailable").toBool()
+ && !m_dirtyDevices.contains(udi))
+ m_dirtyDevices.append(udi);
+
+ Q_EMIT deviceAdded(udi);
+ slotDeviceChanged(opath); // case: hotswap event (optical drive with media inside)
+}
+
+void Manager::slotDeviceRemoved(const QDBusObjectPath &opath)
+{
+ const QString udi = opath.path();
+
+ // case: hotswap event (optical drive with media inside)
+ if (m_knownDrivesWithMedia.contains(udi)) {
+ m_knownDrivesWithMedia.removeAll(udi);
+ m_deviceCache.removeAll(udi + ":media");
+ Q_EMIT deviceRemoved(udi + ":media");
+ }
+
+ if (m_dirtyDevices.contains(udi))
+ m_dirtyDevices.removeAll(udi);
+
+ Q_EMIT deviceRemoved(udi);
+ m_deviceCache.removeAll(udi);
+}
+
+void Manager::slotDeviceChanged(const QDBusObjectPath &opath)
+{
+ const QString udi = opath.path();
+ Device device(udi);
+
+ if (device.queryDeviceInterface(Solid::DeviceInterface::OpticalDrive))
+ {
+ if (!m_knownDrivesWithMedia.contains(udi) && device.prop("DeviceIsOpticalDisc").toBool())
+ {
+ m_knownDrivesWithMedia.append(udi);
+ if (!m_deviceCache.isEmpty()) {
+ m_deviceCache.append(udi + ":media");
+ }
+ Q_EMIT deviceAdded(udi + ":media");
+ }
+
+ if (m_knownDrivesWithMedia.contains(udi) && !device.prop("DeviceIsOpticalDisc").toBool())
+ {
+ m_knownDrivesWithMedia.removeAll(udi);
+ m_deviceCache.removeAll(udi + ":media");
+ Q_EMIT deviceRemoved(udi + ":media");
+ }
+ }
+
+ if (device.queryDeviceInterface(Solid::DeviceInterface::StorageDrive) && device.prop("MediaAvailable").toBool() && m_dirtyDevices.contains(udi))
+ {
+ qDebug() << "dirty device added:" << udi;
+ Q_EMIT deviceAdded(udi);
+ m_dirtyDevices.removeAll(udi);
+ }
+}
+#endif
+
+
+void Manager::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
+{
+ const QString udi = object_path.path();
@ -2060,6 +1913,10 @@ index 0000000..2e6f8c6
+void Manager::slotMediaChanged(const QDBusMessage & msg)
+{
+ const QVariantMap properties = qdbus_cast<QVariantMap>(msg.arguments().at(1));
+
+ if (!properties.contains("Size")) // react only on Size changes
+ return;
+
+ const QString udi = msg.path();
+ qulonglong size = properties.value("Size").toULongLong();
+ qDebug() << "MEDIA CHANGED in" << udi << "; size is:" << size;
@ -2159,10 +2016,10 @@ index 0000000..7cf0a72
+#endif // UDISKS2MANAGER_H
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.cpp b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.cpp
new file mode 100644
index 0000000..bceb277
index 0000000..478c930
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.cpp
@@ -0,0 +1,274 @@
@@ -0,0 +1,277 @@
+/*
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
+ Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
@ -2192,7 +2049,7 @@ index 0000000..bceb277
+#include <QtCore/QFile>
+#include <QtDBus/QDBusConnection>
+
+#include "../shared/udevqt.h"
+#include "../shared/udevqtclient.h"
+
+#include "udisks2.h"
+#include "udisksopticaldisc.h"
@ -2330,11 +2187,13 @@ index 0000000..bceb277
+
+using namespace Solid::Backends::UDisks2;
+
+OpticalDisc::OpticalDisc(Device *device)
+ : StorageVolume(device), m_needsReprobe(true), m_cachedContent(Solid::OpticalDisc::NoContent)
+OpticalDisc::OpticalDisc(Device *dev)
+ : StorageVolume(dev), m_needsReprobe(true), m_cachedContent(Solid::OpticalDisc::NoContent)
+{
+ UdevQt::Client client(this);
+ m_udevDevice = client.deviceByDeviceFile(QFile::decodeName(m_device->prop("Device").toByteArray()));
+ m_udevDevice = client.deviceByDeviceFile(device());
+ //qDebug() << "udev device:" << m_udevDevice.name() << "valid:" << m_udevDevice.isValid();
+ /*qDebug() << "\tProperties:" << */ m_udevDevice.deviceProperties(); // initialize the properties DB so that it doesn't crash further down, #298416
+
+ m_drive = new Device(m_device->prop("Drive").value<QDBusObjectPath>().path());
+ QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_drive->udi(), DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
@ -2367,6 +2226,7 @@ index 0000000..bceb277
+
+bool OpticalDisc::isAppendable() const
+{
+ //qDebug() << "appendable prop" << m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE");
+ return m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE").toString() == QLatin1String("appendable");
+}
+
@ -2439,7 +2299,7 @@ index 0000000..bceb277
+}
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.h b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.h
new file mode 100644
index 0000000..1e2f030
index 0000000..5b80995
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.h
@@ -0,0 +1,69 @@
@ -2469,7 +2329,7 @@ index 0000000..1e2f030
+
+#include <solid/ifaces/opticaldisc.h>
+
+#include "../shared/udevqt.h"
+#include "../shared/udevqtdevice.h"
+
+#include "udisksstoragevolume.h"
+#include "udisksdevice.h"
@ -2487,7 +2347,7 @@ index 0000000..1e2f030
+ Q_INTERFACES(Solid::Ifaces::OpticalDisc)
+
+public:
+ OpticalDisc(Device *device);
+ OpticalDisc(Device *dev);
+ virtual ~OpticalDisc();
+
+ virtual qulonglong capacity() const;
@ -2795,7 +2655,7 @@ index 0000000..4c98ef5
+#endif // UDISKS2OPTICALDRIVE_H
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.cpp b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.cpp
new file mode 100644
index 0000000..9239bcb
index 0000000..146c227
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.cpp
@@ -0,0 +1,359 @@
@ -2859,7 +2719,7 @@ index 0000000..9239bcb
+
+bool StorageAccess::isLuksDevice() const
+{
+ return m_device->isEncryptedContainer(); // encrypted (and unlocked) device
+ return m_device->isEncryptedContainer(); // encrypted device
+}
+
+bool StorageAccess::isAccessible() const
@ -2957,7 +2817,7 @@ index 0000000..9239bcb
+ if (m_setupInProgress)
+ {
+ if (isLuksDevice() && !isAccessible()) { // unlocked device, now mount it
+ if (reply.type() == QDBusMessage::ReplyMessage)
+ if (reply.type() == QDBusMessage::ReplyMessage) // we've got a response from Unlock
+ m_clearTextPath = reply.arguments().value(0).value<QDBusObjectPath>().path();
+ mount();
+ }
@ -3105,7 +2965,7 @@ index 0000000..9239bcb
+
+ QString appId = QCoreApplication::applicationName();
+
+ QDBusInterface soliduiserver("org.kde.kded", "/modules/soliduiserver", "org.kde.SolidUiServer");
+ QDBusInterface soliduiserver("org.kde.kded5", "/modules/soliduiserver", "org.kde.SolidUiServer");
+ QDBusReply<void> reply = soliduiserver.call("showPassphraseDialog", udi, returnService,
+ m_lastReturnObject, wId, appId);
+ m_passphraseRequested = reply.isValid();
@ -3136,7 +2996,7 @@ index 0000000..9239bcb
+ QDBusConnection c = QDBusConnection::systemBus();
+ QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_device->udi(), UD2_DBUS_INTERFACE_ENCRYPTED, "Unlock");
+
+ msg << passphrase.toUtf8(); // QByteArray
+ msg << passphrase;
+ msg << QVariantMap(); // options, unused now
+
+ c.callWithCallback(msg, this,
@ -3270,10 +3130,10 @@ index 0000000..36f2102
+#endif // UDISKS2STORAGEACCESS_H
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.cpp b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.cpp
new file mode 100644
index 0000000..3a62857
index 0000000..c79ac20
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.cpp
@@ -0,0 +1,144 @@
@@ -0,0 +1,147 @@
+/*
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
+ Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
@ -3297,18 +3157,19 @@ index 0000000..3a62857
+
+#include "udisksstoragedrive.h"
+
+#include "../shared/udevqt.h"
+#include "../shared/udevqtclient.h"
+
+#include <QtCore/QDebug>
+#include <QtCore/QFile>
+
+using namespace Solid::Backends::UDisks2;
+
+StorageDrive::StorageDrive(Device *device)
+ : Block(device)
+StorageDrive::StorageDrive(Device *dev)
+ : Block(dev)
+{
+ UdevQt::Client client(this);
+ m_udevDevice = client.deviceByDeviceFile(QFile::decodeName(m_device->prop("Device").toByteArray()));
+ m_udevDevice = client.deviceByDeviceFile(device());
+ m_udevDevice.deviceProperties();
+}
+
+StorageDrive::~StorageDrive()
@ -3386,6 +3247,8 @@ index 0000000..3a62857
+ const QString bus = m_device->prop("ConnectionBus").toString();
+ const QString udevBus = m_udevDevice.deviceProperty("ID_BUS").toString();
+
+ //qDebug() << "bus:" << bus << "udev bus:" << udevBus;
+
+ if (udevBus == "ata")
+ {
+ if (m_udevDevice.deviceProperty("ID_ATA_SATA").toInt() == 1) // serial ATA
@ -3420,7 +3283,7 @@ index 0000000..3a62857
+}
diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.h b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.h
new file mode 100644
index 0000000..97007b3
index 0000000..9c87a23
--- /dev/null
+++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.h
@@ -0,0 +1,61 @@
@ -3450,7 +3313,7 @@ index 0000000..97007b3
+
+#include <ifaces/storagedrive.h>
+
+#include "../shared/udevqt.h"
+#include "../shared/udevqtdevice.h"
+
+#include "udisksblock.h"
+
@ -3467,7 +3330,7 @@ index 0000000..97007b3
+ Q_INTERFACES(Solid::Ifaces::StorageDrive)
+
+public:
+ StorageDrive(Device *device);
+ StorageDrive(Device *dev);
+ virtual ~StorageDrive();
+
+ virtual qulonglong size() const;
@ -3659,3 +3522,141 @@ index 0000000..2ca04d2
+}
+
+#endif // UDISKS2STORAGEVOLUME_H
diff --git a/tier1/solid/autotests/CMakeLists.txt b/tier1/solid/autotests/CMakeLists.txt
index 64bfdc0..180b04c 100644
--- a/tier1/solid/autotests/CMakeLists.txt
+++ b/tier1/solid/autotests/CMakeLists.txt
@@ -14,18 +14,6 @@ target_link_libraries(fakehardwaretest solid_static ${QT_QTCORE_LIBRARY} ${QT_QT
set_target_properties(fakehardwaretest PROPERTIES COMPILE_FLAGS -DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../src/solid/backends/fakehw/fakecomputer.xml\\"")
-########### halbasictest ###############
-
-if(NOT WIN32 AND NOT APPLE)
- set(halbasictest_SRCS halbasictest.cpp )
-
- add_executable(halbasictest ${halbasictest_SRCS})
-
- target_link_libraries(halbasictest solid_static ${KDEWIN_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
-
- ecm_mark_as_test(halbasictest)
-endif(NOT WIN32 AND NOT APPLE)
-
########### solidhwtest ###############
set(solidhwtest_SRCS
diff --git a/tier1/solid/src/solid/CMakeLists.txt b/tier1/solid/src/solid/CMakeLists.txt
index 0fabd2c..75bb642 100644
--- a/tier1/solid/src/solid/CMakeLists.txt
+++ b/tier1/solid/src/solid/CMakeLists.txt
@@ -29,7 +29,6 @@ configure_file(config-processor.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-proce
file(MAKE_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
- ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
${CMAKE_CURRENT_BINARY_DIR}/backends/udev
${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
)
@@ -205,33 +204,6 @@ if(NOT WIN32 AND NOT APPLE)
endif( UDEV_FOUND )
- message(STATUS "Building Solid HAL backend." )
- set(solid_LIB_SRCS ${solid_LIB_SRCS}
- backends/hal/halacadapter.cpp
- backends/hal/halaudiointerface.cpp
- backends/hal/halbattery.cpp
- backends/hal/halblock.cpp
- backends/hal/halbutton.cpp
- backends/hal/halcamera.cpp
- backends/hal/halcdrom.cpp
- backends/hal/haldeviceinterface.cpp
- backends/hal/haldvbinterface.cpp
- backends/hal/halfstabhandling.cpp
- backends/hal/halgenericinterface.cpp
- backends/hal/haldevice.cpp
- backends/hal/halmanager.cpp
- backends/hal/halnetworkinterface.cpp
- backends/hal/halserialinterface.cpp
- backends/hal/halopticaldisc.cpp
- backends/hal/halportablemediaplayer.cpp
- backends/hal/halprocessor.cpp
- backends/hal/halstorageaccess.cpp
- backends/hal/halstorage.cpp
- backends/hal/halvideo.cpp
- backends/hal/halvolume.cpp
- backends/hal/halsmartcardreader.cpp
- )
-
message(STATUS "Building Solid UPower backend." )
set(solid_LIB_SRCS ${solid_LIB_SRCS}
backends/upower/upowermanager.cpp
@@ -244,18 +216,19 @@ if(NOT WIN32 AND NOT APPLE)
# FIXME: this should work on more Unix systems
if (CMAKE_SYSTEM_NAME MATCHES Linux)
- message(STATUS "Building Solid UDisks backend." )
+ message(STATUS "Building Solid UDisks2 backend." )
set(solid_LIB_SRCS ${solid_LIB_SRCS}
- backends/udisks/udisksmanager.cpp
- backends/udisks/udisksdevice.cpp
- backends/udisks/udisksblock.cpp
- backends/udisks/udisksstoragevolume.cpp
- backends/udisks/udisksdeviceinterface.cpp
- backends/udisks/udisksopticaldisc.cpp
- backends/udisks/udisksopticaldrive.cpp
- backends/udisks/udisksstoragedrive.cpp
- backends/udisks/udisksstorageaccess.cpp
- backends/udisks/udisksgenericinterface.cpp
+ backends/udisks2/udisksmanager.cpp
+ backends/udisks2/udisksdevice.cpp
+ backends/udisks2/udisksblock.cpp
+ backends/udisks2/udisksstoragevolume.cpp
+ backends/udisks2/udisksdeviceinterface.cpp
+ backends/udisks2/udisksopticaldisc.cpp
+ backends/udisks2/udisksopticaldrive.cpp
+ backends/udisks2/udisksstoragedrive.cpp
+ backends/udisks2/udisksstorageaccess.cpp
+ backends/udisks2/udisksgenericinterface.cpp
+ backends/udisks2/dbus/manager.cpp
)
endif ()
diff --git a/tier1/solid/src/solid/managerbase.cpp b/tier1/solid/src/solid/managerbase.cpp
index e228b48..7a7cc7d 100644
--- a/tier1/solid/src/solid/managerbase.cpp
+++ b/tier1/solid/src/solid/managerbase.cpp
@@ -30,8 +30,7 @@
#if defined (Q_OS_MAC)
#include "backends/iokit/iokitmanager.h"
#elif defined (Q_OS_UNIX)
-#include "backends/hal/halmanager.h"
-#include "backends/udisks/udisksmanager.h"
+#include "backends/udisks2/udisksmanager.h"
#include "backends/upower/upowermanager.h"
#if defined (HUPNP_FOUND)
@@ -71,22 +70,13 @@ void Solid::ManagerBasePrivate::loadBackends()
# elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
m_backends << new Solid::Backends::Wmi::WmiManager(0);
-# elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
- m_backends << new Solid::Backends::Hal::HalManager(0);
-
# elif defined(Q_OS_LINUX)
- bool solidHalLegacyEnabled
- = QString::fromLocal8Bit(qgetenv("SOLID_HAL_LEGACY")).toInt()==1;
- if (solidHalLegacyEnabled) {
- m_backends << new Solid::Backends::Hal::HalManager(0);
- } else {
# if defined(UDEV_FOUND)
m_backends << new Solid::Backends::UDev::UDevManager(0);
# endif
- m_backends << new Solid::Backends::UDisks::UDisksManager(0)
+ m_backends << new Solid::Backends::UDisks2::Manager(0)
<< new Solid::Backends::UPower::UPowerManager(0)
<< new Solid::Backends::Fstab::FstabManager(0);
- }
# endif
# if defined (HUPNP_FOUND)

View File

@ -25,7 +25,7 @@
Summary: KDE Libraries
Version: 4.8.3
Release: 2%{?dist}
Release: 3%{?dist}
Name: kdelibs
Epoch: 6
@ -600,6 +600,9 @@ rm -rf %{buildroot}
%changelog
* Thu May 24 2012 Lukas Tinkl <ltinkl@redhat.com> - 6:4.8.3-3
- update the udisks2 backend patch, fixing some bugs with storage drives
* Thu May 03 2012 Than Ngo <than@redhat.com> - 6:4.8.3-2
- add rhel/fedora condition