From 6759f6c72f450b055b1b6238b88750953667e9fe Mon Sep 17 00:00:00 2001 From: "Uwe L. Korn" Date: Wed, 13 Feb 2013 12:30:30 +0100 Subject: [PATCH] Make D-Bus call in fdonotify asynchronous --- .../linux/fdonotify/FdoNotifyPlugin.cpp | 18 +++++++++++++----- .../linux/fdonotify/FdoNotifyPlugin.h | 6 +++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/infoplugins/linux/fdonotify/FdoNotifyPlugin.cpp b/src/infoplugins/linux/fdonotify/FdoNotifyPlugin.cpp index 5fe28b310..02ba868b6 100644 --- a/src/infoplugins/linux/fdonotify/FdoNotifyPlugin.cpp +++ b/src/infoplugins/linux/fdonotify/FdoNotifyPlugin.cpp @@ -46,7 +46,6 @@ #include "utils/Logger.h" #include -#include #include namespace Tomahawk @@ -167,10 +166,19 @@ FdoNotifyPlugin::nowPlaying( const QVariant &input ) arguments << qint32( -1 ); //expire_timeout message.setArguments( arguments ); - const QDBusMessage &reply = QDBusConnection::sessionBus().call( message ); - const QVariantList &list = reply.arguments(); - if ( list.count() > 0 ) - m_nowPlayingId = list.at( 0 ).toInt(); + // Handle reply in a callback, so that this a non-blocking call + QDBusConnection::sessionBus().callWithCallback( message, this, SLOT( dbusReplyReceived( QDBusMessage ) ) ); +} + +/** + * Handle the DBus reply triggered by FdoNotifyPlugin::nowPlaying + */ +void +FdoNotifyPlugin::dbusReplyReceived( const QDBusMessage &reply ) +{ + const QVariantList &list = reply.arguments(); + if ( list.count() > 0 ) + m_nowPlayingId = list.at( 0 ).toInt(); } } //ns InfoSystem diff --git a/src/infoplugins/linux/fdonotify/FdoNotifyPlugin.h b/src/infoplugins/linux/fdonotify/FdoNotifyPlugin.h index a83e2dc62..ef4603e93 100644 --- a/src/infoplugins/linux/fdonotify/FdoNotifyPlugin.h +++ b/src/infoplugins/linux/fdonotify/FdoNotifyPlugin.h @@ -23,6 +23,8 @@ #include "infoplugins/InfoPluginDllMacro.h" #include "infosystem/InfoSystem.h" +#include + namespace Tomahawk { @@ -41,7 +43,9 @@ public: protected slots: virtual void init() {} - + + virtual void dbusReplyReceived( const QDBusMessage &reply ); + virtual void getInfo( Tomahawk::InfoSystem::InfoRequestData requestData ) { Q_UNUSED( requestData );