[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/solid/solid/backends
From:       Lukáš Tinkl <lukas () kde ! org>
Date:       2010-10-28 18:42:40
Message-ID: 20101028184240.608D6AC899 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1190737 by lukas:

rework the device cache to use QMetaObject and QMetaProperty, thus avoiding the \
freezes with newer dbus versions (which was due to a bug in QtDbus)

CCBUG: 253039


 M  +1 -1      udisks/udisks.h  
 M  +8 -18     udisks/udisksdevice.cpp  
 M  +1 -2      udisks/udisksdevice.h  
 M  +8 -18     upower/upowerdevice.cpp  
 M  +1 -2      upower/upowerdevice.h  


--- trunk/KDE/kdelibs/solid/solid/backends/udisks/udisks.h #1190736:1190737
@@ -25,7 +25,7 @@
 #define UD_DBUS_SERVICE                 "org.freedesktop.UDisks"
 #define UD_DBUS_PATH                    "/org/freedesktop/UDisks"
 #define UD_DBUS_INTERFACE_DISKS         "org.freedesktop.UDisks"
-#define UD_DBUS_INTERFACE_DISKS_DEVICE  UD_DBUS_INTERFACE_DISKS ".Device"
+#define UD_DBUS_INTERFACE_DISKS_DEVICE  "org.freedesktop.UDisks.Device"
 #define UD_UDI_DISKS_PREFIX             "/org/freedesktop/UDisks"
 
 #endif // SOLID_BACKENDS_UDISKS_H
--- trunk/KDE/kdelibs/solid/solid/backends/udisks/udisksdevice.cpp #1190736:1190737
@@ -33,8 +33,9 @@
 #include <solid/device.h>
 
 #include <QtCore/QStringList>
-#include <QtDBus/QDBusReply>
 #include <QtCore/QDebug>
+#include <QtCore/QMetaObject>
+#include <QtCore/QMetaProperty>
 
 using namespace Solid::Backends::UDisks;
 
@@ -102,7 +103,7 @@
 
 UDisksDevice::~UDisksDevice()
 {
-
+    delete m_device;
 }
 
 QObject* UDisksDevice::createDeviceInterface(const Solid::DeviceInterface::Type& \
type) @@ -661,7 +662,7 @@
     if (m_cache.isEmpty()) // recreate the cache
         allProperties();
 
-    if (m_cache.contains(key) && !m_invalidKeys.contains(key))
+    if (m_cache.contains(key))
         return;
 
     QVariant reply = m_device->property(key.toUtf8());
@@ -671,8 +672,6 @@
     } else {
         m_cache[key] = QVariant();
     }
-
-    m_invalidKeys.remove(key);
 }
 
 QVariant UDisksDevice::property(const QString &key) const
@@ -689,21 +688,12 @@
 
 QMap<QString, QVariant> UDisksDevice::allProperties() const
 {
-    QDBusMessage message = QDBusMessage::createMethodCall(m_device->service(), \
m_device->path(), QLatin1String("org.freedesktop.DBus.Properties"), \
                QLatin1String("GetAll"));
-    QList<QVariant> arguments;
-    arguments << m_device->interface();
-    message.setArguments(arguments);
-    
-    QDBusMessage reply = m_device->connection().call(message);
-
-    if (reply.type() != QDBusMessage::ReplyMessage)
-    {
-        qWarning() << Q_FUNC_INFO << "error:" << reply;
-        return QVariantMap();
+    const QMetaObject* metaObject = m_device->metaObject();
+    for(int i = metaObject->propertyOffset(); i < metaObject->propertyCount(); ++i) \
{ +        QString name = QString::fromUtf8(metaObject->property(i).name());
+        m_cache.insert(name, m_device->property(name.toUtf8()));
     }
 
-    m_cache = QDBusReply<QVariantMap>(reply).value();
-
     return m_cache;
 }
 
--- trunk/KDE/kdelibs/solid/solid/backends/udisks/udisksdevice.h #1190736:1190737
@@ -68,8 +68,7 @@
     QString volumeDescription() const;
     mutable QDBusInterface *m_device;
     QString m_udi;
-    mutable QMap<QString,QVariant> m_cache;
-    mutable QSet<QString> m_invalidKeys;
+    mutable QVariantMap m_cache;
 
     void checkCache(const QString &key) const;
 };
--- trunk/KDE/kdelibs/solid/solid/backends/upower/upowerdevice.cpp #1190736:1190737
@@ -30,8 +30,9 @@
 #include <solid/device.h>
 
 #include <QtCore/QStringList>
-#include <QtDBus/QDBusReply>
 #include <QtCore/QDebug>
+#include <QtCore/QMetaObject>
+#include <QtCore/QMetaProperty>
 
 using namespace Solid::Backends::UPower;
 
@@ -40,7 +41,7 @@
                udi,
                UP_DBUS_INTERFACE_DEVICE,
                QDBusConnection::systemBus()),
-    m_udi(udi)
+    Solid::Ifaces::Device(), m_udi(udi)
 {
     if (m_device.isValid())
         connect(&m_device, SIGNAL(Changed()), this, SLOT(slotChanged()));
@@ -171,7 +172,7 @@
     if (m_cache.isEmpty()) // recreate the cache
         allProperties();
 
-    if (m_cache.contains(key) && !m_invalidKeys.contains(key))
+    if (m_cache.contains(key))
         return;
 
     QVariant reply = m_device.property(key.toUtf8());
@@ -181,8 +182,6 @@
     } else {
         m_cache[key] = QVariant();
     }
-
-    m_invalidKeys.remove(key);
 }
 
 QVariant UPowerDevice::property(const QString &key) const
@@ -199,21 +198,12 @@
 
 QMap<QString, QVariant> UPowerDevice::allProperties() const
 {
-    QDBusMessage message = QDBusMessage::createMethodCall(m_device.service(), \
m_device.path(), QLatin1String("org.freedesktop.DBus.Properties"), \
                QLatin1String("GetAll"));
-    QList<QVariant> arguments;
-    arguments << m_device.interface();
-    message.setArguments(arguments);
-
-    QDBusMessage reply = m_device.connection().call(message);
-
-    if (reply.type() != QDBusMessage::ReplyMessage)
-    {
-        qWarning() << Q_FUNC_INFO << "error:" << reply;
-        return QVariantMap();
+    const QMetaObject* metaObject = m_device.metaObject();
+    for(int i = metaObject->propertyOffset(); i < metaObject->propertyCount(); ++i) \
{ +        QString name = QString::fromUtf8(metaObject->property(i).name());
+        m_cache.insert(name, m_device.property(name.toUtf8()));
     }
 
-    m_cache = QDBusReply<QVariantMap>(reply).value();
-
     return m_cache;
 }
 
--- trunk/KDE/kdelibs/solid/solid/backends/upower/upowerdevice.h #1190736:1190737
@@ -68,8 +68,7 @@
     QString batteryTechnology() const;
     mutable QDBusInterface m_device;
     QString m_udi;
-    mutable QMap<QString,QVariant> m_cache;
-    mutable QSet<QString> m_invalidKeys;
+    mutable QVariantMap m_cache;
 
     void checkCache(const QString &key) const;
 };


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic