[telepathy-qt4/master] ClientRegistrar: Added org.freedesktop.Telepath.Client.Interface.Requests interface support.

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


---
 TelepathyQt4/abstract-client.cpp         |   26 +++++++++++++++++++++-
 TelepathyQt4/abstract-client.h           |    9 ++++++-
 TelepathyQt4/client-registrar-internal.h |   32 +++++++++++++++++++++++++++
 TelepathyQt4/client-registrar.cpp        |   35 ++++++++++++++++++++++++++++++
 4 files changed, 100 insertions(+), 2 deletions(-)

diff --git a/TelepathyQt4/abstract-client.cpp b/TelepathyQt4/abstract-client.cpp
index cdec8a2..72b9143 100644
--- a/TelepathyQt4/abstract-client.cpp
+++ b/TelepathyQt4/abstract-client.cpp
@@ -40,12 +40,15 @@ AbstractClient::~AbstractClient()
 struct AbstractClientHandler::Private
 {
     ChannelClassList channelFilter;
+    bool listenRequests;
 };
 
-AbstractClientHandler::AbstractClientHandler(const ChannelClassList &channelFilter)
+AbstractClientHandler::AbstractClientHandler(const ChannelClassList &channelFilter,
+        bool listenRequests)
     : mPriv(new Private)
 {
     mPriv->channelFilter = channelFilter;
+    mPriv->listenRequests = listenRequests;
 }
 
 AbstractClientHandler::~AbstractClientHandler()
@@ -58,4 +61,25 @@ ChannelClassList AbstractClientHandler::channelFilter() const
     return mPriv->channelFilter;
 }
 
+bool AbstractClientHandler::isListeningRequests() const
+{
+    return mPriv->listenRequests;
+}
+
+void AbstractClientHandler::addRequest(
+        const QDBusObjectPath &requestObjectPath,
+        const QVariantMap &requestProperties)
+{
+    // do nothing, subclasses that want to listen requests should reimplement
+    // this method
+}
+
+void AbstractClientHandler::removeRequest(
+        const QDBusObjectPath &requestObjectPath,
+        const QString &error, const QString &message)
+{
+    // do nothing, subclasses that want to listen requests should reimplement
+    // this method
+}
+
 } // Tp
diff --git a/TelepathyQt4/abstract-client.h b/TelepathyQt4/abstract-client.h
index 3c0744b..f8627e9 100644
--- a/TelepathyQt4/abstract-client.h
+++ b/TelepathyQt4/abstract-client.h
@@ -68,8 +68,15 @@ public:
             qulonglong userActionTime,
             const QVariantMap &handlerInfo) = 0;
 
+    bool isListeningRequests() const;
+    virtual void addRequest(const QDBusObjectPath &requestObjectPath,
+            const QVariantMap &requestProperties);
+    virtual void removeRequest(const QDBusObjectPath &requestObjectPath,
+            const QString &error, const QString &message);
+
 protected:
-    AbstractClientHandler(const ChannelClassList &channelFilter);
+    AbstractClientHandler(const ChannelClassList &channelFilter,
+            bool listenRequests = false);
 
 private:
     struct Private;
diff --git a/TelepathyQt4/client-registrar-internal.h b/TelepathyQt4/client-registrar-internal.h
index c51e048..3355aa6 100644
--- a/TelepathyQt4/client-registrar-internal.h
+++ b/TelepathyQt4/client-registrar-internal.h
@@ -113,6 +113,38 @@ private:
     AbstractClientHandler *mClient;
 };
 
