00001
00023 #ifndef _TelepathyQt_base_connection_h_HEADER_GUARD_
00024 #define _TelepathyQt_base_connection_h_HEADER_GUARD_
00025
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029
00030 #include <TelepathyQt/AvatarSpec>
00031 #include <TelepathyQt/DBusService>
00032 #include <TelepathyQt/Global>
00033 #include <TelepathyQt/Types>
00034 #include <TelepathyQt/Callbacks>
00035 #include <TelepathyQt/Constants>
00036
00037 #include <QDBusConnection>
00038
00039 class QString;
00040
00041 namespace Tp
00042 {
00043
00044 class TP_QT_EXPORT BaseConnection : public DBusService
00045 {
00046 Q_OBJECT
00047 Q_DISABLE_COPY(BaseConnection)
00048
00049 public:
00050 static BaseConnectionPtr create(const QString &cmName, const QString &protocolName,
00051 const QVariantMap ¶meters,
00052 const QDBusConnection &dbusConnection = QDBusConnection::sessionBus())
00053 {
00054 return BaseConnectionPtr(new BaseConnection(
00055 dbusConnection, cmName, protocolName, parameters));
00056 }
00057 template<typename BaseConnectionSubclass>
00058 static SharedPtr<BaseConnectionSubclass> create(const QString &cmName,
00059 const QString &protocolName, const QVariantMap ¶meters,
00060 const QDBusConnection &dbusConnection = QDBusConnection::sessionBus())
00061 {
00062 return SharedPtr<BaseConnectionSubclass>(new BaseConnectionSubclass(
00063 dbusConnection, cmName, protocolName, parameters));
00064 }
00065
00066 virtual ~BaseConnection();
00067
00068 QString cmName() const;
00069 QString protocolName() const;
00070 QVariantMap parameters() const;
00071 QVariantMap immutableProperties() const;
00072
00073 uint selfHandle() const;
00074 void setSelfHandle(uint selfHandle);
00075
00076 QString selfID() const;
00077 void setSelfID(const QString &selfID);
00078
00079 void setSelfContact(uint selfHandle, const QString &selfID);
00080
00081 uint status() const;
00082 void setStatus(uint newStatus, uint reason);
00083
00084 typedef Callback2<BaseChannelPtr, const QVariantMap &, DBusError*> CreateChannelCallback;
00085 void setCreateChannelCallback(const CreateChannelCallback &cb);
00086 BaseChannelPtr createChannel(const QVariantMap &request, bool suppressHandler, DBusError *error);
00087
00088 typedef Callback1<void, DBusError*> ConnectCallback;
00089 void setConnectCallback(const ConnectCallback &cb);
00090
00091 typedef Callback3<QStringList, uint, const Tp::UIntList &, DBusError*> InspectHandlesCallback;
00092 void setInspectHandlesCallback(const InspectHandlesCallback &cb);
00093 QStringList inspectHandles(uint handleType, const Tp::UIntList &handles, DBusError *error);
00094
00095 typedef Callback3<Tp::UIntList, uint, const QStringList &, DBusError*> RequestHandlesCallback;
00096 void setRequestHandlesCallback(const RequestHandlesCallback &cb);
00097 Tp::UIntList requestHandles(uint handleType, const QStringList &identifiers, DBusError *error);
00098
00099 Tp::ChannelInfoList channelsInfo();
00100 Tp::ChannelDetailsList channelsDetails();
00101
00102 BaseChannelPtr ensureChannel(const QVariantMap &request, bool &yours, bool suppressHandler, DBusError *error);
00103
00104 void addChannel(BaseChannelPtr channel, bool suppressHandler = false);
00105
00106 QList<AbstractConnectionInterfacePtr> interfaces() const;
00107 AbstractConnectionInterfacePtr interface(const QString &interfaceName) const;
00108 bool plugInterface(const AbstractConnectionInterfacePtr &interface);
00109 bool registerObject(DBusError *error = NULL);
00110
00111 virtual QString uniqueName() const;
00112
00113 Q_SIGNALS:
00114 void disconnected();
00115
00116 private Q_SLOTS:
00117 TP_QT_NO_EXPORT void removeChannel();
00118
00119 protected:
00120 BaseConnection(const QDBusConnection &dbusConnection,
00121 const QString &cmName, const QString &protocolName,
00122 const QVariantMap ¶meters);
00123
00124 virtual bool registerObject(const QString &busName, const QString &objectPath,
00125 DBusError *error);
00126
00127 virtual bool matchChannel(const Tp::BaseChannelPtr &channel, const QVariantMap &request, Tp::DBusError *error);
00128
00129 private:
00130 class Adaptee;
00131 friend class Adaptee;
00132 struct Private;
00133 friend struct Private;
00134 Private *mPriv;
00135 };
00136
00137 class TP_QT_EXPORT AbstractConnectionInterface : public AbstractDBusServiceInterface
00138 {
00139 Q_OBJECT
00140 Q_DISABLE_COPY(AbstractConnectionInterface)
00141
00142 public:
00143 AbstractConnectionInterface(const QString &interfaceName);
00144 virtual ~AbstractConnectionInterface();
00145
00146 private:
00147 friend class BaseConnection;
00148
00149 struct Private;
00150 friend struct Private;
00151 Private *mPriv;
00152 };
00153
00154 class TP_QT_EXPORT BaseConnectionRequestsInterface : public AbstractConnectionInterface
00155 {
00156 Q_OBJECT
00157 Q_DISABLE_COPY(BaseConnectionRequestsInterface)
00158
00159 public:
00160 static BaseConnectionRequestsInterfacePtr create(BaseConnection* connection) {
00161 return BaseConnectionRequestsInterfacePtr(new BaseConnectionRequestsInterface(connection));
00162 }
00163 template<typename BaseConnectionRequestsInterfaceSubclass>
00164 static SharedPtr<BaseConnectionRequestsInterfaceSubclass> create(BaseConnection* connection) {
00165 return SharedPtr<BaseConnectionRequestsInterfaceSubclass>(
00166 new BaseConnectionRequestsInterfaceSubclass(connection));
00167 }
00168
00169 virtual ~BaseConnectionRequestsInterface();
00170
00171 QVariantMap immutableProperties() const;
00172
00173 Tp::RequestableChannelClassList requestableChannelClasses;
00174 void ensureChannel(const QVariantMap &request, bool &yours,
00175 QDBusObjectPath &channel, QVariantMap &details, DBusError* error);
00176 void createChannel(const QVariantMap &request, QDBusObjectPath &channel,
00177 QVariantMap &details, DBusError* error);
00178
00179 public Q_SLOTS:
00180 void newChannels(const Tp::ChannelDetailsList &channels);
00181 void channelClosed(const QDBusObjectPath &removed);
00182
00183 protected:
00184 BaseConnectionRequestsInterface(BaseConnection* connection);
00185
00186 private:
00187 void createAdaptor();
00188
00189 class Adaptee;
00190 friend class Adaptee;
00191 struct Private;
00192 friend struct Private;
00193 Private *mPriv;
00194 };
00195
00196
00197 class TP_QT_EXPORT BaseConnectionContactsInterface : public AbstractConnectionInterface
00198 {
00199 Q_OBJECT
00200 Q_DISABLE_COPY(BaseConnectionContactsInterface)
00201
00202
00203 public:
00204 static BaseConnectionContactsInterfacePtr create() {
00205 return BaseConnectionContactsInterfacePtr(new BaseConnectionContactsInterface());
00206 }
00207 template<typename BaseConnectionContactsInterfaceSubclass>
00208 static SharedPtr<BaseConnectionContactsInterfaceSubclass> create() {
00209 return SharedPtr<BaseConnectionContactsInterfaceSubclass>(
00210 new BaseConnectionContactsInterfaceSubclass());
00211 }
00212
00213 virtual ~BaseConnectionContactsInterface();
00214
00215 QVariantMap immutableProperties() const;
00216
00217 typedef Callback3<ContactAttributesMap, const Tp::UIntList&, const QStringList&, DBusError*> GetContactAttributesCallback;
00218 void setGetContactAttributesCallback(const GetContactAttributesCallback &cb);
00219 ContactAttributesMap getContactAttributes(const Tp::UIntList &handles,
00220 const QStringList &interfaces,
00221 DBusError *error);
00222 void setContactAttributeInterfaces(const QStringList &contactAttributeInterfaces);
00223 protected:
00224 BaseConnectionContactsInterface();
00225
00226 private:
00227 void createAdaptor();
00228
00229 class Adaptee;
00230 friend class Adaptee;
00231 struct Private;
00232 friend struct Private;
00233 Private *mPriv;
00234 };
00235
00236 class TP_QT_EXPORT BaseConnectionSimplePresenceInterface : public AbstractConnectionInterface
00237 {
00238 Q_OBJECT
00239 Q_DISABLE_COPY(BaseConnectionSimplePresenceInterface)
00240
00241 public:
00242 static BaseConnectionSimplePresenceInterfacePtr create()
00243 {
00244 return BaseConnectionSimplePresenceInterfacePtr(new BaseConnectionSimplePresenceInterface());
00245 }
00246 template<typename BaseConnectionSimplePresenceInterfaceSubclass>
00247 static SharedPtr<BaseConnectionSimplePresenceInterfaceSubclass> create()
00248 {
00249 return SharedPtr<BaseConnectionSimplePresenceInterfaceSubclass>(
00250 new BaseConnectionSimplePresenceInterfaceSubclass());
00251 }
00252
00253 virtual ~BaseConnectionSimplePresenceInterface();
00254
00255 QVariantMap immutableProperties() const;
00256
00257 Tp::SimpleStatusSpecMap statuses() const;
00258 void setStatuses(const Tp::SimpleStatusSpecMap &statuses);
00259
00260 uint maximumStatusMessageLength() const;
00261 void setMaximumStatusMessageLength(uint maximumStatusMessageLength);
00262
00263 typedef Callback3<uint, const QString &, const QString &, DBusError*> SetPresenceCallback;
00264 void setSetPresenceCallback(const SetPresenceCallback &cb);
00265
00266 void setPresences(const Tp::SimpleContactPresences &presences);
00267
00268 Tp::SimpleContactPresences getPresences(const Tp::UIntList &contacts);
00269
00270 protected:
00271 BaseConnectionSimplePresenceInterface();
00272
00273 private:
00274 void createAdaptor();
00275
00276 class Adaptee;
00277 friend class Adaptee;
00278 struct Private;
00279 friend struct Private;
00280 Private *mPriv;
00281 };
00282
00283 class TP_QT_EXPORT BaseConnectionContactListInterface : public AbstractConnectionInterface
00284 {
00285 Q_OBJECT
00286 Q_DISABLE_COPY(BaseConnectionContactListInterface)
00287
00288 public:
00289 static BaseConnectionContactListInterfacePtr create()
00290 {
00291 return BaseConnectionContactListInterfacePtr(new BaseConnectionContactListInterface());
00292 }
00293 template<typename BaseConnectionContactListInterfaceSubclass>
00294 static SharedPtr<BaseConnectionContactListInterfaceSubclass> create()
00295 {
00296 return SharedPtr<BaseConnectionContactListInterfaceSubclass>(
00297 new BaseConnectionContactListInterfaceSubclass());
00298 }
00299
00300 virtual ~BaseConnectionContactListInterface();
00301
00302 QVariantMap immutableProperties() const;
00303
00304 uint contactListState() const;
00305 void setContactListState(uint contactListState);
00306
00307 bool contactListPersists() const;
00308 void setContactListPersists(bool contactListPersists);
00309
00310 bool canChangeContactList() const;
00311 void setCanChangeContactList(bool canChangeContactList);
00312
00313 bool requestUsesMessage() const;
00314 void setRequestUsesMessage(bool requestUsesMessage);
00315
00316 bool downloadAtConnection() const;
00317 void setDownloadAtConnection(bool downloadAtConnection);
00318
00319 typedef Callback3<Tp::ContactAttributesMap, const QStringList &, bool, DBusError*> GetContactListAttributesCallback;
00320 void setGetContactListAttributesCallback(const GetContactListAttributesCallback &cb);
00321 Tp::ContactAttributesMap getContactListAttributes(const QStringList &interfaces, bool hold, DBusError *error);
00322
00323 typedef Callback3<void, const Tp::UIntList &, const QString &, DBusError*> RequestSubscriptionCallback;
00324 void setRequestSubscriptionCallback(const RequestSubscriptionCallback &cb);
00325 void requestSubscription(const Tp::UIntList &contacts, const QString &message, DBusError *error);
00326
00327 typedef Callback2<void, const Tp::UIntList &, DBusError*> AuthorizePublicationCallback;
00328 void setAuthorizePublicationCallback(const AuthorizePublicationCallback &cb);
00329 void authorizePublication(const Tp::UIntList &contacts, DBusError *error);
00330
00331 typedef Callback2<void, const Tp::UIntList &, DBusError*> RemoveContactsCallback;
00332 void setRemoveContactsCallback(const RemoveContactsCallback &cb);
00333 void removeContacts(const Tp::UIntList &contacts, DBusError *error);
00334
00335 typedef Callback2<void, const Tp::UIntList &, DBusError*> UnsubscribeCallback;
00336 void setUnsubscribeCallback(const UnsubscribeCallback &cb);
00337 void unsubscribe(const Tp::UIntList &contacts, DBusError *error);
00338
00339 typedef Callback2<void, const Tp::UIntList &, DBusError*> UnpublishCallback;
00340 void setUnpublishCallback(const UnpublishCallback &cb);
00341 void unpublish(const Tp::UIntList &contacts, DBusError *error);
00342
00343 typedef Callback1<void, DBusError*> DownloadCallback;
00344 void setDownloadCallback(const DownloadCallback &cb);
00345 void download(DBusError *error);
00346
00347 void contactsChangedWithID(const Tp::ContactSubscriptionMap &changes, const Tp::HandleIdentifierMap &identifiers, const Tp::HandleIdentifierMap &removals);
00348
00349 protected:
00350 BaseConnectionContactListInterface();
00351
00352 private:
00353 void createAdaptor();
00354
00355 class Adaptee;
00356 friend class Adaptee;
00357 struct Private;
00358 friend struct Private;
00359 Private *mPriv;
00360 };
00361
00362 class TP_QT_EXPORT BaseConnectionContactInfoInterface : public AbstractConnectionInterface
00363 {
00364 Q_OBJECT
00365 Q_DISABLE_COPY(BaseConnectionContactInfoInterface)
00366
00367 public:
00368 static BaseConnectionContactInfoInterfacePtr create()
00369 {
00370 return BaseConnectionContactInfoInterfacePtr(new BaseConnectionContactInfoInterface());
00371 }
00372 template<typename BaseConnectionContactInfoInterfaceSubclass>
00373 static SharedPtr<BaseConnectionContactInfoInterfaceSubclass> create()
00374 {
00375 return SharedPtr<BaseConnectionContactInfoInterfaceSubclass>(
00376 new BaseConnectionContactInfoInterfaceSubclass());
00377 }
00378
00379 virtual ~BaseConnectionContactInfoInterface();
00380
00381 QVariantMap immutableProperties() const;
00382
00383 Tp::ContactInfoFlags contactInfoFlags() const;
00384 void setContactInfoFlags(const Tp::ContactInfoFlags &contactInfoFlags);
00385
00386 Tp::FieldSpecs supportedFields() const;
00387 void setSupportedFields(const Tp::FieldSpecs &supportedFields);
00388
00389 typedef Callback2<Tp::ContactInfoMap, const Tp::UIntList &, DBusError*> GetContactInfoCallback;
00390 void setGetContactInfoCallback(const GetContactInfoCallback &cb);
00391 Tp::ContactInfoMap getContactInfo(const Tp::UIntList &contacts, DBusError *error);
00392
00393 typedef Callback2<void, const Tp::UIntList &, DBusError*> RefreshContactInfoCallback;
00394 void setRefreshContactInfoCallback(const RefreshContactInfoCallback &cb);
00395 void refreshContactInfo(const Tp::UIntList &contacts, DBusError *error);
00396
00397 typedef Callback2<Tp::ContactInfoFieldList, uint, DBusError*> RequestContactInfoCallback;
00398 void setRequestContactInfoCallback(const RequestContactInfoCallback &cb);
00399 Tp::ContactInfoFieldList requestContactInfo(uint contact, DBusError *error);
00400
00401 typedef Callback2<void, const Tp::ContactInfoFieldList &, DBusError*> SetContactInfoCallback;
00402 void setSetContactInfoCallback(const SetContactInfoCallback &cb);
00403 void setContactInfo(const Tp::ContactInfoFieldList &contactInfo, DBusError *error);
00404
00405 void contactInfoChanged(uint contact, const Tp::ContactInfoFieldList &contactInfo);
00406
00407 protected:
00408 BaseConnectionContactInfoInterface();
00409
00410 private:
00411 void createAdaptor();
00412
00413 class Adaptee;
00414 friend class Adaptee;
00415 struct Private;
00416 friend struct Private;
00417 Private *mPriv;
00418 };
00419
00420 class TP_QT_EXPORT BaseConnectionAddressingInterface : public AbstractConnectionInterface
00421 {
00422 Q_OBJECT
00423 Q_DISABLE_COPY(BaseConnectionAddressingInterface)
00424
00425 public:
00426 static BaseConnectionAddressingInterfacePtr create() {
00427 return BaseConnectionAddressingInterfacePtr(new BaseConnectionAddressingInterface());
00428 }
00429 template<typename BaseConnectionAddressingInterfaceSubclass>
00430 static SharedPtr<BaseConnectionAddressingInterfaceSubclass> create() {
00431 return SharedPtr<BaseConnectionAddressingInterfaceSubclass>(
00432 new BaseConnectionAddressingInterfaceSubclass());
00433 }
00434
00435 virtual ~BaseConnectionAddressingInterface();
00436
00437 QVariantMap immutableProperties() const;
00438
00439
00440
00441 typedef Callback6 < void, const QString&, const QStringList&, const QStringList&,
00442 Tp::AddressingNormalizationMap&, Tp::ContactAttributesMap&, DBusError* > GetContactsByVCardFieldCallback;
00443 void setGetContactsByVCardFieldCallback(const GetContactsByVCardFieldCallback &cb);
00444
00445 typedef Callback5 < void, const QStringList&, const QStringList&,
00446 Tp::AddressingNormalizationMap&, Tp::ContactAttributesMap&, DBusError* > GetContactsByURICallback;
00447 void setGetContactsByURICallback(const GetContactsByURICallback &cb);
00448
00449 protected:
00450 BaseConnectionAddressingInterface();
00451
00452 private:
00453 void createAdaptor();
00454
00455 class Adaptee;
00456 friend class Adaptee;
00457 struct Private;
00458 friend struct Private;
00459 Private *mPriv;
00460 };
00461
00462 class TP_QT_EXPORT BaseConnectionAliasingInterface : public AbstractConnectionInterface
00463 {
00464 Q_OBJECT
00465 Q_DISABLE_COPY(BaseConnectionAliasingInterface)
00466
00467 public:
00468 static BaseConnectionAliasingInterfacePtr create()
00469 {
00470 return BaseConnectionAliasingInterfacePtr(new BaseConnectionAliasingInterface());
00471 }
00472 template<typename BaseConnectionAliasingInterfaceSubclass>
00473 static SharedPtr<BaseConnectionAliasingInterfaceSubclass> create()
00474 {
00475 return SharedPtr<BaseConnectionAliasingInterfaceSubclass>(
00476 new BaseConnectionAliasingInterfaceSubclass());
00477 }
00478
00479 virtual ~BaseConnectionAliasingInterface();
00480
00481 QVariantMap immutableProperties() const;
00482
00483 typedef Callback1<Tp::ConnectionAliasFlags, DBusError*> GetAliasFlagsCallback;
00484 void setGetAliasFlagsCallback(const GetAliasFlagsCallback &cb);
00485 Tp::ConnectionAliasFlags getAliasFlags(DBusError *error);
00486
00487 typedef Callback2<QStringList, const Tp::UIntList &, DBusError*> RequestAliasesCallback;
00488 void setRequestAliasesCallback(const RequestAliasesCallback &cb);
00489 QStringList requestAliases(const Tp::UIntList &contacts, DBusError *error);
00490
00491 typedef Callback2<Tp::AliasMap, const Tp::UIntList &, DBusError*> GetAliasesCallback;
00492 void setGetAliasesCallback(const GetAliasesCallback &cb);
00493 Tp::AliasMap getAliases(const Tp::UIntList &contacts, DBusError *error);
00494
00495 typedef Callback2<void, const Tp::AliasMap &, DBusError*> SetAliasesCallback;
00496 void setSetAliasesCallback(const SetAliasesCallback &cb);
00497 void setAliases(const Tp::AliasMap &aliases, DBusError *error);
00498
00499 void aliasesChanged(const Tp::AliasPairList &aliases);
00500
00501 protected:
00502 BaseConnectionAliasingInterface();
00503
00504 private:
00505 void createAdaptor();
00506
00507 class Adaptee;
00508 friend class Adaptee;
00509 struct Private;
00510 friend struct Private;
00511 Private *mPriv;
00512 };
00513
00514 class TP_QT_EXPORT BaseConnectionAvatarsInterface : public AbstractConnectionInterface
00515 {
00516 Q_OBJECT
00517 Q_DISABLE_COPY(BaseConnectionAvatarsInterface)
00518
00519 public:
00520 static BaseConnectionAvatarsInterfacePtr create()
00521 {
00522 return BaseConnectionAvatarsInterfacePtr(new BaseConnectionAvatarsInterface());
00523 }
00524 template<typename BaseConnectionAvatarsInterfaceSubclass>
00525 static SharedPtr<BaseConnectionAvatarsInterfaceSubclass> create()
00526 {
00527 return SharedPtr<BaseConnectionAvatarsInterfaceSubclass>(
00528 new BaseConnectionAvatarsInterfaceSubclass());
00529 }
00530
00531 virtual ~BaseConnectionAvatarsInterface();
00532
00533 QVariantMap immutableProperties() const;
00534
00535 AvatarSpec avatarDetails() const;
00536 void setAvatarDetails(const AvatarSpec &spec);
00537
00538 typedef Callback2<Tp::AvatarTokenMap, const Tp::UIntList &, DBusError*> GetKnownAvatarTokensCallback;
00539 void setGetKnownAvatarTokensCallback(const GetKnownAvatarTokensCallback &cb);
00540 Tp::AvatarTokenMap getKnownAvatarTokens(const Tp::UIntList &contacts, DBusError *error);
00541
00542 typedef Callback2<void, const Tp::UIntList &, DBusError*> RequestAvatarsCallback;
00543 void setRequestAvatarsCallback(const RequestAvatarsCallback &cb);
00544 void requestAvatars(const Tp::UIntList &contacts, DBusError *error);
00545
00546 typedef Callback3<QString, const QByteArray &, const QString &, DBusError*> SetAvatarCallback;
00547 void setSetAvatarCallback(const SetAvatarCallback &cb);
00548 QString setAvatar(const QByteArray &avatar, const QString &mimeType, DBusError *error);
00549
00550 typedef Callback1<void, DBusError*> ClearAvatarCallback;
00551 void setClearAvatarCallback(const ClearAvatarCallback &cb);
00552 void clearAvatar(DBusError *error);
00553
00554 void avatarUpdated(uint contact, const QString &newAvatarToken);
00555 void avatarRetrieved(uint contact, const QString &token, const QByteArray &avatar, const QString &type);
00556
00557 protected:
00558 BaseConnectionAvatarsInterface();
00559
00560 private:
00561 void createAdaptor();
00562
00563 class Adaptee;
00564 friend class Adaptee;
00565 struct Private;
00566 friend struct Private;
00567 Private *mPriv;
00568 };
00569
00570 }
00571
00572 #endif