[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