Home · All Classes · All Namespaces · Modules · Functions · Files
channel-class-spec.h
00001 
00023 #ifndef _TelepathyQt_channel_class_spec_h_HEADER_GUARD_
00024 #define _TelepathyQt_channel_class_spec_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Global>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <QSharedDataPointer>
00035 #include <QVariant>
00036 #include <QVariantMap>
00037 #include <QPair>
00038 
00039 namespace Tp
00040 {
00041 
00042 class TP_QT_EXPORT ChannelClassSpec
00043 {
00044 public:
00045     ChannelClassSpec();
00046     ChannelClassSpec(const ChannelClass &cc);
00047     ChannelClassSpec(const QVariantMap &props);
00048     ChannelClassSpec(const QString &channelType, HandleType targetHandleType,
00049             const QVariantMap &otherProperties = QVariantMap());
00050     ChannelClassSpec(const QString &channelType, HandleType targetHandleType, bool requested,
00051             const QVariantMap &otherProperties = QVariantMap());
00052     ChannelClassSpec(const ChannelClassSpec &other,
00053             const QVariantMap &additionalProperties = QVariantMap());
00054     ~ChannelClassSpec();
00055 
00056     bool isValid() const;
00057 
00058     ChannelClassSpec &operator=(const ChannelClassSpec &other);
00059 
00060     bool operator==(const ChannelClassSpec &other) const
00061     {
00062         return this->allProperties() == other.allProperties();
00063     }
00064 
00065     bool isSubsetOf(const ChannelClassSpec &other) const;
00066     bool matches(const QVariantMap &immutableProperties) const;
00067 
00068     QString channelType() const
00069     {
00070         return qdbus_cast<QString>(
00071                 property(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")));
00072     }
00073 
00074     void setChannelType(const QString &type)
00075     {
00076         setProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
00077                 QVariant::fromValue(type));
00078     }
00079 
00080     HandleType targetHandleType() const
00081     {
00082         return (HandleType) qdbus_cast<uint>(
00083                 property(
00084                     TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")));
00085     }
00086 
00087     void setTargetHandleType(HandleType type)
00088     {
00089         setProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
00090                 QVariant::fromValue((uint) type));
00091     }
00092 
00093     bool hasRequested() const
00094     {
00095         return hasProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"));
00096     }
00097 
00098     bool isRequested() const
00099     {
00100         return qdbus_cast<bool>(
00101                 property(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested")));
00102     }
00103 
00104     void setRequested(bool requested)
00105     {
00106         setProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"),
00107                 QVariant::fromValue(requested));
00108     }
00109 
00110     void unsetRequested()
00111     {
00112         unsetProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"));
00113     }
00114 
00115     bool hasCallInitialAudioFlag() const
00116     {
00117         return qdbus_cast<bool>(
00118                 property(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio")));
00119     }
00120 
00121     void setCallInitialAudioFlag()
00122     {
00123         setProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"),
00124                 QVariant::fromValue(true));
00125     }
00126 
00127     void unsetCallInitialAudioFlag()
00128     {
00129         unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"));
00130     }
00131 
00132     bool hasCallInitialVideoFlag() const
00133     {
00134         return qdbus_cast<bool>(
00135                 property(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo")));
00136     }
00137 
00138     void setCallInitialVideoFlag()
00139     {
00140         setProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"),
00141                 QVariant::fromValue(true));
00142     }
00143 
00144     void unsetCallInitialVideoFlag()
00145     {
00146         unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"));
00147     }
00148 
00149     bool hasStreamedMediaInitialAudioFlag() const
00150     {
00151         return qdbus_cast<bool>(
00152                 property(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio")));
00153     }
00154 
00155     void setStreamedMediaInitialAudioFlag()
00156     {
00157         setProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"),
00158                 QVariant::fromValue(true));
00159     }
00160 
00161     void unsetStreamedMediaInitialAudioFlag()
00162     {
00163         unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"));
00164     }
00165 
00166     bool hasStreamedMediaInitialVideoFlag() const
00167     {
00168         return qdbus_cast<bool>(
00169                 property(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo")));
00170     }
00171 
00172     void setStreamedMediaInitialVideoFlag()
00173     {
00174         setProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"),
00175                 QVariant::fromValue(true));
00176     }
00177 
00178     void unsetStreamedMediaInitialVideoFlag()
00179     {
00180         unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"));
00181     }
00182 
00183     bool hasProperty(const QString &qualifiedName) const;
00184     QVariant property(const QString &qualifiedName) const;
00185 
00186     void setProperty(const QString &qualifiedName, const QVariant &value);
00187     void unsetProperty(const QString &qualifiedName);
00188 
00189     QVariantMap allProperties() const;
00190     ChannelClass bareClass() const;
00191 
00192     static ChannelClassSpec textChat(const QVariantMap &additionalProperties = QVariantMap());
00193     static ChannelClassSpec textChatroom(const QVariantMap &additionalProperties = QVariantMap());
00194     static ChannelClassSpec unnamedTextChat(const QVariantMap &additionalProperties = QVariantMap());
00195 
00196     static ChannelClassSpec audioCall(const QVariantMap &additionalProperties =
00197             QVariantMap());
00198     static ChannelClassSpec videoCall(const QVariantMap &additionalProperties =
00199             QVariantMap());
00200     static ChannelClassSpec videoCallWithAudio(const QVariantMap &additionalProperties =
00201             QVariantMap());
00202 
00203     static ChannelClassSpec streamedMediaCall(const QVariantMap &additionalProperties = QVariantMap());
00204     static ChannelClassSpec streamedMediaAudioCall(const QVariantMap &additionalProperties =
00205             QVariantMap());
00206     static ChannelClassSpec streamedMediaVideoCall(const QVariantMap &additionalProperties =
00207             QVariantMap());
00208     static ChannelClassSpec streamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties =
00209             QVariantMap());
00210 
00211     static ChannelClassSpec unnamedStreamedMediaCall(const QVariantMap &additionalProperties =
00212             QVariantMap());
00213     static ChannelClassSpec unnamedStreamedMediaAudioCall(const QVariantMap &additionalProperties =
00214             QVariantMap());
00215     static ChannelClassSpec unnamedStreamedMediaVideoCall(const QVariantMap &additionalProperties =
00216             QVariantMap());
00217     static ChannelClassSpec unnamedStreamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties =
00218             QVariantMap());
00219 
00220     static ChannelClassSpec serverAuthentication(const QVariantMap &additionalProperties =
00221             QVariantMap());
00222 
00223     static ChannelClassSpec roomList(const QVariantMap &additionalProperties = QVariantMap());
00224     static ChannelClassSpec outgoingFileTransfer(const QVariantMap &additionalProperties = QVariantMap());
00225     static ChannelClassSpec incomingFileTransfer(const QVariantMap &additionalProperties = QVariantMap());
00226     static ChannelClassSpec outgoingStreamTube(const QString &service = QString(),
00227             const QVariantMap &additionalProperties = QVariantMap());
00228     static ChannelClassSpec incomingStreamTube(const QString &service = QString(),
00229             const QVariantMap &additionalProperties = QVariantMap());
00230     static ChannelClassSpec outgoingRoomStreamTube(const QString &service = QString(),
00231             const QVariantMap &additionalProperties = QVariantMap());
00232     static ChannelClassSpec incomingRoomStreamTube(const QString &service = QString(),
00233             const QVariantMap &additionalProperties = QVariantMap());
00234     static ChannelClassSpec outgoingDBusTube(const QString &serviceName = QString(),
00235             const QVariantMap &additionalProperties = QVariantMap());
00236     static ChannelClassSpec incomingDBusTube(const QString &serviceName = QString(),
00237             const QVariantMap &additionalProperties = QVariantMap());
00238     static ChannelClassSpec outgoingRoomDBusTube(const QString &serviceName = QString(),
00239             const QVariantMap &additionalProperties = QVariantMap());
00240     static ChannelClassSpec incomingRoomDBusTube(const QString &serviceName = QString(),
00241             const QVariantMap &additionalProperties = QVariantMap());
00242     static ChannelClassSpec contactSearch(const QVariantMap &additionalProperties = QVariantMap());
00243 
00244 private:
00245     struct Private;
00246     friend struct Private;
00247     QSharedDataPointer<Private> mPriv;
00248 };
00249 
00250 class TP_QT_EXPORT ChannelClassSpecList :
00251                 public QList<ChannelClassSpec>
00252 {
00253 public:
00254     ChannelClassSpecList() { }
00255 
00256     ChannelClassSpecList(const ChannelClassSpec &spec)
00257     {
00258         append(spec);
00259     }
00260 
00261     ChannelClassSpecList(const QList<ChannelClassSpec> &other)
00262         : QList<ChannelClassSpec>(other)
00263     {
00264     }
00265 
00266     ChannelClassSpecList(const ChannelClassList &classes)
00267     {
00268         // Why doesn't Qt have range constructors like STL... stupid, so stupid.
00269         Q_FOREACH (const ChannelClass &cc, classes) {
00270             append(cc);
00271         }
00272     }
00273 
00274     ChannelClassList bareClasses() const
00275     {
00276         ChannelClassList list;
00277         Q_FOREACH (const ChannelClassSpec &spec, *this) {
00278             list.append(spec.bareClass());
00279         }
00280         return list;
00281     }
00282 };
00283 
00284 inline uint qHash(const ChannelClassSpec &spec)
00285 {
00286     uint ret = 0;
00287     QVariantMap::const_iterator it = spec.allProperties().constBegin();
00288     QVariantMap::const_iterator end = spec.allProperties().constEnd();
00289     int i = spec.allProperties().size() + 1;
00290     for (; it != end; ++it) {
00291         // all D-Bus types should be convertible to QString
00292         QPair<QString, QString> p(it.key(), it.value().toString());
00293         int h = qHash(p);
00294         ret ^= ((h << (2 << i)) | (h >> (2 >> i)));
00295         i--;
00296     }
00297     return ret;
00298 }
00299 
00300 inline uint qHash(const QSet<ChannelClassSpec> &specSet)
00301 {
00302     int ret = 0;
00303     Q_FOREACH (const ChannelClassSpec &spec, specSet) {
00304         int h = qHash(spec);
00305         ret ^= h;
00306     }
00307     return ret;
00308 }
00309 
00310 inline uint qHash(const ChannelClassSpecList &specList)
00311 {
00312     // Make it unique by converting to QSet
00313     QSet<ChannelClassSpec> uniqueSet = specList.toSet();
00314     return qHash(uniqueSet);
00315 }
00316 
00317 } // Tp
00318 
00319 Q_DECLARE_METATYPE(Tp::ChannelClassSpec);
00320 Q_DECLARE_METATYPE(Tp::ChannelClassSpecList);
00321 
00322 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.2