[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