telepathy-qt: dbus-tubes: Enabling high level DBus tubes in ChannelFactory

Dario Freddi drf at kemper.freedesktop.org
Tue Jul 3 15:08:33 PDT 2012


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

Author: Dario Freddi <dario.freddi at collabora.co.uk>
Date:   Fri May 28 18:30:40 2010 +0200

dbus-tubes: Enabling high level DBus tubes in ChannelFactory

---

 TelepathyQt/channel-class-spec.cpp |   44 +++++++++++++++++++++++++++++++
 TelepathyQt/channel-class-spec.h   |    5 +++-
 TelepathyQt/channel-factory.cpp    |   50 ++++++++++++++++++++++++++++++++++++
 TelepathyQt/channel-factory.h      |   32 +++++++++++++++++++++++
 4 files changed, 130 insertions(+), 1 deletions(-)

diff --git a/TelepathyQt/channel-class-spec.cpp b/TelepathyQt/channel-class-spec.cpp
index 48c2bfc..0f72052 100644
--- a/TelepathyQt/channel-class-spec.cpp
+++ b/TelepathyQt/channel-class-spec.cpp
@@ -593,6 +593,50 @@ ChannelClassSpec ChannelClassSpec::incomingRoomStreamTube(const QString &service
     }
 }
 
+ChannelClassSpec ChannelClassSpec::outgoingDBusTube(const QString &serviceName,
+                                                    const QVariantMap &additionalProperties)
+{
+    static ChannelClassSpec spec;
+
+    if (!spec.isValid()) {
+        spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE,
+                HandleTypeContact, true);
+    }
+
+    if (!serviceName.isEmpty()) {
+        spec.setProperty(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"),
+                         serviceName);
+    }
+
+    if (additionalProperties.isEmpty()) {
+        return spec;
+    } else {
+        return ChannelClassSpec(spec, additionalProperties);
+    }
+}
+
+ChannelClassSpec ChannelClassSpec::incomingDBusTube(const QString &serviceName,
+                                                    const QVariantMap &additionalProperties)
+{
+    static ChannelClassSpec spec;
+
+    if (!spec.isValid()) {
+        spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE,
+                HandleTypeContact, false);
+    }
+
+    if (!serviceName.isEmpty()) {
+        spec.setProperty(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"),
+                         serviceName);
+    }
+
+    if (additionalProperties.isEmpty()) {
+        return spec;
+    } else {
+        return ChannelClassSpec(spec, additionalProperties);
+    }
+}
+
 ChannelClassSpec ChannelClassSpec::contactSearch(const QVariantMap &additionalProperties)
 {
     static ChannelClassSpec spec;
diff --git a/TelepathyQt/channel-class-spec.h b/TelepathyQt/channel-class-spec.h
index b15e853..e67cf27 100644
--- a/TelepathyQt/channel-class-spec.h
+++ b/TelepathyQt/channel-class-spec.h
@@ -231,7 +231,10 @@ public:
             const QVariantMap &additionalProperties = QVariantMap());
     static ChannelClassSpec incomingRoomStreamTube(const QString &service = QString(),
             const QVariantMap &additionalProperties = QVariantMap());
-    // TODO: add dbus tubes when they're implemented
+    static ChannelClassSpec outgoingDBusTube(const QString &serviceName = QString(),
+            const QVariantMap &additionalProperties = QVariantMap());
+    static ChannelClassSpec incomingDBusTube(const QString &serviceName = QString(),
+            const QVariantMap &additionalProperties = QVariantMap());
     static ChannelClassSpec contactSearch(const QVariantMap &additionalProperties = QVariantMap());
 
 private:
diff --git a/TelepathyQt/channel-factory.cpp b/TelepathyQt/channel-factory.cpp
index 204667e..049d89f 100644
--- a/TelepathyQt/channel-factory.cpp
+++ b/TelepathyQt/channel-factory.cpp
@@ -36,8 +36,10 @@
 #include <TelepathyQt/Constants>
 #include <TelepathyQt/ContactSearchChannel>
 #include <TelepathyQt/FileTransferChannel>
+#include <TelepathyQt/IncomingDBusTubeChannel>
 #include <TelepathyQt/IncomingFileTransferChannel>
 #include <TelepathyQt/IncomingStreamTubeChannel>
+#include <TelepathyQt/OutgoingDBusTubeChannel>
 #include <TelepathyQt/OutgoingFileTransferChannel>
 #include <TelepathyQt/OutgoingStreamTubeChannel>
 #include <TelepathyQt/RoomListChannel>
@@ -102,6 +104,8 @@ ChannelFactory::ChannelFactory(const QDBusConnection &bus)
     setSubclassForCalls<CallChannel>();
     setSubclassForStreamedMediaCalls<StreamedMediaChannel>();
     setSubclassForRoomLists<RoomListChannel>();
