Resolves #868530 - cache information about solid device in 'Places'
panel in open/save dialog - update solid/udisks2 backend, switch to cmake-define
This commit is contained in:
parent
01e36094ea
commit
032b78558d
|
@ -1,5 +1,5 @@
|
||||||
diff --git a/solid/solid/CMakeLists.txt b/solid/solid/CMakeLists.txt
|
diff --git a/solid/solid/CMakeLists.txt b/solid/solid/CMakeLists.txt
|
||||||
index 0aa7a43..0a74053 100644
|
index 0aa7a43..5cd1484 100644
|
||||||
--- a/solid/solid/CMakeLists.txt
|
--- a/solid/solid/CMakeLists.txt
|
||||||
+++ b/solid/solid/CMakeLists.txt
|
+++ b/solid/solid/CMakeLists.txt
|
||||||
@@ -1,6 +1,7 @@
|
@@ -1,6 +1,7 @@
|
||||||
|
@ -10,55 +10,12 @@ index 0aa7a43..0a74053 100644
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
include_directories( ${KDEWIN_INCLUDES} )
|
include_directories( ${KDEWIN_INCLUDES} )
|
||||||
@@ -39,7 +40,6 @@ configure_file(config-processor.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-proce
|
@@ -264,19 +265,38 @@ if(NOT WIN32 AND NOT APPLE)
|
||||||
|
|
||||||
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
|
|
||||||
)
|
|
||||||
@@ -225,33 +225,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
|
|
||||||
@@ -264,18 +237,19 @@ if(NOT WIN32 AND NOT APPLE)
|
|
||||||
|
|
||||||
# FIXME: this should work on more Unix systems
|
# FIXME: this should work on more Unix systems
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES Linux)
|
if (CMAKE_SYSTEM_NAME MATCHES Linux)
|
||||||
- message(STATUS "Building Solid UDisks backend." )
|
- message(STATUS "Building Solid UDisks backend." )
|
||||||
+ message(STATUS "Building Solid UDisks2 backend." )
|
- set(solid_LIB_SRCS ${solid_LIB_SRCS}
|
||||||
set(solid_LIB_SRCS ${solid_LIB_SRCS}
|
|
||||||
- backends/udisks/udisksmanager.cpp
|
- backends/udisks/udisksmanager.cpp
|
||||||
- backends/udisks/udisksdevice.cpp
|
- backends/udisks/udisksdevice.cpp
|
||||||
- backends/udisks/udisksblock.cpp
|
- backends/udisks/udisksblock.cpp
|
||||||
|
@ -69,20 +26,42 @@ index 0aa7a43..0a74053 100644
|
||||||
- backends/udisks/udisksstoragedrive.cpp
|
- backends/udisks/udisksstoragedrive.cpp
|
||||||
- backends/udisks/udisksstorageaccess.cpp
|
- backends/udisks/udisksstorageaccess.cpp
|
||||||
- backends/udisks/udisksgenericinterface.cpp
|
- backends/udisks/udisksgenericinterface.cpp
|
||||||
+ backends/udisks2/udisksmanager.cpp
|
- )
|
||||||
+ backends/udisks2/udisksdevice.cpp
|
+
|
||||||
+ backends/udisks2/udisksblock.cpp
|
+ if ( WITH_SOLID_UDISKS2 )
|
||||||
+ backends/udisks2/udisksstoragevolume.cpp
|
+ message(STATUS "Building Solid UDisks2 backend." )
|
||||||
+ backends/udisks2/udisksdeviceinterface.cpp
|
+ add_definitions(-DWITH_SOLID_UDISKS2)
|
||||||
+ backends/udisks2/udisksopticaldisc.cpp
|
+ set(solid_LIB_SRCS ${solid_LIB_SRCS}
|
||||||
+ backends/udisks2/udisksopticaldrive.cpp
|
+ backends/udisks2/udisksmanager.cpp
|
||||||
+ backends/udisks2/udisksstoragedrive.cpp
|
+ backends/udisks2/udisksdevice.cpp
|
||||||
+ backends/udisks2/udisksstorageaccess.cpp
|
+ backends/udisks2/udisksblock.cpp
|
||||||
+ backends/udisks2/udisksgenericinterface.cpp
|
+ backends/udisks2/udisksstoragevolume.cpp
|
||||||
+ backends/udisks2/dbus/manager.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
|
||||||
|
+ )
|
||||||
|
+ else ( WITH_SOLID_UDISKS2 )
|
||||||
|
+ message(STATUS "Building Solid UDisks 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
|
||||||
|
+ )
|
||||||
|
+ endif ( WITH_SOLID_UDISKS2 )
|
||||||
endif (CMAKE_SYSTEM_NAME MATCHES Linux)
|
endif (CMAKE_SYSTEM_NAME MATCHES Linux)
|
||||||
|
|
||||||
|
message(STATUS "Building Solid fstab backend." )
|
||||||
diff --git a/solid/solid/backends/udisks2/dbus/manager.cpp b/solid/solid/backends/udisks2/dbus/manager.cpp
|
diff --git a/solid/solid/backends/udisks2/dbus/manager.cpp b/solid/solid/backends/udisks2/dbus/manager.cpp
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..7ea4aa8
|
index 0000000..7ea4aa8
|
||||||
|
@ -209,10 +188,10 @@ index 0000000..8f25cb6
|
||||||
+</node>
|
+</node>
|
||||||
diff --git a/solid/solid/backends/udisks2/udisks2.h b/solid/solid/backends/udisks2/udisks2.h
|
diff --git a/solid/solid/backends/udisks2/udisks2.h b/solid/solid/backends/udisks2/udisks2.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..25a1dc0
|
index 0000000..8dda86a
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/solid/solid/backends/udisks2/udisks2.h
|
+++ b/solid/solid/backends/udisks2/udisks2.h
|
||||||
@@ -0,0 +1,77 @@
|
@@ -0,0 +1,78 @@
|
||||||
+/*
|
+/*
|
||||||
+ Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
|
+ Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
|
||||||
+
|
+
|
||||||
|
@ -268,6 +247,7 @@ index 0000000..25a1dc0
|
||||||
+#define UD2_DBUS_INTERFACE_FILESYSTEM "org.freedesktop.UDisks2.Filesystem"
|
+#define UD2_DBUS_INTERFACE_FILESYSTEM "org.freedesktop.UDisks2.Filesystem"
|
||||||
+#define UD2_DBUS_INTERFACE_ENCRYPTED "org.freedesktop.UDisks2.Encrypted"
|
+#define UD2_DBUS_INTERFACE_ENCRYPTED "org.freedesktop.UDisks2.Encrypted"
|
||||||
+#define UD2_DBUS_INTERFACE_SWAP "org.freedesktop.UDisks2.Swapspace"
|
+#define UD2_DBUS_INTERFACE_SWAP "org.freedesktop.UDisks2.Swapspace"
|
||||||
|
+#define UD2_DBUS_INTERFACE_LOOP "org.freedesktop.UDisks2.Loop"
|
||||||
+
|
+
|
||||||
+/* errors */
|
+/* errors */
|
||||||
+#define UD2_ERROR_UNAUTHORIZED "org.freedesktop.PolicyKit.Error.NotAuthorized"
|
+#define UD2_ERROR_UNAUTHORIZED "org.freedesktop.PolicyKit.Error.NotAuthorized"
|
||||||
|
@ -292,10 +272,10 @@ index 0000000..25a1dc0
|
||||||
+#endif // SOLID_BACKENDS_UDISKS2_H
|
+#endif // SOLID_BACKENDS_UDISKS2_H
|
||||||
diff --git a/solid/solid/backends/udisks2/udisksblock.cpp b/solid/solid/backends/udisks2/udisksblock.cpp
|
diff --git a/solid/solid/backends/udisks2/udisksblock.cpp b/solid/solid/backends/udisks2/udisksblock.cpp
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..474f3d6
|
index 0000000..f3cd1e8
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/solid/solid/backends/udisks2/udisksblock.cpp
|
+++ b/solid/solid/backends/udisks2/udisksblock.cpp
|
||||||
@@ -0,0 +1,84 @@
|
@@ -0,0 +1,88 @@
|
||||||
+/*
|
+/*
|
||||||
+ Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
|
+ Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
|
||||||
+
|
+
|
||||||
|
@ -321,9 +301,9 @@ index 0000000..474f3d6
|
||||||
+#include <QFile>
|
+#include <QFile>
|
||||||
+#include <QtDBus/QDBusConnection>
|
+#include <QtDBus/QDBusConnection>
|
||||||
+#include <QtDBus/QDBusPendingReply>
|
+#include <QtDBus/QDBusPendingReply>
|
||||||
|
+#include <QtXml/QDomDocument>
|
||||||
+
|
+
|
||||||
+#include "udisksblock.h"
|
+#include "udisksblock.h"
|
||||||
+#include "dbus/manager.h"
|
|
||||||
+
|
+
|
||||||
+using namespace Solid::Backends::UDisks2;
|
+using namespace Solid::Backends::UDisks2;
|
||||||
+
|
+
|
||||||
|
@ -335,28 +315,32 @@ index 0000000..474f3d6
|
||||||
+
|
+
|
||||||
+ // we have a drive (non-block device for udisks), so let's find the corresponding (real) block device
|
+ // 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()) {
|
+ if (m_devNum == 0 || m_devFile.isEmpty()) {
|
||||||
+ org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, QDBusConnection::systemBus());
|
+ const QString path = "/org/freedesktop/UDisks2/block_devices";
|
||||||
+ QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
|
+ QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path,
|
||||||
|
+ DBUS_INTERFACE_INTROSPECT, "Introspect");
|
||||||
|
+ QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
|
||||||
+ reply.waitForFinished();
|
+ 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))
|
+ if (reply.isValid()) {
|
||||||
+ continue;
|
+ QDomDocument dom;
|
||||||
|
+ dom.setContent(reply.value());
|
||||||
|
+ QDomNodeList nodeList = dom.documentElement().elementsByTagName("node");
|
||||||
|
+ for (int i = 0; i < nodeList.count(); i++) {
|
||||||
|
+ QDomElement nodeElem = nodeList.item(i).toElement();
|
||||||
|
+ if (!nodeElem.isNull() && nodeElem.hasAttribute("name")) {
|
||||||
|
+ const QString udi = path + "/" + nodeElem.attribute("name");
|
||||||
+
|
+
|
||||||
+ Device device(udi);
|
+ Device device(udi);
|
||||||
+ if (device.drivePath() == dev->udi()) {
|
+ if (device.drivePath() == dev->udi()) {
|
||||||
+ m_devNum = device.prop("DeviceNumber").toULongLong();
|
+ m_devNum = device.prop("DeviceNumber").toULongLong();
|
||||||
+ m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
|
+ m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
|
||||||
+ break;
|
+ break;
|
||||||
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ else // show error
|
+ else
|
||||||
+ {
|
|
||||||
+ qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
|
+ qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
|
||||||
+ }
|
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ //qDebug() << "devnum:" << m_devNum << "dev file:" << m_devFile;
|
+ //qDebug() << "devnum:" << m_devNum << "dev file:" << m_devFile;
|
||||||
|
@ -444,10 +428,10 @@ index 0000000..19cb70a
|
||||||
+#endif // UDISKS2BLOCK_H
|
+#endif // UDISKS2BLOCK_H
|
||||||
diff --git a/solid/solid/backends/udisks2/udisksdevice.cpp b/solid/solid/backends/udisks2/udisksdevice.cpp
|
diff --git a/solid/solid/backends/udisks2/udisksdevice.cpp b/solid/solid/backends/udisks2/udisksdevice.cpp
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..22b0c45
|
index 0000000..a3f780f
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/solid/solid/backends/udisks2/udisksdevice.cpp
|
+++ b/solid/solid/backends/udisks2/udisksdevice.cpp
|
||||||
@@ -0,0 +1,910 @@
|
@@ -0,0 +1,927 @@
|
||||||
+/*
|
+/*
|
||||||
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
|
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
|
||||||
+ Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
|
+ Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
|
||||||
|
@ -651,11 +635,15 @@ index 0000000..22b0c45
|
||||||
+
|
+
|
||||||
+QString Device::description() const
|
+QString Device::description() const
|
||||||
+{
|
+{
|
||||||
+ const QString hintName = prop("HintName").toString();
|
+ const QString hintName = property("HintName").toString(); // non-cached
|
||||||
+ if (!hintName.isEmpty())
|
+ if (!hintName.isEmpty())
|
||||||
+ return hintName;
|
+ return hintName;
|
||||||
+
|
+
|
||||||
+ if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
|
+ if (isLoop())
|
||||||
|
+ return QObject::tr("Loop Device");
|
||||||
|
+ else if (isSwap())
|
||||||
|
+ return QObject::tr("Swap Space");
|
||||||
|
+ else if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
|
||||||
+ return storageDescription();
|
+ return storageDescription();
|
||||||
+ else if (queryDeviceInterface(Solid::DeviceInterface::StorageVolume))
|
+ else if (queryDeviceInterface(Solid::DeviceInterface::StorageVolume))
|
||||||
+ return volumeDescription();
|
+ return volumeDescription();
|
||||||
|
@ -668,7 +656,7 @@ index 0000000..22b0c45
|
||||||
+ QString description;
|
+ QString description;
|
||||||
+ const UDisks2::StorageDrive storageDrive(const_cast<Device*>(this));
|
+ const UDisks2::StorageDrive storageDrive(const_cast<Device*>(this));
|
||||||
+ Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
|
+ Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
|
||||||
+ bool drive_is_hotpluggable = storageDrive.isHotpluggable();
|
+ const bool drive_is_hotpluggable = storageDrive.isHotpluggable();
|
||||||
+
|
+
|
||||||
+ if (drive_type == Solid::StorageDrive::CdromDrive)
|
+ if (drive_type == Solid::StorageDrive::CdromDrive)
|
||||||
+ {
|
+ {
|
||||||
|
@ -740,7 +728,7 @@ index 0000000..22b0c45
|
||||||
+ return description;
|
+ return description;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ bool drive_is_removable = storageDrive.isRemovable();
|
+ const bool drive_is_removable = storageDrive.isRemovable();
|
||||||
+
|
+
|
||||||
+ if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
|
+ if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
|
||||||
+ {
|
+ {
|
||||||
|
@ -973,19 +961,23 @@ index 0000000..22b0c45
|
||||||
+
|
+
|
||||||
+QString Device::icon() const
|
+QString Device::icon() const
|
||||||
+{
|
+{
|
||||||
+ QString iconName = prop( "HintIconName" ).toString();
|
+ QString iconName = property( "HintIconName" ).toString(); // non-cached
|
||||||
+
|
+
|
||||||
+ if ( !iconName.isEmpty() )
|
+ if ( !iconName.isEmpty() )
|
||||||
+ {
|
+ {
|
||||||
+ return iconName;
|
+ return iconName;
|
||||||
+ }
|
+ }
|
||||||
|
+ else if (isLoop() || isSwap())
|
||||||
|
+ {
|
||||||
|
+ return "drive-harddisk";
|
||||||
|
+ }
|
||||||
+ else if (isDrive()) {
|
+ else if (isDrive()) {
|
||||||
+ const bool isRemovable = prop("Removable").toBool();
|
+ const bool isRemovable = prop("Removable").toBool();
|
||||||
+ const QString conn = prop("ConnectionBus").toString();
|
+ const QString conn = prop("ConnectionBus").toString();
|
||||||
+
|
+
|
||||||
+ if (isOpticalDrive())
|
+ if (isOpticalDrive())
|
||||||
+ return "drive-optical";
|
+ return "drive-optical";
|
||||||
+ else if (isRemovable && !isOpticalDisc()) {
|
+ else if (isRemovable && !prop("Optical").toBool()) {
|
||||||
+ if (conn == "usb")
|
+ if (conn == "usb")
|
||||||
+ return "drive-removable-media-usb";
|
+ return "drive-removable-media-usb";
|
||||||
+ else
|
+ else
|
||||||
|
@ -993,14 +985,18 @@ index 0000000..22b0c45
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ else if (isBlock()) {
|
+ else if (isBlock()) {
|
||||||
+ Device drive(drivePath());
|
+ const QString drv = drivePath();
|
||||||
|
+ if (drv.isEmpty() || drv == "/")
|
||||||
|
+ return "drive-harddisk"; // stuff like loop devices or swap which don't have the Drive prop set
|
||||||
|
+
|
||||||
|
+ Device drive(drv);
|
||||||
+
|
+
|
||||||
+ // handle media
|
+ // handle media
|
||||||
+ const QString media = drive.prop("Media").toString();
|
+ const QString media = drive.prop("Media").toString();
|
||||||
+
|
+
|
||||||
+ if ( !media.isEmpty() )
|
+ if ( !media.isEmpty() )
|
||||||
+ {
|
+ {
|
||||||
+ if ( isOpticalDisc() ) // optical stuff
|
+ if ( drive.prop("Optical").toBool() ) // optical stuff
|
||||||
+ {
|
+ {
|
||||||
+ bool isWritable = drive.prop("OpticalBlank").toBool();
|
+ bool isWritable = drive.prop("OpticalBlank").toBool();
|
||||||
+
|
+
|
||||||
|
@ -1107,8 +1103,7 @@ index 0000000..22b0c45
|
||||||
+ if (reply.isValid()) {
|
+ if (reply.isValid()) {
|
||||||
+ m_cache.insert(key, reply);
|
+ m_cache.insert(key, reply);
|
||||||
+ } else {
|
+ } else {
|
||||||
+ //qDebug() << "got invalid reply for cache:" << key;
|
+ qWarning() << "got invalid reply for cache:" << key;
|
||||||
+ //m_cache.insert(key, QVariant());
|
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
@ -1140,11 +1135,12 @@ index 0000000..22b0c45
|
||||||
+
|
+
|
||||||
+QVariantMap Device::allProperties() const
|
+QVariantMap Device::allProperties() const
|
||||||
+{
|
+{
|
||||||
|
+ QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
|
||||||
|
+
|
||||||
+ Q_FOREACH (const QString & iface, m_interfaces) {
|
+ Q_FOREACH (const QString & iface, m_interfaces) {
|
||||||
+ if (iface.startsWith("org.freedesktop.DBus"))
|
+ if (iface.startsWith("org.freedesktop.DBus"))
|
||||||
+ continue;
|
+ continue;
|
||||||
+ QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
|
+ call.setArguments(QVariantList() << iface);
|
||||||
+ call << iface;
|
|
||||||
+ QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
|
+ QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
|
||||||
+ reply.waitForFinished();
|
+ reply.waitForFinished();
|
||||||
+
|
+
|
||||||
|
@ -1354,16 +1350,21 @@ index 0000000..22b0c45
|
||||||
+ return hasInterface(UD2_DBUS_INTERFACE_SWAP);
|
+ return hasInterface(UD2_DBUS_INTERFACE_SWAP);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+bool Device::isLoop() const
|
||||||
|
+{
|
||||||
|
+ return hasInterface(UD2_DBUS_INTERFACE_LOOP);
|
||||||
|
+}
|
||||||
|
+
|
||||||
+QString Device::drivePath() const
|
+QString Device::drivePath() const
|
||||||
+{
|
+{
|
||||||
+ return prop("Drive").value<QDBusObjectPath>().path();
|
+ return prop("Drive").value<QDBusObjectPath>().path();
|
||||||
+}
|
+}
|
||||||
diff --git a/solid/solid/backends/udisks2/udisksdevice.h b/solid/solid/backends/udisks2/udisksdevice.h
|
diff --git a/solid/solid/backends/udisks2/udisksdevice.h b/solid/solid/backends/udisks2/udisksdevice.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..cf8e2f5
|
index 0000000..7e27634
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/solid/solid/backends/udisks2/udisksdevice.h
|
+++ b/solid/solid/backends/udisks2/udisksdevice.h
|
||||||
@@ -0,0 +1,112 @@
|
@@ -0,0 +1,113 @@
|
||||||
+/*
|
+/*
|
||||||
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
|
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
|
||||||
+ Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
|
+ Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
|
||||||
|
@ -1445,6 +1446,7 @@ index 0000000..cf8e2f5
|
||||||
+ bool isEncryptedContainer() const;
|
+ bool isEncryptedContainer() const;
|
||||||
+ bool isEncryptedCleartext() const;
|
+ bool isEncryptedCleartext() const;
|
||||||
+ bool isSwap() const;
|
+ bool isSwap() const;
|
||||||
|
+ bool isLoop() const;
|
||||||
+
|
+
|
||||||
+ QString drivePath() const;
|
+ QString drivePath() const;
|
||||||
+
|
+
|
||||||
|
@ -1793,10 +1795,10 @@ index 0000000..d225f32
|
||||||
+#endif // SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
|
+#endif // SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
|
||||||
diff --git a/solid/solid/backends/udisks2/udisksmanager.cpp b/solid/solid/backends/udisks2/udisksmanager.cpp
|
diff --git a/solid/solid/backends/udisks2/udisksmanager.cpp b/solid/solid/backends/udisks2/udisksmanager.cpp
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..46d934e
|
index 0000000..fab5208
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/solid/solid/backends/udisks2/udisksmanager.cpp
|
+++ b/solid/solid/backends/udisks2/udisksmanager.cpp
|
||||||
@@ -0,0 +1,228 @@
|
@@ -0,0 +1,269 @@
|
||||||
+/*
|
+/*
|
||||||
+ Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
|
+ Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
|
||||||
+
|
+
|
||||||
|
@ -1822,6 +1824,7 @@ index 0000000..46d934e
|
||||||
+#include <QtCore/QCoreApplication>
|
+#include <QtCore/QCoreApplication>
|
||||||
+#include <QtCore/QDebug>
|
+#include <QtCore/QDebug>
|
||||||
+#include <QtDBus>
|
+#include <QtDBus>
|
||||||
|
+#include <QtXml/QDomDocument>
|
||||||
+
|
+
|
||||||
+#include "../shared/rootdevice.h"
|
+#include "../shared/rootdevice.h"
|
||||||
+
|
+
|
||||||
|
@ -1927,6 +1930,7 @@ index 0000000..46d934e
|
||||||
+{
|
+{
|
||||||
+ m_deviceCache.clear();
|
+ m_deviceCache.clear();
|
||||||
+
|
+
|
||||||
|
+#if 0
|
||||||
+ QDBusPendingReply<DBUSManagerStruct> reply = m_manager.GetManagedObjects();
|
+ QDBusPendingReply<DBUSManagerStruct> reply = m_manager.GetManagedObjects();
|
||||||
+ reply.waitForFinished();
|
+ reply.waitForFinished();
|
||||||
+ if (!reply.isError()) { // enum devices
|
+ if (!reply.isError()) { // enum devices
|
||||||
|
@ -1955,9 +1959,47 @@ index 0000000..46d934e
|
||||||
+ qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
|
+ qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ introspect("/org/freedesktop/UDisks2/block_devices", true /*checkOptical*/);
|
||||||
|
+ introspect("/org/freedesktop/UDisks2/drives");
|
||||||
|
+
|
||||||
+ return m_deviceCache;
|
+ return m_deviceCache;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+void Manager::introspect(const QString & path, bool checkOptical)
|
||||||
|
+{
|
||||||
|
+ QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path,
|
||||||
|
+ DBUS_INTERFACE_INTROSPECT, "Introspect");
|
||||||
|
+ QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
|
||||||
|
+ reply.waitForFinished();
|
||||||
|
+
|
||||||
|
+ if (reply.isValid()) {
|
||||||
|
+ QDomDocument dom;
|
||||||
|
+ dom.setContent(reply.value());
|
||||||
|
+ QDomNodeList nodeList = dom.documentElement().elementsByTagName("node");
|
||||||
|
+ for (int i = 0; i < nodeList.count(); i++) {
|
||||||
|
+ QDomElement nodeElem = nodeList.item(i).toElement();
|
||||||
|
+ if (!nodeElem.isNull() && nodeElem.hasAttribute("name")) {
|
||||||
|
+ const QString udi = path + "/" + nodeElem.attribute("name");
|
||||||
|
+
|
||||||
|
+ if (checkOptical) {
|
||||||
|
+ Device device(udi);
|
||||||
|
+ if (device.mightBeOpticalDisc()) {
|
||||||
|
+ QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
|
||||||
|
+ SLOT(slotMediaChanged(QDBusMessage)));
|
||||||
|
+ if (!device.isOpticalDisc()) // skip empty CD disc
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ m_deviceCache.append(udi);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
|
||||||
|
+}
|
||||||
+
|
+
|
||||||
+QSet< Solid::DeviceInterface::Type > Manager::supportedInterfaces() const
|
+QSet< Solid::DeviceInterface::Type > Manager::supportedInterfaces() const
|
||||||
+{
|
+{
|
||||||
|
@ -2025,12 +2067,13 @@ index 0000000..46d934e
|
||||||
+
|
+
|
||||||
+ return m_deviceCache;
|
+ return m_deviceCache;
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
diff --git a/solid/solid/backends/udisks2/udisksmanager.h b/solid/solid/backends/udisks2/udisksmanager.h
|
diff --git a/solid/solid/backends/udisks2/udisksmanager.h b/solid/solid/backends/udisks2/udisksmanager.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..7cf0a72
|
index 0000000..fb929ce
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/solid/solid/backends/udisks2/udisksmanager.h
|
+++ b/solid/solid/backends/udisks2/udisksmanager.h
|
||||||
@@ -0,0 +1,69 @@
|
@@ -0,0 +1,70 @@
|
||||||
+/*
|
+/*
|
||||||
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
|
+ Copyright 2010 Michael Zanetti <mzanetti@kde.org>
|
||||||
+ Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
|
+ Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
|
||||||
|
@ -2091,6 +2134,7 @@ index 0000000..7cf0a72
|
||||||
+
|
+
|
||||||
+private:
|
+private:
|
||||||
+ const QStringList &deviceCache();
|
+ const QStringList &deviceCache();
|
||||||
|
+ void introspect(const QString & path, bool checkOptical = false);
|
||||||
+ QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
|
+ QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
|
||||||
+ org::freedesktop::DBus::ObjectManager m_manager;
|
+ org::freedesktop::DBus::ObjectManager m_manager;
|
||||||
+ QStringList m_deviceCache;
|
+ QStringList m_deviceCache;
|
||||||
|
@ -3666,94 +3710,30 @@ index 0000000..2ca04d2
|
||||||
+
|
+
|
||||||
+#endif // UDISKS2STORAGEVOLUME_H
|
+#endif // UDISKS2STORAGEVOLUME_H
|
||||||
diff --git a/solid/solid/managerbase.cpp b/solid/solid/managerbase.cpp
|
diff --git a/solid/solid/managerbase.cpp b/solid/solid/managerbase.cpp
|
||||||
index fb5a67c..d832f31 100644
|
index fb5a67c..beaeac5 100644
|
||||||
--- a/solid/solid/managerbase.cpp
|
--- a/solid/solid/managerbase.cpp
|
||||||
+++ b/solid/solid/managerbase.cpp
|
+++ b/solid/solid/managerbase.cpp
|
||||||
@@ -21,7 +21,7 @@
|
@@ -31,7 +31,11 @@
|
||||||
#include "managerbase_p.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
-#if !defined (Q_WS_WIN) && !defined (Q_OS_MAC)
|
|
||||||
+#if !defined (Q_OS_WIN) && !defined (Q_OS_MAC)
|
|
||||||
#include <config-solid.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -30,8 +30,7 @@
|
|
||||||
#if defined (Q_OS_MAC)
|
|
||||||
#include "backends/iokit/iokitmanager.h"
|
#include "backends/iokit/iokitmanager.h"
|
||||||
#elif defined (Q_OS_UNIX)
|
#elif defined (Q_OS_UNIX)
|
||||||
-#include "backends/hal/halmanager.h"
|
#include "backends/hal/halmanager.h"
|
||||||
-#include "backends/udisks/udisksmanager.h"
|
+#if defined (WITH_SOLID_UDISKS2)
|
||||||
+#include "backends/udisks2/udisksmanager.h"
|
+#include "backends/udisks2/udisksmanager.h"
|
||||||
|
+#else
|
||||||
|
#include "backends/udisks/udisksmanager.h"
|
||||||
|
+#endif
|
||||||
#include "backends/upower/upowermanager.h"
|
#include "backends/upower/upowermanager.h"
|
||||||
|
|
||||||
#if defined (HUPNP_FOUND)
|
#if defined (HUPNP_FOUND)
|
||||||
@@ -44,7 +43,7 @@
|
@@ -83,7 +87,11 @@ void Solid::ManagerBasePrivate::loadBackends()
|
||||||
|
|
||||||
#include "backends/fstab/fstabmanager.h"
|
|
||||||
|
|
||||||
-#elif defined (Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
|
|
||||||
+#elif defined (Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
|
|
||||||
#include "backends/wmi/wmimanager.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -68,25 +67,16 @@ void Solid::ManagerBasePrivate::loadBackends()
|
|
||||||
# if defined(Q_OS_MAC)
|
|
||||||
m_backends << new Solid::Backends::IOKit::IOKitManager(0);
|
|
||||||
|
|
||||||
-# elif defined(Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
|
|
||||||
+# 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)
|
# if defined(UDEV_FOUND)
|
||||||
m_backends << new Solid::Backends::UDev::UDevManager(0);
|
m_backends << new Solid::Backends::UDev::UDevManager(0);
|
||||||
# endif
|
# endif
|
||||||
- m_backends << new Solid::Backends::UDisks::UDisksManager(0)
|
+# if defined(WITH_SOLID_UDISKS2)
|
||||||
+ m_backends << new Solid::Backends::UDisks2::Manager(0)
|
+ m_backends << new Solid::Backends::UDisks2::Manager(0)
|
||||||
|
+# else
|
||||||
|
m_backends << new Solid::Backends::UDisks::UDisksManager(0)
|
||||||
|
+# endif
|
||||||
<< new Solid::Backends::UPower::UPowerManager(0)
|
<< new Solid::Backends::UPower::UPowerManager(0)
|
||||||
<< new Solid::Backends::Fstab::FstabManager(0);
|
<< new Solid::Backends::Fstab::FstabManager(0);
|
||||||
- }
|
}
|
||||||
# endif
|
|
||||||
|
|
||||||
# if defined (HUPNP_FOUND)
|
|
||||||
@@ -99,5 +89,3 @@ QList<QObject*> Solid::ManagerBasePrivate::managerBackends() const
|
|
||||||
{
|
|
||||||
return m_backends;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
-
|
|
||||||
diff --git a/solid/tests/CMakeLists.txt b/solid/tests/CMakeLists.txt
|
|
||||||
index ef507d1..b9f3720 100644
|
|
||||||
--- a/solid/tests/CMakeLists.txt
|
|
||||||
+++ b/solid/tests/CMakeLists.txt
|
|
||||||
@@ -15,21 +15,6 @@ endif(WIN32)
|
|
||||||
target_link_libraries(fakehardwaretest solid_static ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
|
|
||||||
add_definitions(-DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../solid/backends/fakehw/fakecomputer.xml\\"")
|
|
||||||
|
|
||||||
-
|
|
||||||
-########### halbasictest ###############
|
|
||||||
-
|
|
||||||
-if(NOT WIN32 AND NOT APPLE)
|
|
||||||
-set(halbasictest_SRCS halbasictest.cpp )
|
|
||||||
-
|
|
||||||
-kde4_add_executable(halbasictest ${halbasictest_SRCS})
|
|
||||||
-
|
|
||||||
-if(WIN32)
|
|
||||||
- set_target_properties(halbasictest PROPERTIES COMPILE_FLAGS -DSOLID_EXPORT=)
|
|
||||||
-endif(WIN32)
|
|
||||||
-
|
|
||||||
-target_link_libraries(halbasictest solid_static ${KDEWIN_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
|
|
||||||
-endif(NOT WIN32 AND NOT APPLE)
|
|
||||||
-
|
|
||||||
########### solidhwtest ###############
|
|
||||||
|
|
||||||
set(solidhwtest_SRCS
|
|
||||||
|
|
12
kdelibs.spec
12
kdelibs.spec
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
Summary: KDE Libraries
|
Summary: KDE Libraries
|
||||||
Version: 4.9.2
|
Version: 4.9.2
|
||||||
Release: 8%{?dist}
|
Release: 9%{?dist}
|
||||||
|
|
||||||
Name: kdelibs
|
Name: kdelibs
|
||||||
Epoch: 6
|
Epoch: 6
|
||||||
|
@ -121,7 +121,7 @@ Patch42: 0003-Implement-automatic-scanning-of-source-code-for-requ.patch
|
||||||
# make forcefully hal-free build
|
# make forcefully hal-free build
|
||||||
Patch45: kdelibs-4.7.3-halectomy.patch
|
Patch45: kdelibs-4.7.3-halectomy.patch
|
||||||
|
|
||||||
# udisks2 Solid backend, halectomy
|
# udisks2 Solid backend
|
||||||
Patch47: kdelibs-udisks2-backend.patch
|
Patch47: kdelibs-udisks2-backend.patch
|
||||||
|
|
||||||
## upstreamable
|
## upstreamable
|
||||||
|
@ -350,6 +350,9 @@ mkdir -p %{_target_platform}
|
||||||
pushd %{_target_platform}
|
pushd %{_target_platform}
|
||||||
%{cmake_kde4} \
|
%{cmake_kde4} \
|
||||||
-DKDE_DISTRIBUTION_TEXT="%{version}-%{release} Fedora" \
|
-DKDE_DISTRIBUTION_TEXT="%{version}-%{release} Fedora" \
|
||||||
|
%if 0%{?rhel} > 6 || 0%{?fedora} > 17
|
||||||
|
-DWITH_SOLID_UDISKS2:BOOL=ON \
|
||||||
|
%endif
|
||||||
..
|
..
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
@ -590,6 +593,11 @@ rm -rf %{buildroot}
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Oct 29 2012 Lukáš Tinkl <ltinkl@redhat.com> 6:4.9.2-9
|
||||||
|
- Resolves #868530 - cache information about solid device in 'Places'
|
||||||
|
panel in open/save dialog
|
||||||
|
- update solid/udisks2 backend, switch to cmake-define
|
||||||
|
|
||||||
* Thu Oct 25 2012 Dan Vrátil <dvratil@redhat.com> 6:4.9.2-8
|
* Thu Oct 25 2012 Dan Vrátil <dvratil@redhat.com> 6:4.9.2-8
|
||||||
- Resolves #868530 - cache information about solid device in 'Places'
|
- Resolves #868530 - cache information about solid device in 'Places'
|
||||||
panel in open/save dialog
|
panel in open/save dialog
|
||||||
|
|
Loading…
Reference in New Issue