+class ClientHandlerRequestsAdaptor : public QDBusAbstractAdaptor
+{
+    Q_OBJECT
+    Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Client.Interface.Requests")
+    Q_CLASSINFO("D-Bus Introspection", ""
+"  <interface name=\"org.freedesktop.Telepathy.Client.Interface.Requests\" >\n"
+"    <method name=\"AddRequest\" >\n"
+"      <arg name=\"Request\" type=\"o\" direction=\"in\" />\n"
+"      <arg name=\"Properties\" type=\"a{sv}\" direction=\"in\" />\n"
+"    </method>\n"
+"    <method name=\"RemoveRequest\" >\n"
+"      <arg name=\"Request\" type=\"o\" direction=\"in\" />\n"
+"      <arg name=\"Error\" type=\"s\" direction=\"in\" />\n"
+"      <arg name=\"Message\" type=\"s\" direction=\"in\" />\n"
+"    </method>\n"
+"  </interface>\n"
+        "")
+
+public:
+    ClientHandlerRequestsAdaptor(AbstractClientHandler *client);
+    virtual ~ClientHandlerRequestsAdaptor();
+
+public Q_SLOTS: // Methods
+    void AddRequest(const QDBusObjectPath &request,
+            const QVariantMap &properties);
+    void RemoveRequest(const QDBusObjectPath &request,
+            const QString &error, const QString &message);
+
+private:
+    AbstractClientHandler *mClient;
+};
+
 } // Tp
 
 #endif
diff --git a/TelepathyQt4/client-registrar.cpp b/TelepathyQt4/client-registrar.cpp
index cfc83a3..9afbb3f 100644
--- a/TelepathyQt4/client-registrar.cpp
+++ b/TelepathyQt4/client-registrar.cpp
@@ -63,6 +63,31 @@ void ClientHandlerAdaptor::HandleChannels(const QDBusObjectPath &account,
             requestsSatisfied, userActionTime, handlerInfo);
 }
 
+ClientHandlerRequestsAdaptor::ClientHandlerRequestsAdaptor(
+        AbstractClientHandler *client)
+    : QDBusAbstractAdaptor(client),
+      mClient(client)
+{
+}
+
+ClientHandlerRequestsAdaptor::~ClientHandlerRequestsAdaptor()
+{
+}
+
+void ClientHandlerRequestsAdaptor::AddRequest(
+        const QDBusObjectPath &request,
+        const QVariantMap &properties)
+{
+    mClient->addRequest(request, properties);
+}
+
+void ClientHandlerRequestsAdaptor::RemoveRequest(
+        const QDBusObjectPath &request,
+        const QString &error, const QString &message)
+{
+    mClient->removeRequest(request, error, message);
+}
+
 
 struct ClientRegistrar::Private
 {
@@ -147,6 +172,7 @@ bool ClientRegistrar::registerClient(const AbstractClientPtr &client,
     QStringList interfaces;
 
     ClientHandlerAdaptor *clientHandlerAdaptor = 0;
+    ClientHandlerRequestsAdaptor *clientHandlerRequestsAdaptor = 0;
     AbstractClientHandler *handler =
         qobject_cast<AbstractClientHandler*>(object);
     if (handler) {
@@ -154,6 +180,14 @@ bool ClientRegistrar::registerClient(const AbstractClientPtr &client,
         clientHandlerAdaptor = new ClientHandlerAdaptor(handler);
         interfaces.append(
                 QLatin1String("org.freedesktop.Telepathy.Client.Handler"));
+        if (handler->isListeningRequests()) {
+            // export o.f.T.Client.Interface.Requests
+            clientHandlerRequestsAdaptor =
+                new ClientHandlerRequestsAdaptor(handler);
+            interfaces.append(
+                    QLatin1String(
+                        "org.freedesktop.Telepathy.Client.Interface.Requests"));
+        }
     }
 
     // TODO add more adaptors when they exist
@@ -176,6 +210,7 @@ bool ClientRegistrar::registerClient(const AbstractClientPtr &client,
             objectPath << "already registered";
         // cleanup
         delete clientHandlerAdaptor;
+        delete clientHandlerRequestsAdaptor;
         delete clientAdaptor;
         mPriv->bus.unregisterService(busName);
         return false;
-- 
1.5.6.5




More information about the telepathy-commits mailing list