Home · All Classes · All Namespaces · Modules · Functions · Files

channel-factory.h

00001 /*
00002  * This file is part of TelepathyQt4
00003  *
00004  * Copyright (C) 2009-2010 Collabora Ltd. <http://www.collabora.co.uk/>
00005  * Copyright (C) 2009-2010 Nokia Corporation
00006  *
00007  * This library is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or (at your option) any later version.
00011  *
00012  * This library is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with this library; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020  */
00021 
00022 #ifndef _TelepathyQt4_channel_factory_h_HEADER_GUARD_
00023 #define _TelepathyQt4_channel_factory_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TELEPATHY_QT4_HEADER
00026 #error IN_TELEPATHY_QT4_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt4/DBusProxyFactory>
00030 #include <TelepathyQt4/SharedPtr>
00031 #include <TelepathyQt4/Types>
00032 
00033 // For Q_DISABLE_COPY
00034 #include <QtGlobal>
00035 #include <QString>
00036 #include <QVariantMap>
00037 
00038 class QDBusConnection;
00039 
00040 namespace Tp
00041 {
00042 
00043 class ChannelClassSpec;
00044 
00045 class TELEPATHY_QT4_EXPORT ChannelFactory : public DBusProxyFactory
00046 {
00047     Q_DISABLE_COPY(ChannelFactory)
00048 
00049 public:
00050     struct TELEPATHY_QT4_EXPORT Constructor : public RefCounted
00051     {
00052         virtual ~Constructor() {}
00053 
00054         virtual ChannelPtr construct(const ConnectionPtr &conn, const QString &objectPath,
00055                 const QVariantMap &immutableProperties) const = 0;
00056     };
00057     typedef SharedPtr<Constructor> ConstructorPtr;
00058     typedef SharedPtr<const Constructor> ConstructorConstPtr;
00059 
00060     static ChannelFactoryPtr create(const QDBusConnection &bus);
00061 
00062     virtual ~ChannelFactory();
00063 
00064     Features featuresForTextChats(const QVariantMap &additionalProps = QVariantMap()) const;
00065     void addFeaturesForTextChats(const Features &features,
00066             const QVariantMap &additionalProps = QVariantMap());
00067 
00068     ConstructorConstPtr constructorForTextChats(
00069             const QVariantMap &additionalProps = QVariantMap()) const;
00070 
00071     template<typename Subclass>
00072     void setSubclassForTextChats(const QVariantMap &additionalProps = QVariantMap())
00073     {
00074         setConstructorForTextChats(SubclassCtor<Subclass>::create(), additionalProps);
00075     }
00076 
00077     void setConstructorForTextChats(const ConstructorConstPtr &ctor,
00078             const QVariantMap &additionalProps = QVariantMap());
00079 
00080     Features featuresForTextChatrooms(const QVariantMap &additionalProps = QVariantMap()) const;
00081     void addFeaturesForTextChatrooms(const Features &features,
00082             const QVariantMap &additionalProps = QVariantMap());
00083 
00084     ConstructorConstPtr constructorForTextChatrooms(
00085             const QVariantMap &additionalProps = QVariantMap()) const;
00086 
00087     template<typename Subclass>
00088     void setSubclassForTextChatrooms(const QVariantMap &additionalProps = QVariantMap())
00089     {
00090         setConstructorForTextChatrooms(SubclassCtor<Subclass>::create(), additionalProps);
00091     }
00092 
00093     void setConstructorForTextChatrooms(const ConstructorConstPtr &ctor,
00094             const QVariantMap &additionalProps = QVariantMap());
00095 
00096     Features featuresForStreamedMediaCalls(const QVariantMap &additionalProps = QVariantMap()) const;
00097     void addFeaturesForStreamedMediaCalls(const Features &features,
00098             const QVariantMap &additionalProps = QVariantMap());
00099 
00100     ConstructorConstPtr constructorForStreamedMediaCalls(
00101             const QVariantMap &additionalProps = QVariantMap()) const;
00102 
00103     template<typename Subclass>
00104     void setSubclassForStreamedMediaCalls(const QVariantMap &additionalProps = QVariantMap())
00105     {
00106         setConstructorForStreamedMediaCalls(SubclassCtor<Subclass>::create(), additionalProps);
00107     }
00108 
00109     void setConstructorForStreamedMediaCalls(const ConstructorConstPtr &ctor,
00110             const QVariantMap &additionalProps = QVariantMap());
00111 
00112     Features featuresForRoomLists(const QVariantMap &additionalProps = QVariantMap()) const;
00113     void addFeaturesForRoomLists(const Features &features,
00114             const QVariantMap &additionalProps = QVariantMap());
00115 
00116     ConstructorConstPtr constructorForRoomLists(
00117             const QVariantMap &additionalProps = QVariantMap()) const;
00118 
00119     template<typename Subclass>
00120     void setSubclassForRoomLists(const QVariantMap &additionalProps = QVariantMap())
00121     {
00122         setConstructorForRoomLists(SubclassCtor<Subclass>::create(), additionalProps);
00123     }
00124 
00125     void setConstructorForRoomLists(const ConstructorConstPtr &ctor,
00126             const QVariantMap &additionalProps = QVariantMap());
00127 
00128     Features featuresForOutgoingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) const;
00129     void addFeaturesForOutgoingFileTransfers(const Features &features,
00130             const QVariantMap &additionalProps = QVariantMap());
00131 
00132     ConstructorConstPtr constructorForOutgoingFileTransfers(
00133             const QVariantMap &additionalProps = QVariantMap()) const;
00134 
00135     template<typename Subclass>
00136     void setSubclassForOutgoingFileTransfers(const QVariantMap &additionalProps = QVariantMap())
00137     {
00138         setConstructorForOutgoingFileTransfers(SubclassCtor<Subclass>::create(), additionalProps);
00139     }
00140 
00141     void setConstructorForOutgoingFileTransfers(const ConstructorConstPtr &ctor,
00142             const QVariantMap &additionalProps = QVariantMap());
00143 
00144     Features featuresForIncomingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) const;
00145     void addFeaturesForIncomingFileTransfers(const Features &features,
00146             const QVariantMap &additionalProps = QVariantMap());
00147 
00148     ConstructorConstPtr constructorForIncomingFileTransfers(
00149             const QVariantMap &additionalProps = QVariantMap()) const;
00150 
00151     template<typename Subclass>
00152     void setSubclassForIncomingFileTransfers(const QVariantMap &additionalProps = QVariantMap())
00153     {
00154         setConstructorForIncomingFileTransfers(SubclassCtor<Subclass>::create(), additionalProps);
00155     }
00156 
00157     void setConstructorForIncomingFileTransfers(const ConstructorConstPtr &ctor,
00158             const QVariantMap &additionalProps = QVariantMap());
00159 
00160     Features featuresForContactSearches(const QVariantMap &additionalProps = QVariantMap()) const;
00161     void addFeaturesForContactSearches(const Features &features,
00162             const QVariantMap &additionalProps = QVariantMap());
00163 
00164     ConstructorConstPtr constructorForContactSearches(
00165             const QVariantMap &additionalProps = QVariantMap()) const;
00166 
00167     template<typename Subclass>
00168     void setSubclassForContactSearches(const QVariantMap &additionalProps = QVariantMap())
00169     {
00170         setConstructorForContactSearches(SubclassCtor<Subclass>::create(), additionalProps);
00171     }
00172 
00173     void setConstructorForContactSearches(const ConstructorConstPtr &ctor,
00174             const QVariantMap &additionalProps = QVariantMap());
00175 
00176     // When merged, Tube channels should have export/import variants too like FT has for send/receive
00177 
00178     Features commonFeatures() const;
00179     void addCommonFeatures(const Features &features);
00180 
00181     ConstructorConstPtr fallbackConstructor() const;
00182 
00183     template <typename Subclass>
00184     void setFallbackSubclass()
00185     {
00186         setFallbackConstructor(SubclassCtor<Subclass>::create());
00187     }
00188 
00189     void setFallbackConstructor(const ConstructorConstPtr &ctor);
00190 
00191     Features featuresFor(const ChannelClassSpec &channelClass) const;
00192     void addFeaturesFor(const ChannelClassSpec &channelClass, const Features &features);
00193 
00194     template <typename Subclass>
00195     void setSubclassFor(const ChannelClassSpec &channelClass)
00196     {
00197         setConstructorFor(channelClass, SubclassCtor<Subclass>::create());
00198     }
00199 
00200     ConstructorConstPtr constructorFor(const ChannelClassSpec &channelClass) const;
00201     void setConstructorFor(const ChannelClassSpec &channelClass, const ConstructorConstPtr &ctor);
00202 
00203     PendingReady *proxy(const ConnectionPtr &connection, const QString &channelPath,
00204             const QVariantMap &immutableProperties) const;
00205 
00206 protected:
00207     ChannelFactory(const QDBusConnection &bus);
00208 
00209     template <typename Subclass>
00210     struct SubclassCtor : public Constructor
00211     {
00212         static ConstructorPtr create()
00213         {
00214             return ConstructorPtr(new SubclassCtor<Subclass>());
00215         }
00216 
00217         virtual ~SubclassCtor() {}
00218 
00219         ChannelPtr construct(const ConnectionPtr &conn, const QString &objectPath,
00220                 const QVariantMap &immutableProperties) const
00221         {
00222             return Subclass::create(conn, objectPath, immutableProperties);
00223         }
00224     };
00225 
00226     virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const;
00227     // Nothing we'd like to prepare()
00228     virtual Features featuresFor(const DBusProxyPtr &proxy) const;
00229 
00230 private:
00231     struct Private;
00232     Private *mPriv;
00233 };
00234 
00235 } // Tp
00236 
00237 #endif


Copyright © 2008-2010 Collabora Ltd. and Nokia Corporation
Telepathy-Qt4 0.5.6.1