[arch-commits] Commit in kdelibs/kde-unstable (PKGBUILD udisks2-fixes.patch)

Andrea Scarpino andrea at archlinux.org
Wed Dec 19 14:51:52 UTC 2012


    Date: Wednesday, December 19, 2012 @ 09:51:51
  Author: andrea
Revision: 173352

KDE 4.10 RC1

Modified:
  kdelibs/kde-unstable/PKGBUILD
Deleted:
  kdelibs/kde-unstable/udisks2-fixes.patch

---------------------+
 PKGBUILD            |   15 
 udisks2-fixes.patch |  822 --------------------------------------------------
 2 files changed, 5 insertions(+), 832 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2012-12-19 14:47:55 UTC (rev 173351)
+++ PKGBUILD	2012-12-19 14:51:51 UTC (rev 173352)
@@ -3,8 +3,8 @@
 # Contributor: Pierre Schmitz <pierre at archlinux.de>
 
 pkgname=kdelibs
-pkgver=4.9.90
-pkgrel=2
+pkgver=4.9.95
+pkgrel=1
 pkgdesc="KDE Core Libraries"
 arch=('i686' 'x86_64')
 url='https://projects.kde.org/projects/kde/kdelibs'
@@ -17,12 +17,10 @@
 makedepends=('cmake' 'automoc4' 'avahi' 'libgl' 'hspell' 'mesa')
 install=${pkgname}.install
 source=("http://download.kde.org/unstable/${pkgver}/src/${pkgname}-${pkgver}.tar.xz"
-        'kde-applications-menu.patch' 'archlinux-menu.patch'
-        'udisks2-fixes.patch')
-sha1sums=('57a75fe32a76dc36877283d90fbb35529e54a69c'
+        'kde-applications-menu.patch' 'archlinux-menu.patch')
+sha1sums=('c770a1752fb0c7cb9e2df0e424051eef57c0c9ee'
           '86ee8c8660f19de8141ac99cd6943964d97a1ed7'
-          '63a850ab4196b9d06934f2b4a13acd9f7739bc67'
-          '0e7259aa37e399abe0353b8c1a0068f75ef5eebe')
+          '63a850ab4196b9d06934f2b4a13acd9f7739bc67')
 
 build() {
        cd "${srcdir}"/${pkgname}-${pkgver}
@@ -32,9 +30,6 @@
        # add Archlinux menu entry
        patch -p1 -i "${srcdir}"/archlinux-menu.patch
 
-       # Already fixed upstream, improve udisks2 performances
-       patch -p1 -i "${srcdir}"/udisks2-fixes.patch
-
        cd "${srcdir}"
        mkdir build
        cd build

Deleted: udisks2-fixes.patch
===================================================================
--- udisks2-fixes.patch	2012-12-19 14:47:55 UTC (rev 173351)
+++ udisks2-fixes.patch	2012-12-19 14:51:51 UTC (rev 173352)
@@ -1,822 +0,0 @@
-diff --git a/solid/solid/backends/udisks2/udisksblock.cpp b/solid/solid/backends/udisks2/udisksblock.cpp
-index 027ea03..f3cd1e8 100644
---- a/solid/solid/CMakeLists.txt
-+++ b/solid/solid/CMakeLists.txt
-@@ -272,6 +272,7 @@
-            set(solid_LIB_SRCS ${solid_LIB_SRCS}
-            backends/udisks2/udisksmanager.cpp
-            backends/udisks2/udisksdevice.cpp
-+           backends/udisks2/udisksdevicebackend.cpp
-            backends/udisks2/udisksblock.cpp
-            backends/udisks2/udisksstoragevolume.cpp
-            backends/udisks2/udisksdeviceinterface.cpp
---- a/solid/solid/backends/udisks2/udisksblock.cpp
-+++ b/solid/solid/backends/udisks2/udisksblock.cpp
-@@ -30,8 +30,7 @@
- using namespace Solid::Backends::UDisks2;
- 
- Block::Block(Device *dev)
--    : DeviceInterface(dev),
--    m_connection(QDBusConnection::connectToBus(QDBusConnection::SystemBus, "Solid::Udisks2::Block::" + dev->udi()))
-+    : DeviceInterface(dev)
- {
-     m_devNum = m_device->prop("DeviceNumber").toULongLong();
-     m_devFile = QFile::decodeName(m_device->prop("Device").toByteArray());
-@@ -41,7 +40,7 @@ Block::Block(Device *dev)
-         const QString path = "/org/freedesktop/UDisks2/block_devices";
-         QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path,
-                                                            DBUS_INTERFACE_INTROSPECT, "Introspect");
--        QDBusPendingReply<QString> reply = m_connection.asyncCall(call);
-+        QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
-         reply.waitForFinished();
- 
-         if (reply.isValid()) {
-diff --git a/solid/solid/backends/udisks2/udisksblock.h b/solid/solid/backends/udisks2/udisksblock.h
-index 65ef2b8..19cb70a 100644
---- a/solid/solid/backends/udisks2/udisksblock.h
-+++ b/solid/solid/backends/udisks2/udisksblock.h
-@@ -45,7 +45,6 @@ public:
-     virtual int deviceMinor() const;
-     virtual int deviceMajor() const;
- private:
--    QDBusConnection m_connection;
-     dev_t m_devNum;
-     QString m_devFile;
- };
-diff --git a/solid/solid/backends/udisks2/udisksdevice.cpp b/solid/solid/backends/udisks2/udisksdevice.cpp
-index 3508d57..2a4313a 100644
---- a/solid/solid/backends/udisks2/udisksdevice.cpp
-+++ b/solid/solid/backends/udisks2/udisksdevice.cpp
-@@ -20,6 +20,7 @@
- */
- 
- #include "udisksdevice.h"
-+#include "udisksdevicebackend.h"
- #include "udisksblock.h"
- #include "udisksdeviceinterface.h"
- #include "udisksstoragevolume.h"
-@@ -91,29 +92,72 @@ static QString formatByteSize(double size)
- 
- Device::Device(const QString &udi)
-     : Solid::Ifaces::Device()
--    , m_udi(udi)
--    , m_connection(QDBusConnection::connectToBus(QDBusConnection::SystemBus, "Solid::Udisks2::Device::" + udi))
-+    , m_backend(DeviceBackend::backendForUDI(udi))
- {
--    m_device = new QDBusInterface(UD2_DBUS_SERVICE, m_udi,
--                                  QString(), // no interface, we aggregate them
--                                  m_connection);
-+    if (m_backend) {
-+        connect(m_backend, SIGNAL(changed()), this, SIGNAL(changed()));
-+        connect(m_backend, SIGNAL(propertyChanged(QMap<QString,int>)), this, SIGNAL(propertyChanged(QMap<QString,int>)));
-+    } else {
-+        qDebug() << "Created invalid Device for udi" << udi;
-+    }
-+}
-+
-+Device::~Device()
-+{
-+}
-+
-+QString Device::udi() const
-+{
-+    if (m_backend) {
-+        return m_backend->udi();
-+    }
-+
-+    return QString();
-+}
- 
--    if (m_device->isValid()) {
--        m_connection.connect(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
--                                             SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
-+QVariant Device::prop(const QString &key) const
-+{
-+    if (m_backend) {
-+        return m_backend->prop(key);
-+    }
- 
--        m_connection.connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesAdded",
--                                             this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
--        m_connection.connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesRemoved",
--                                             this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
-+    return QVariant();
-+}
- 
--        initInterfaces();
-+bool Device::propertyExists(const QString &key) const
-+{
-+    if (m_backend) {
-+        return m_backend->propertyExists(key);
-     }
-+
-+    return false;
- }
- 
--Device::~Device()
-+QVariantMap Device::allProperties() const
- {
--    delete m_device;
-+    if (m_backend) {
-+        return m_backend->allProperties();
-+    }
-+
-+    return QVariantMap();
-+}
-+
-+bool Device::hasInterface(const QString &name) const
-+{
-+    if (m_backend) {
-+        return m_backend->interfaces().contains(name);
-+    }
-+
-+    return false;
-+}
-+
-+QStringList Device::interfaces() const
-+{
-+    if (m_backend) {
-+        return m_backend->interfaces();
-+    }
-+
-+    return QStringList();
- }
- 
- QObject* Device::createDeviceInterface(const Solid::DeviceInterface::Type& type)
-@@ -637,11 +681,6 @@ QString Device::vendor() const
-     return prop("Vendor").toString();
- }
- 
--QString Device::udi() const
--{
--    return m_udi;
--}
--
- QString Device::parentUdi() const
- {
-     QString parent;
-@@ -656,139 +695,6 @@ QString Device::parentUdi() const
-     return parent;
- }
- 
--void Device::checkCache(const QString &key) const
--{
--    if (m_cache.isEmpty()) // recreate the cache
--        allProperties();
--
--    if (m_cache.contains(key))
--        return;
--
--    QVariant reply = m_device->property(key.toUtf8());
--
--    if (reply.isValid()) {
--        m_cache.insert(key, reply);
--    } else {
--        //qDebug() << "got invalid reply for cache:" << key;
--    }
--}
--
--QString Device::introspect() const
--{
--    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi,
--                                                       DBUS_INTERFACE_INTROSPECT, "Introspect");
--    QDBusPendingReply<QString> reply = m_connection.asyncCall(call);
--    reply.waitForFinished();
--
--    if (reply.isValid())
--        return reply.value();
--    else {
--        return QString();
--    }
--}
--
--QVariant Device::prop(const QString &key) const
--{
--    checkCache(key);
--    return m_cache.value(key);
--}
--
--bool Device::propertyExists(const QString &key) const
--{
--    checkCache(key);
--    return m_cache.contains(key);
--}
--
--QVariantMap Device::allProperties() const
--{
--    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
--
--    Q_FOREACH (const QString & iface, m_interfaces) {
--        if (iface.startsWith("org.freedesktop.DBus"))
--            continue;
--        call.setArguments(QVariantList() << iface);
--        QDBusPendingReply<QVariantMap> reply = m_connection.asyncCall(call);
--        reply.waitForFinished();
--
--        if (reply.isValid())
--            m_cache.unite(reply.value());
--        else
--            qWarning() << "Error getting props:" << reply.error().name() << reply.error().message();
--        //qDebug() << "After iface" << iface << ", cache now contains" << m_cache.size() << "items";
--    }
--
--    return m_cache;
--}
--
--bool Device::hasInterface(const QString &name) const
--{
--    return m_interfaces.contains(name);
--}
--
--QStringList Device::interfaces() const
--{
--    return m_interfaces;
--}
--
--void Device::initInterfaces()
--{
--    m_interfaces.clear();
--    const QString xmlData = introspect();
--    QDomDocument dom;
--    dom.setContent(xmlData);
--    QDomNodeList ifaceNodeList = dom.elementsByTagName("interface");
--    for (int i = 0; i < ifaceNodeList.count(); i++) {
--        QDomElement ifaceElem = ifaceNodeList.item(i).toElement();
--        if (!ifaceElem.isNull())
--            m_interfaces.append(ifaceElem.attribute("name"));
--    }
--    //qDebug() << "Device" << m_udi << "has interfaces:" << m_interfaces;
--}
--
--void Device::slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
--{
--    //Q_UNUSED(ifaceName);
--
--    qDebug() << m_udi << "'s interface" << ifaceName << "changed props:";
--
--    QMap<QString, int> changeMap;
--
--    Q_FOREACH(const QString & key, invalidatedProps) {
--        m_cache.remove(key);
--        changeMap.insert(key, Solid::GenericInterface::PropertyRemoved);
--        qDebug() << "\t invalidated:" << key;
--    }
--
--    QMapIterator<QString, QVariant> i(changedProps);
--    while (i.hasNext()) {
--        i.next();
--        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);
--    Q_EMIT changed();
--}
--
--void Device::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
--{
--    if (object_path.path() == m_udi) {
--        m_interfaces.append(interfaces_and_properties.keys());
--    }
--}
--
--void Device::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
--{
--    if (object_path.path() == m_udi) {
--        Q_FOREACH(const QString & iface, interfaces) {
--            m_interfaces.removeAll(iface);
--        }
--    }
--}
--
--
- QString Device::errorToString(const QString & error) const
- {
-     if (error == UD2_ERROR_UNAUTHORIZED || error == UD2_ERROR_NOT_AUTHORIZED)
-diff --git a/solid/solid/backends/udisks2/udisksdevice.h b/solid/solid/backends/udisks2/udisksdevice.h
-index ee6bc1b..6038178 100644
---- a/solid/solid/backends/udisks2/udisksdevice.h
-+++ b/solid/solid/backends/udisks2/udisksdevice.h
-@@ -39,6 +39,8 @@ namespace Backends
- namespace UDisks2
- {
- 
-+class DeviceBackend;
-+
- class Device: public Solid::Ifaces::Device
- {
-     Q_OBJECT
-@@ -87,25 +89,12 @@ Q_SIGNALS:
-     void changed();
-     void propertyChanged(const QMap<QString,int> &changes);
- 
--private Q_SLOTS:
--    void slotPropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
--    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
--    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
-+protected:
-+    QPointer<DeviceBackend> m_backend;
- 
- private:
-     QString storageDescription() const;
-     QString volumeDescription() const;
--    mutable QDBusInterface *m_device;
--    QString m_udi;
--    mutable QVariantMap m_cache;
--
--    void initInterfaces();
--    QStringList m_interfaces;
--
--    void checkCache(const QString &key) const;
--    QString introspect() const;
--
--    QDBusConnection m_connection;
- };
- 
- }
-diff --git a/solid/solid/backends/udisks2/udisksdevicebackend.cpp b/solid/solid/backends/udisks2/udisksdevicebackend.cpp
-new file mode 100644
-index 0000000..8131cb5
---- /dev/null
-+++ b/solid/solid/backends/udisks2/udisksdevicebackend.cpp
-@@ -0,0 +1,239 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti at kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl at redhat.com>
-+    Copyright 2012 Dan Vrátil <dvratil at redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksdevicebackend.h"
-+
-+#include <QtDBus/QDBusConnection>
-+#include <QtDBus/QDBusInterface>
-+#include <QtXml/QDomDocument>
-+
-+#include "solid/deviceinterface.h"
-+#include "solid/genericinterface.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+/* Static cache for DeviceBackends for all UDIs */
-+QMap<QString /* UDI */, DeviceBackend*> DeviceBackend::s_backends;
-+
-+DeviceBackend* DeviceBackend::backendForUDI(const QString& udi)
-+{
-+    DeviceBackend *backend = 0;
-+    if (udi.isEmpty()) {
-+        return backend;
-+    }
-+
-+    if (s_backends.contains(udi)) {
-+        backend = s_backends.value(udi);
-+    } else {
-+        backend = new DeviceBackend(udi);
-+        s_backends.insert(udi, backend);
-+    }
-+
-+    return backend;
-+}
-+
-+void DeviceBackend::destroyBackend(const QString& udi)
-+{
-+    if (s_backends.contains(udi)) {
-+        DeviceBackend *backend = s_backends.value(udi);
-+        s_backends.remove(udi);
-+        delete backend;
-+    }
-+}
-+
-+DeviceBackend::DeviceBackend(const QString& udi)
-+    : m_udi(udi)
-+{
-+    qDebug() << "Creating backend for device" << m_udi;
-+    m_device = new QDBusInterface(UD2_DBUS_SERVICE, m_udi,
-+                                  QString(), // no interface, we aggregate them
-+                                  QDBusConnection::systemBus(), this);
-+
-+    if (m_device->isValid()) {
-+        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-+                                            SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
-+        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesAdded",
-+                                            this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
-+        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesRemoved",
-+                                            this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
-+
-+        initInterfaces();
-+    }
-+}
-+
-+DeviceBackend::~DeviceBackend()
-+{
-+    qDebug() << "Destroying backend for device" << m_udi;
-+}
-+
-+void DeviceBackend::initInterfaces()
-+{
-+    m_interfaces.clear();
-+
-+    const QString xmlData = introspect();
-+    if (xmlData.isEmpty()) {
-+        qDebug() << m_udi << "has no interfaces!";
-+        return;
-+    }
-+
-+    QDomDocument dom;
-+    dom.setContent(xmlData);
-+
-+    QDomNodeList ifaceNodeList = dom.elementsByTagName("interface");
-+    for (int i = 0; i < ifaceNodeList.count(); i++) {
-+        QDomElement ifaceElem = ifaceNodeList.item(i).toElement();
-+        /* Accept only org.freedesktop.UDisks2.* interfaces so that when the device is unplugged,
-+         * m_interfaces goes empty and we can easily verify that the device is gone. */
-+        if (!ifaceElem.isNull() && ifaceElem.attribute("name").startsWith(UD2_DBUS_SERVICE)) {
-+            m_interfaces.append(ifaceElem.attribute("name"));
-+        }
-+    }
-+
-+    qDebug() << m_udi << "has interfaces:" << m_interfaces;
-+}
-+
-+QStringList DeviceBackend::interfaces() const
-+{
-+    return m_interfaces;
-+}
-+
-+const QString& DeviceBackend::udi() const
-+{
-+    return m_udi;
-+}
-+
-+QVariant DeviceBackend::prop(const QString& key) const
-+{
-+    checkCache(key);
-+    return m_propertyCache.value(key);
-+}
-+
-+bool DeviceBackend::propertyExists(const QString& key) const
-+{
-+    checkCache(key);
-+    /* checkCache() will put an invalid QVariant in cache when the property
-+     * does not exist, so check for validity, not for an actual presence. */
-+    return m_propertyCache.value(key).isValid();
-+}
-+
-+QVariantMap DeviceBackend::allProperties() const
-+{
-+    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
-+
-+    Q_FOREACH (const QString & iface, m_interfaces) {
-+        call.setArguments(QVariantList() << iface);
-+        QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().call(call);
-+
-+        if (reply.isValid()) {
-+            m_propertyCache.unite(reply.value());
-+        } else {
-+            qWarning() << "Error getting props:" << reply.error().name() << reply.error().message();
-+        }
-+        //qDebug() << "After iface" << iface << ", cache now contains" << m_cache.size() << "items";
-+    }
-+
-+    return m_propertyCache;
-+}
-+
-+QString DeviceBackend::introspect() const
-+{
-+    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi,
-+                                                    DBUS_INTERFACE_INTROSPECT, "Introspect");
-+    QDBusPendingReply<QString> reply = QDBusConnection::systemBus().call(call);
-+
-+    if (reply.isValid())
-+        return reply.value();
-+    else {
-+        return QString();
-+    }
-+}
-+
-+void DeviceBackend::checkCache(const QString& key) const
-+{
-+    if (m_propertyCache.isEmpty()) { // recreate the cache
-+        allProperties();
-+    }
-+
-+    if (m_propertyCache.contains(key)) {
-+        return;
-+    }
-+
-+    QVariant reply = m_device->property(key.toUtf8());
-+    m_propertyCache.insert(key, reply);
-+
-+    if (!reply.isValid()) {
-+        /* Store the item in the cache anyway so next time we don't have to
-+         * do the DBus call to find out it does not exist but just check whether
-+         * prop(key).isValid() */
-+        qDebug() << m_udi << ": property" << key << "does not exist";
-+    }
-+}
-+
-+void DeviceBackend::slotPropertiesChanged(const QString& ifaceName, const QVariantMap& changedProps, const QStringList& invalidatedProps)
-+{
-+    qDebug() << m_udi << "'s interface" << ifaceName << "changed props:";
-+
-+    QMap<QString, int> changeMap;
-+
-+    Q_FOREACH(const QString & key, invalidatedProps) {
-+        m_propertyCache.remove(key);
-+        changeMap.insert(key, Solid::GenericInterface::PropertyRemoved);
-+        qDebug() << "\t invalidated:" << key;
-+    }
-+
-+    QMapIterator<QString, QVariant> i(changedProps);
-+    while (i.hasNext()) {
-+        i.next();
-+        const QString key = i.key();
-+        m_propertyCache.insert(key, i.value());  // replace the value
-+        changeMap.insert(key, Solid::GenericInterface::PropertyModified);
-+        qDebug() << "\t modified:" << key << ":" << m_propertyCache.value(key);
-+    }
-+
-+    Q_EMIT propertyChanged(changeMap);
-+    Q_EMIT changed();
-+}
-+
-+void DeviceBackend::slotInterfacesAdded(const QDBusObjectPath& object_path, const QVariantMapMap& interfaces_and_properties)
-+{
-+    if (object_path.path() != m_udi) {
-+        return;
-+    }
-+
-+    Q_FOREACH(const QString & iface, interfaces_and_properties.keys()) {
-+        /* Don't store generic DBus interfaces */
-+        if (iface.startsWith(UD2_DBUS_SERVICE)) {
-+            m_interfaces.append(interfaces_and_properties.keys());
-+        }
-+    }
-+}
-+
-+void DeviceBackend::slotInterfacesRemoved(const QDBusObjectPath& object_path, const QStringList& interfaces)
-+{
-+    if (object_path.path() != m_udi) {
-+        return;
-+    }
-+
-+    Q_FOREACH(const QString & iface, interfaces) {
-+        m_interfaces.removeAll(iface);
-+    }
-+}
-diff --git a/solid/solid/backends/udisks2/udisksdevicebackend.h b/solid/solid/backends/udisks2/udisksdevicebackend.h
-new file mode 100644
-index 0000000..829fa41
---- /dev/null
-+++ b/solid/solid/backends/udisks2/udisksdevicebackend.h
-@@ -0,0 +1,84 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti at kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl at redhat.com>
-+    Copyright 2012 Dan Vrátil <dvratil at redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKSDEVICEBACKEND_H
-+#define UDISKSDEVICEBACKEND_H
-+
-+#include <QObject>
-+#include <QtDBus/QDBusConnection>
-+#include <QtDBus/QDBusObjectPath>
-+#include <QtDBus/QDBusInterface>
-+#include <QStringList>
-+
-+#include "udisks2.h"
-+
-+namespace Solid {
-+namespace Backends {
-+namespace UDisks2 {
-+
-+class DeviceBackend: public QObject {
-+
-+    Q_OBJECT
-+
-+  public:
-+    static DeviceBackend* backendForUDI(const QString &udi);
-+    static void destroyBackend(const QString &udi);
-+
-+    DeviceBackend(const QString &udi);
-+    ~DeviceBackend();
-+
-+    QVariant prop(const QString &key) const;
-+    bool propertyExists(const QString &key) const;
-+    QVariantMap allProperties() const;
-+
-+    QStringList interfaces() const;
-+    const QString & udi() const;
-+
-+  Q_SIGNALS:
-+    void propertyChanged(const QMap<QString, int> &changeMap);
-+    void changed();
-+
-+  private Q_SLOTS:
-+    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
-+    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
-+    void slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps);
-+
-+  private:
-+    void initInterfaces();
-+    QString introspect() const;
-+    void checkCache(const QString &key) const;
-+
-+    QDBusInterface *m_device;
-+
-+    mutable QVariantMap m_propertyCache;
-+    QStringList m_interfaces;
-+    QString m_udi;
-+
-+    static QMap<QString, DeviceBackend*> s_backends;
-+
-+};
-+
-+} /* namespace UDisks2 */
-+} /* namespace Backends */
-+} /* namespace Solid */
-+
-+#endif /* UDISKSDEVICEBACKEND_H */
-\ No newline at end of file
-diff --git a/solid/solid/backends/udisks2/udisksmanager.cpp b/solid/solid/backends/udisks2/udisksmanager.cpp
-index e781abb..ecb9add 100644
---- a/solid/solid/backends/udisks2/udisksmanager.cpp
-+++ b/solid/solid/backends/udisks2/udisksmanager.cpp
-@@ -19,6 +19,7 @@
- */
- 
- #include "udisksmanager.h"
-+#include "udisksdevicebackend.h"
- 
- #include <QtCore/QCoreApplication>
- #include <QtCore/QDebug>
-@@ -32,10 +33,9 @@ using namespace Solid::Backends::Shared;
- 
- Manager::Manager(QObject *parent)
-     : Solid::Ifaces::DeviceManager(parent),
--      m_connection(QDBusConnection::connectToBus(QDBusConnection::SystemBus, "Solid::Udisks2")),
-       m_manager(UD2_DBUS_SERVICE,
-                 UD2_DBUS_PATH,
--                m_connection)
-+                QDBusConnection::systemBus())
- {
-     m_supportedInterfaces
-             << Solid::DeviceInterface::GenericInterface
-@@ -60,9 +60,9 @@ Manager::Manager(QObject *parent)
-                                                               "org.freedesktop.DBus",
-                                                               "ListActivatableNames");
- 
--        QDBusReply<QStringList> reply = m_connection.call(message);
-+        QDBusReply<QStringList> reply = QDBusConnection::systemBus().call(message);
-         if (reply.isValid() && reply.value().contains(UD2_DBUS_SERVICE)) {
--            m_connection.interface()->startService(UD2_DBUS_SERVICE);
-+            QDBusConnection::systemBus().interface()->startService(UD2_DBUS_SERVICE);
-             serviceFound = true;
-         }
-     }
-@@ -77,6 +77,10 @@ Manager::Manager(QObject *parent)
- 
- Manager::~Manager()
- {
-+    while (!m_deviceCache.isEmpty()) {
-+        QString udi = m_deviceCache.takeFirst();
-+        DeviceBackend::destroyBackend(udi);
-+    }
- }
- 
- QObject* Manager::createDevice(const QString& udi)
-@@ -128,7 +132,11 @@ QStringList Manager::devicesFromQuery(const QString& parentUdi, Solid::DeviceInt
- 
- QStringList Manager::allDevices()
- {
--    m_deviceCache.clear();
-+    /* Clear the cache, destroy all backends */
-+    while (!m_deviceCache.isEmpty()) {
-+        QString udi= m_deviceCache.takeFirst();
-+        DeviceBackend::destroyBackend(udi);
-+    }
- 
-     introspect("/org/freedesktop/UDisks2/block_devices", true /*checkOptical*/);
-     introspect("/org/freedesktop/UDisks2/drives");
-@@ -140,8 +148,7 @@ 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();
-+    QDBusPendingReply<QString> reply = QDBusConnection::systemBus().call(call);
- 
-     if (reply.isValid()) {
-         QDomDocument dom;
-@@ -155,7 +162,7 @@ void Manager::introspect(const QString & path, bool checkOptical)
-                 if (checkOptical) {
-                     Device device(udi);
-                     if (device.mightBeOpticalDisc()) {
--                        m_connection.connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-+                        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-                                                              SLOT(slotMediaChanged(QDBusMessage)));
-                         if (!device.isOpticalDisc())  // skip empty CD disc
-                             continue;
-@@ -184,6 +191,11 @@ void Manager::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVar
- {
-     const QString udi = object_path.path();
- 
-+    /* Ignore jobs */
-+    if (udi.startsWith(UD2_DBUS_PATH_JOBS)) {
-+        return;
-+    }
-+
-     qDebug() << udi << "has new interfaces:" << interfaces_and_properties.keys();
- 
-     // new device, we don't know it yet
-@@ -197,6 +209,11 @@ void Manager::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QS
- {
-     const QString udi = object_path.path();
- 
-+    /* Ignore jobs */
-+    if (udi.startsWith(UD2_DBUS_PATH_JOBS)) {
-+        return;
-+    }
-+
-     qDebug() << udi << "lost interfaces:" << interfaces;
- 
-     Device device(udi);
-@@ -204,6 +221,7 @@ void Manager::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QS
-     if (!udi.isEmpty() && (interfaces.isEmpty() || device.interfaces().isEmpty() || device.interfaces().contains(UD2_DBUS_INTERFACE_FILESYSTEM))) {
-         Q_EMIT deviceRemoved(udi);
-         m_deviceCache.removeAll(udi);
-+        DeviceBackend::destroyBackend(udi);
-     }
- }
- 
-@@ -226,6 +244,7 @@ void Manager::slotMediaChanged(const QDBusMessage & msg)
-     if (m_deviceCache.contains(udi) && size == 0) {  // we know the optdisc, got removed
-         Q_EMIT deviceRemoved(udi);
-         m_deviceCache.removeAll(udi);
-+        DeviceBackend::destroyBackend(udi);
-     }
- }
- 
-diff --git a/solid/solid/backends/udisks2/udisksmanager.h b/solid/solid/backends/udisks2/udisksmanager.h
-index bf74703..fb929ce 100644
---- a/solid/solid/backends/udisks2/udisksmanager.h
-+++ b/solid/solid/backends/udisks2/udisksmanager.h
-@@ -60,7 +60,6 @@ private:
-     const QStringList &deviceCache();
-     void introspect(const QString & path, bool checkOptical = false);
-     QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
--    QDBusConnection m_connection;
-     org::freedesktop::DBus::ObjectManager m_manager;
-     QStringList m_deviceCache;
- };
-diff --git a/solid/solid/backends/udisks2/udisksopticaldrive.cpp b/solid/solid/backends/udisks2/udisksopticaldrive.cpp
-index 8ad3df0..4df18b1 100644
---- a/solid/solid/backends/udisks2/udisksopticaldrive.cpp
-+++ b/solid/solid/backends/udisks2/udisksopticaldrive.cpp
-@@ -38,7 +38,11 @@
- using namespace Solid::Backends::UDisks2;
- 
- OpticalDrive::OpticalDrive(Device *device)
--    : StorageDrive(device), m_ejectInProgress(false), m_readSpeed(0), m_writeSpeed(0), m_speedsInit(false)
-+    : StorageDrive(device)
-+    , m_ejectInProgress(false)
-+    , m_readSpeed(0)
-+    , m_writeSpeed(0)
-+    , m_speedsInit(false)
- {
-     m_device->registerAction("eject", this,
-                              SLOT(slotEjectRequested()),




More information about the arch-commits mailing list