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
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
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
00313 QSet<ChannelClassSpec> uniqueSet = specList.toSet();
00314 return qHash(uniqueSet);
00315 }
00316
00317 }
00318
00319 Q_DECLARE_METATYPE(Tp::ChannelClassSpec);
00320 Q_DECLARE_METATYPE(Tp::ChannelClassSpecList);
00321
00322 #endif