+    setSubclassForIncomingDBusTubes<IncomingDBusTubeChannel>();
+    setSubclassForOutgoingDBusTubes<OutgoingDBusTubeChannel>();
     setSubclassForIncomingFileTransfers<IncomingFileTransferChannel>();
     setSubclassForOutgoingFileTransfers<OutgoingFileTransferChannel>();
     setSubclassForIncomingStreamTubes<IncomingStreamTubeChannel>();
@@ -380,6 +384,52 @@ void ChannelFactory::setConstructorForIncomingRoomStreamTubes(const ConstructorC
     setConstructorFor(ChannelClassSpec::incomingRoomStreamTube(QString(), additionalProps), ctor);
 }
 
+Features ChannelFactory::featuresForOutgoingDBusTubes(const QVariantMap &additionalProps) const
+{
+    return featuresFor(ChannelClassSpec::outgoingDBusTube(QString(), additionalProps));
+}
+
+void ChannelFactory::addFeaturesForOutgoingDBusTubes(const Features &features,
+        const QVariantMap &additionalProps)
+{
+    addFeaturesFor(ChannelClassSpec::outgoingDBusTube(QString(), additionalProps), features);
+}
+
+ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForOutgoingDBusTubes(
+        const QVariantMap &additionalProps) const
+{
+    return constructorFor(ChannelClassSpec::outgoingDBusTube(QString(), additionalProps));
+}
+
+void ChannelFactory::setConstructorForOutgoingDBusTubes(const ConstructorConstPtr &ctor,
+        const QVariantMap &additionalProps)
+{
+    setConstructorFor(ChannelClassSpec::outgoingDBusTube(QString(), additionalProps), ctor);
+}
+
+Features ChannelFactory::featuresForIncomingDBusTubes(const QVariantMap &additionalProps) const
+{
+    return featuresFor(ChannelClassSpec::incomingDBusTube(QString(), additionalProps));
+}
+
+void ChannelFactory::addFeaturesForIncomingDBusTubes(const Features &features,
+        const QVariantMap &additionalProps)
+{
+    addFeaturesFor(ChannelClassSpec::incomingDBusTube(QString(), additionalProps), features);
+}
+
+ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForIncomingDBusTubes(
+        const QVariantMap &additionalProps) const
+{
+    return constructorFor(ChannelClassSpec::incomingDBusTube(QString(), additionalProps));
+}
+
+void ChannelFactory::setConstructorForIncomingDBusTubes(const ConstructorConstPtr &ctor,
+        const QVariantMap &additionalProps)
+{
+    setConstructorFor(ChannelClassSpec::incomingDBusTube(QString(), additionalProps), ctor);
+}
+
 Features ChannelFactory::featuresForContactSearches(const QVariantMap &additionalProps) const
 {
     return featuresFor(ChannelClassSpec::contactSearch(additionalProps));
diff --git a/TelepathyQt/channel-factory.h b/TelepathyQt/channel-factory.h
index 6789076..7f4da56 100644
--- a/TelepathyQt/channel-factory.h
+++ b/TelepathyQt/channel-factory.h
@@ -238,6 +238,38 @@ public:
     void setConstructorForIncomingRoomStreamTubes(const ConstructorConstPtr &ctor,
             const QVariantMap &additionalProps = QVariantMap());
 
+    Features featuresForOutgoingDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const;
+    void addFeaturesForOutgoingDBusTubes(const Features &features,
+            const QVariantMap &additionalProps = QVariantMap());
+
+    ConstructorConstPtr constructorForOutgoingDBusTubes(
+            const QVariantMap &additionalProps = QVariantMap()) const;
+
+    template<typename Subclass>
+    void setSubclassForOutgoingDBusTubes(const QVariantMap &additionalProps = QVariantMap())
+    {
+        setConstructorForOutgoingDBusTubes(SubclassCtor<Subclass>::create(), additionalProps);
+    }
+
+    void setConstructorForOutgoingDBusTubes(const ConstructorConstPtr &ctor,
+            const QVariantMap &additionalProps = QVariantMap());
+
+    Features featuresForIncomingDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const;
+    void addFeaturesForIncomingDBusTubes(const Features &features,
+            const QVariantMap &additionalProps = QVariantMap());
+
+    ConstructorConstPtr constructorForIncomingDBusTubes(
+            const QVariantMap &additionalProps = QVariantMap()) const;
+
+    template<typename Subclass>
+    void setSubclassForIncomingDBusTubes(const QVariantMap &additionalProps = QVariantMap())
+    {
+        setConstructorForIncomingDBusTubes(SubclassCtor<Subclass>::create(), additionalProps);
+    }
+
+    void setConstructorForIncomingDBusTubes(const ConstructorConstPtr &ctor,
+            const QVariantMap &additionalProps = QVariantMap());
+
     Features featuresForContactSearches(const QVariantMap &additionalProps = QVariantMap()) const;
     void addFeaturesForContactSearches(const Features &features,
             const QVariantMap &additionalProps = QVariantMap());



More information about the telepathy-commits mailing list