[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