00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _TelepathyQt4_cli_contact_manager_h_HEADER_GUARD_
00023 #define _TelepathyQt4_cli_contact_manager_h_HEADER_GUARD_
00024
00025 #ifndef IN_TELEPATHY_QT4_HEADER
00026 #error IN_TELEPATHY_QT4_HEADER
00027 #endif
00028
00029 #include <QObject>
00030
00031 #include <QList>
00032 #include <QSet>
00033
00034 #include <TelepathyQt4/Types>
00035 #include <TelepathyQt4/Client/Contact>
00036 #include <TelepathyQt4/Client/Channel>
00037 #include <TelepathyQt4/Client/ReferencedHandles>
00038
00039 namespace Telepathy
00040 {
00041 namespace Client
00042 {
00043
00044 class Connection;
00045 class PendingContacts;
00046 class PendingOperation;
00047
00048 class ContactManager : public QObject
00049 {
00050 Q_OBJECT
00051
00052 public:
00053
00054 Connection *connection() const;
00055
00056 bool isSupported() const;
00057 QSet<Contact::Feature> supportedFeatures() const;
00058
00059 Contacts allKnownContacts() const;
00060
00061 bool canRequestPresenceSubscription() const;
00062 bool subscriptionRequestHasMessage() const;
00063 PendingOperation *requestPresenceSubscription(
00064 const QList<ContactPtr> &contacts, const QString &message = QString());
00065 bool canRemovePresenceSubscription() const;
00066 bool subscriptionRemovalHasMessage() const;
00067 bool canRescindPresenceSubscriptionRequest() const;
00068 bool subscriptionRescindingHasMessage() const;
00069 PendingOperation *removePresenceSubscription(
00070 const QList<ContactPtr> &contacts, const QString &message = QString());
00071 bool canAuthorizePresencePublication() const;
00072 bool publicationAuthorizationHasMessage() const;
00073 PendingOperation *authorizePresencePublication(
00074 const QList<ContactPtr> &contacts, const QString &message = QString());
00075 bool publicationRejectionHasMessage() const;
00076 bool canRemovePresencePublication() const;
00077 bool publicationRemovalHasMessage() const;
00078 PendingOperation *removePresencePublication(
00079 const QList<ContactPtr> &contacts, const QString &message = QString());
00080
00081 bool canBlockContacts() const;
00082 PendingOperation *blockContacts(
00083 const QList<ContactPtr> &contacts, bool value = true);
00084
00085 PendingContacts *contactsForHandles(const UIntList &handles,
00086 const QSet<Contact::Feature> &features = QSet<Contact::Feature>());
00087 PendingContacts *contactsForHandles(const ReferencedHandles &handles,
00088 const QSet<Contact::Feature> &features = QSet<Contact::Feature>());
00089
00090 PendingContacts *contactsForIdentifiers(const QStringList &identifiers,
00091 const QSet<Contact::Feature> &features = QSet<Contact::Feature>());
00092
00093 PendingContacts *upgradeContacts(const QList<ContactPtr> &contacts,
00094 const QSet<Contact::Feature> &features);
00095
00096 ContactPtr lookupContactByHandle(uint handle);
00097
00098 Q_SIGNALS:
00099 void presencePublicationRequested(const Telepathy::Client::Contacts &contacts);
00100
00101 private Q_SLOTS:
00102 void onAliasesChanged(const Telepathy::AliasPairList &);
00103 void onAvatarUpdated(uint, const QString &);
00104 void onPresencesChanged(const Telepathy::SimpleContactPresences &);
00105
00106 void onSubscribeChannelMembersChanged(
00107 const Telepathy::Client::Contacts &groupMembersAdded,
00108 const Telepathy::Client::Contacts &groupLocalPendingMembersAdded,
00109 const Telepathy::Client::Contacts &groupRemotePendingMembersAdded,
00110 const Telepathy::Client::Contacts &groupMembersRemoved,
00111 const Telepathy::Client::Channel::GroupMemberChangeDetails &details);
00112 void onPublishChannelMembersChanged(
00113 const Telepathy::Client::Contacts &groupMembersAdded,
00114 const Telepathy::Client::Contacts &groupLocalPendingMembersAdded,
00115 const Telepathy::Client::Contacts &groupRemotePendingMembersAdded,
00116 const Telepathy::Client::Contacts &groupMembersRemoved,
00117 const Telepathy::Client::Channel::GroupMemberChangeDetails &details);
00118 void onDenyChannelMembersChanged(
00119 const Telepathy::Client::Contacts &groupMembersAdded,
00120 const Telepathy::Client::Contacts &groupLocalPendingMembersAdded,
00121 const Telepathy::Client::Contacts &groupRemotePendingMembersAdded,
00122 const Telepathy::Client::Contacts &groupMembersRemoved,
00123 const Telepathy::Client::Channel::GroupMemberChangeDetails &details);
00124
00125 private:
00126 struct ContactListChannel
00127 {
00128 enum Type {
00129 TypeSubscribe = 0,
00130 TypePublish,
00131 TypeStored,
00132 TypeDeny,
00133 LastType
00134 };
00135
00136 ContactListChannel()
00137 : type((Type) -1)
00138 {
00139 }
00140
00141 ContactListChannel(Type type)
00142 : type(type)
00143 {
00144 }
00145
00146 ~ContactListChannel()
00147 {
00148 }
00149
00150 static QString identifierForType(Type type);
00151 static uint typeForIdentifier(const QString &identifier);
00152
00153 Type type;
00154 ReferencedHandles handle;
00155 ChannelPtr channel;
00156 };
00157
00158 ContactManager(Connection *parent);
00159 ~ContactManager();
00160
00161 ContactPtr ensureContact(const ReferencedHandles &handle,
00162 const QSet<Contact::Feature> &features, const QVariantMap &attributes);
00163
00164 void setContactListChannels(const QMap<uint, ContactListChannel> &contactListsChannels);
00165
00166 struct Private;
00167 friend struct Private;
00168 friend class Connection;
00169 friend class PendingContacts;
00170 Private *mPriv;
00171 };
00172
00173 }
00174 }
00175
00176 #endif