telepathy-qt: Add BaseConnection RequestsInterface

David Edmundson davidedmundson at kemper.freedesktop.org
Wed Sep 3 02:28:45 PDT 2014


Module: telepathy-qt
Branch: master
Commit: c00a4737402dd86630f117d9d5c65a12e1e55582
URL:    http://cgit.freedesktop.org/telepathy/telepathy-qt/commit/?id=c00a4737402dd86630f117d9d5c65a12e1e55582

Author: Alexandr Akulich <akulichalexander at gmail.com>
Date:   Tue Aug 19 22:55:23 2014 +0600

Add BaseConnection RequestsInterface

---

 TelepathyQt/base-connection.cpp |   54 +++++++++++++++++++++------------------
 TelepathyQt/base-connection.h   |    3 +++
 2 files changed, 32 insertions(+), 25 deletions(-)

diff --git a/TelepathyQt/base-connection.cpp b/TelepathyQt/base-connection.cpp
index 260cf36..93ea0dd 100644
--- a/TelepathyQt/base-connection.cpp
+++ b/TelepathyQt/base-connection.cpp
@@ -47,6 +47,7 @@ struct TP_QT_NO_EXPORT BaseConnection::Private {
           protocolName(protocolName),
           parameters(parameters),
           status(Tp::ConnectionStatusDisconnected),
+          requestsIface(Tp::BaseConnectionRequestsInterface::create(connection)),
           selfHandle(0),
           adaptee(new BaseConnection::Adaptee(dbusConnection, parent)) {
     }
@@ -57,6 +58,9 @@ struct TP_QT_NO_EXPORT BaseConnection::Private {
     QVariantMap parameters;
     uint status;
     QHash<QString, AbstractConnectionInterfacePtr> interfaces;
+
+    BaseConnectionRequestsInterfacePtr requestsIface;
+
     QSet<BaseChannelPtr> channels;
     CreateChannelCallback createChannelCB;
     RequestHandlesCallback requestHandlesCB;
@@ -196,6 +200,7 @@ BaseConnection::BaseConnection(const QDBusConnection &dbusConnection,
     : DBusService(dbusConnection),
       mPriv(new Private(this, dbusConnection, cmName, protocolName, parameters))
 {
+    plugInterface(mPriv->requestsIface);
 }
 
 /**
@@ -337,15 +342,10 @@ Tp::BaseChannelPtr BaseConnection::createChannel(const QString &channelType,
 
     mPriv->channels.insert(channel);
 
-    BaseConnectionRequestsInterfacePtr reqIface =
-        BaseConnectionRequestsInterfacePtr::dynamicCast(interface(TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS));
-
-    if (!reqIface.isNull())
-        //emit after return
-        QMetaObject::invokeMethod(reqIface.data(), "newChannels",
-                                  Qt::QueuedConnection,
-                                  Q_ARG(Tp::ChannelDetailsList, ChannelDetailsList() << channel->details()));
-
+    //emit after return
+    QMetaObject::invokeMethod(mPriv->requestsIface.data(), "newChannels",
+                              Qt::QueuedConnection,
+                              Q_ARG(Tp::ChannelDetailsList, ChannelDetailsList() << channel->details()));
 
     //emit after return
     QMetaObject::invokeMethod(mPriv->adaptee, "newChannel",
@@ -377,6 +377,21 @@ UIntList BaseConnection::requestHandles(uint handleType, const QStringList &iden
     return mPriv->requestHandlesCB(handleType, identifiers, error);
 }
 
+RequestableChannelClassList BaseConnection::requestableChannelClasses() const
+{
+    return mPriv->requestsIface->requestableChannelClasses;
+}
+
+void BaseConnection::setRequestableChannelClasses(const RequestableChannelClassList &requestableChannelClasses)
+{
+    if (mPriv->status == ConnectionStatusConnected) {
+        warning() << "BaseConnection::setRequestableChannelClasses() is called in connected state. Ignored.";
+        return;
+    }
+
+    mPriv->requestsIface->requestableChannelClasses = requestableChannelClasses;
+}
+
 Tp::ChannelInfoList BaseConnection::channelsInfo()
 {
     qDebug() << "BaseConnection::channelsInfo:";
@@ -427,15 +442,10 @@ void BaseConnection::addChannel(BaseChannelPtr channel)
 
     mPriv->channels.insert(channel);
 
-    BaseConnectionRequestsInterfacePtr reqIface =
-        BaseConnectionRequestsInterfacePtr::dynamicCast(interface(TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS));
-
-    if (!reqIface.isNull()) {
-        //emit after return
-        QMetaObject::invokeMethod(reqIface.data(), "newChannels",
-                                  Qt::QueuedConnection,
-                                  Q_ARG(Tp::ChannelDetailsList, ChannelDetailsList() << channel->details()));
-    }
+    //emit after return
+    QMetaObject::invokeMethod(mPriv->requestsIface.data(), "newChannels",
+                              Qt::QueuedConnection,
+                              Q_ARG(Tp::ChannelDetailsList, ChannelDetailsList() << channel->details()));
 
     //emit after return
     QMetaObject::invokeMethod(mPriv->adaptee, "newChannel",
@@ -458,13 +468,7 @@ void BaseConnection::removeChannel()
     Q_ASSERT(channel);
     Q_ASSERT(mPriv->channels.contains(channel));
 
-    BaseConnectionRequestsInterfacePtr reqIface =
-        BaseConnectionRequestsInterfacePtr::dynamicCast(interface(TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS));
-
-    if (!reqIface.isNull()) {
-        reqIface->channelClosed(QDBusObjectPath(channel->objectPath()));
-    }
-
+    mPriv->requestsIface->channelClosed(QDBusObjectPath(channel->objectPath()));
     mPriv->channels.remove(channel);
 }
 
diff --git a/TelepathyQt/base-connection.h b/TelepathyQt/base-connection.h
index 8a638f9..3b3e956 100644
--- a/TelepathyQt/base-connection.h
+++ b/TelepathyQt/base-connection.h
@@ -89,6 +89,9 @@ public:
     void setRequestHandlesCallback(const RequestHandlesCallback &cb);
     UIntList requestHandles(uint handleType, const QStringList &identifiers, DBusError* error);
 
+    Tp::RequestableChannelClassList requestableChannelClasses() const;
+    void setRequestableChannelClasses(const Tp::RequestableChannelClassList &requestableChannelClasses);
+
     //typedef Callback3<uint, const QString&, const QString&, DBusError*> SetPresenceCallback;
     //void setSetPresenceCallback(const SetPresenceCallback &cb);
 



More information about the telepathy-commits mailing list