[telepathy-qt4/master] ClientRegistrar: Make AbstractClientHandler::handleChannels async.

Andre Moreira Magalhaes (andrunko) andre.magalhaes at collabora.co.uk
Tue May 19 06:49:17 PDT 2009


---
 TelepathyQt4/abstract-client.h           |    5 ++++-
 TelepathyQt4/client-registrar-internal.h |    7 +++++--
 TelepathyQt4/client-registrar.cpp        |   18 ++++++++++++------
 3 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/TelepathyQt4/abstract-client.h b/TelepathyQt4/abstract-client.h
index f8627e9..b26e66d 100644
--- a/TelepathyQt4/abstract-client.h
+++ b/TelepathyQt4/abstract-client.h
@@ -34,6 +34,8 @@
 namespace Tp
 {
 
+class PendingClientOperation;
+
 class AbstractClient : public QObject, public RefCounted
 {
     Q_OBJECT
@@ -61,7 +63,8 @@ public:
     virtual bool bypassApproval() const = 0;
     virtual ObjectPathList handledChannels() const = 0;
 
-    virtual void handleChannels(const QDBusObjectPath &account,
+    virtual void handleChannels(PendingClientOperation *operation,
+            const QDBusObjectPath &account,
             const QDBusObjectPath &connection,
             const ChannelDetailsList &channels,
             const ObjectPathList &requestsSatisfied,
diff --git a/TelepathyQt4/client-registrar-internal.h b/TelepathyQt4/client-registrar-internal.h
index 3355aa6..470193d 100644
--- a/TelepathyQt4/client-registrar-internal.h
+++ b/TelepathyQt4/client-registrar-internal.h
@@ -82,7 +82,8 @@ class ClientHandlerAdaptor : public QDBusAbstractAdaptor
     Q_PROPERTY(Tp::ObjectPathList HandledChannels READ HandledChannels)
 
 public:
-    ClientHandlerAdaptor(AbstractClientHandler *client);
+    ClientHandlerAdaptor(const QDBusConnection &bus,
+            AbstractClientHandler *client);
     virtual ~ClientHandlerAdaptor();
 
 public: // Properties
@@ -107,9 +108,11 @@ public Q_SLOTS: // Methods
             const Tp::ChannelDetailsList &channels,
             const Tp::ObjectPathList &requestsSatisfied,
             qulonglong userActionTime,
-            const QVariantMap &handlerInfo);
+            const QVariantMap &handlerInfo,
+            const QDBusMessage &message);
 
 private:
+    QDBusConnection mBus;
     AbstractClientHandler *mClient;
 };
 
diff --git a/TelepathyQt4/client-registrar.cpp b/TelepathyQt4/client-registrar.cpp
index 9afbb3f..4023b86 100644
--- a/TelepathyQt4/client-registrar.cpp
+++ b/TelepathyQt4/client-registrar.cpp
@@ -27,6 +27,8 @@
 
 #include "TelepathyQt4/debug-internal.h"
 
+#include <TelepathyQt4/PendingClientOperation>
+
 namespace Tp
 {
 
@@ -41,11 +43,12 @@ ClientAdaptor::~ClientAdaptor()
 {
 }
 
-ClientHandlerAdaptor::ClientHandlerAdaptor(AbstractClientHandler *client)
+ClientHandlerAdaptor::ClientHandlerAdaptor(const QDBusConnection &bus,
+        AbstractClientHandler *client)
     : QDBusAbstractAdaptor(client),
+      mBus(bus),
       mClient(client)
 {
-    setAutoRelaySignals(true);
 }
 
 ClientHandlerAdaptor::~ClientHandlerAdaptor()
@@ -57,9 +60,13 @@ void ClientHandlerAdaptor::HandleChannels(const QDBusObjectPath &account,
         const Tp::ChannelDetailsList &channels,
         const Tp::ObjectPathList &requestsSatisfied,
         qulonglong userActionTime,
-        const QVariantMap &handlerInfo)
+        const QVariantMap &handlerInfo,
+        const QDBusMessage &message)
 {
-    mClient->handleChannels(account, connection, channels,
+    PendingClientOperation *operation = new PendingClientOperation(
+            mBus, message, this);
+
+    mClient->handleChannels(operation, account, connection, channels,
             requestsSatisfied, userActionTime, handlerInfo);
 }
 
@@ -88,7 +95,6 @@ void ClientHandlerRequestsAdaptor::RemoveRequest(
     mClient->removeRequest(request, error, message);
 }
 
-
 struct ClientRegistrar::Private
 {
     Private(const QDBusConnection &bus, const QString &clientName)
@@ -177,7 +183,7 @@ bool ClientRegistrar::registerClient(const AbstractClientPtr &client,
         qobject_cast<AbstractClientHandler*>(object);
     if (handler) {
         // export o.f.T.Client.Handler
-        clientHandlerAdaptor = new ClientHandlerAdaptor(handler);
+        clientHandlerAdaptor = new ClientHandlerAdaptor(mPriv->bus, handler);
         interfaces.append(
                 QLatin1String("org.freedesktop.Telepathy.Client.Handler"));
         if (handler->isListeningRequests()) {
-- 
1.5.6.5




More information about the telepathy-commits mailing list