00001
00023 #ifndef _TelepathyQt4_contact_h_HEADER_GUARD_
00024 #define _TelepathyQt4_contact_h_HEADER_GUARD_
00025
00026 #ifndef IN_TELEPATHY_QT4_HEADER
00027 #error IN_TELEPATHY_QT4_HEADER
00028 #endif
00029
00030 #include <TelepathyQt4/Channel>
00031 #include <TelepathyQt4/Feature>
00032 #include <TelepathyQt4/Object>
00033 #include <TelepathyQt4/Types>
00034
00035 #include <QSet>
00036 #include <QVariantMap>
00037
00038 namespace Tp
00039 {
00040
00041 struct AvatarData;
00042 class ContactCapabilities;
00043 class LocationInfo;
00044 class ContactManager;
00045 class PendingContactInfo;
00046 class PendingOperation;
00047 class Presence;
00048 class ReferencedHandles;
00049
00050 class TELEPATHY_QT4_EXPORT Contact : public Object
00051 {
00052 Q_OBJECT
00053 Q_DISABLE_COPY(Contact)
00054
00055 public:
00056 static const Feature FeatureAlias;
00057 static const Feature FeatureAvatarData;
00058 static const Feature FeatureAvatarToken;
00059 static const Feature FeatureCapabilities;
00060 static const Feature FeatureInfo;
00061 static const Feature FeatureLocation;
00062 static const Feature FeatureSimplePresence;
00063
00064 enum PresenceState {
00065 PresenceStateNo,
00066 PresenceStateAsk,
00067 PresenceStateYes
00068 };
00069
00070 class InfoFields
00071 {
00072 public:
00073 InfoFields();
00074 InfoFields(const ContactInfoFieldList &fields);
00075 InfoFields(const InfoFields &other);
00076 ~InfoFields();
00077
00078 bool isValid() const { return mPriv.constData() != 0; }
00079
00080 InfoFields &operator=(const InfoFields &other);
00081
00082 ContactInfoFieldList fields(const QString &name) const;
00083
00084 ContactInfoFieldList allFields() const;
00085
00086 private:
00087 struct Private;
00088 friend struct Private;
00089 QSharedDataPointer<Private> mPriv;
00090 };
00091
00092 ~Contact();
00093
00094 ContactManagerPtr manager() const;
00095
00096 ReferencedHandles handle() const;
00097
00098
00099 QString id() const;
00100
00101 Features requestedFeatures() const;
00102 Features actualFeatures() const;
00103
00104
00105 QString alias() const;
00106
00107 bool isAvatarTokenKnown() const;
00108 QString avatarToken() const;
00109 AvatarData avatarData() const;
00110 void requestAvatarData();
00111
00112
00113
00114
00115
00116
00117
00118
00119 Presence presence() const;
00120
00121
00122 ContactCapabilities capabilities() const;
00123
00124
00125 LocationInfo location() const;
00126
00127
00128
00129 bool isContactInfoKnown() const;
00130 InfoFields infoFields() const;
00131 PendingOperation *refreshInfo();
00132 PendingContactInfo *requestInfo();
00133
00134
00135
00136
00137 bool isSubscriptionStateKnown() const;
00138 bool isSubscriptionRejected() const;
00139 PresenceState subscriptionState() const;
00140 bool isPublishStateKnown() const;
00141 bool isPublishCancelled() const;
00142 PresenceState publishState() const;
00143 QString publishStateMessage() const;
00144
00145 PendingOperation *requestPresenceSubscription(const QString &message = QString());
00146 PendingOperation *removePresenceSubscription(const QString &message = QString());
00147 PendingOperation *authorizePresencePublication(const QString &message = QString());
00148 PendingOperation *removePresencePublication(const QString &message = QString());
00149
00150
00151
00152
00153 bool isBlocked() const;
00154 PendingOperation *block(bool value = true);
00155
00156
00157
00158
00159
00160
00161 QStringList groups() const;
00162 PendingOperation *addToGroup(const QString &group);
00163 PendingOperation *removeFromGroup(const QString &group);
00164
00165 Q_SIGNALS:
00166 void aliasChanged(const QString &alias);
00167
00168 void avatarTokenChanged(const QString &avatarToken);
00169 void avatarDataChanged(const Tp::AvatarData &avatarData);
00170
00171 void presenceChanged(const Tp::Presence &presence);
00172
00173 void capabilitiesChanged(const Tp::ContactCapabilities &caps);
00174
00175 void locationUpdated(const Tp::LocationInfo &location);
00176
00177 void infoFieldsChanged(const Tp::Contact::InfoFields &infoFields);
00178
00179 void subscriptionStateChanged(Tp::Contact::PresenceState state);
00180
00181 void subscriptionStateChanged(Tp::Contact::PresenceState state,
00182 const Tp::Channel::GroupMemberChangeDetails &details);
00183
00184 void publishStateChanged(Tp::Contact::PresenceState state, const QString &message);
00185
00186 void publishStateChanged(Tp::Contact::PresenceState state,
00187 const Tp::Channel::GroupMemberChangeDetails &details);
00188
00189 void blockStatusChanged(bool blocked);
00190
00191 void blockStatusChanged(bool blocked, const Tp::Channel::GroupMemberChangeDetails &details);
00192
00193 void addedToGroup(const QString &group);
00194 void removedFromGroup(const QString &group);
00195
00196
00197
00198
00199
00200
00201
00202 protected:
00203 Contact(ContactManager *manager, const ReferencedHandles &handle,
00204 const Features &requestedFeatures, const QVariantMap &attributes);
00205
00206 virtual void augment(const Features &requestedFeatures, const QVariantMap &attributes);
00207
00208
00209 void connectNotify(const char *);
00210
00211 private:
00212 static const Feature FeatureRosterGroups;
00213
00214 TELEPATHY_QT4_NO_EXPORT void receiveAlias(const QString &alias);
00215 TELEPATHY_QT4_NO_EXPORT void receiveAvatarToken(const QString &avatarToken);
00216 TELEPATHY_QT4_NO_EXPORT void setAvatarToken(const QString &token);
00217 TELEPATHY_QT4_NO_EXPORT void receiveAvatarData(const AvatarData &);
00218 TELEPATHY_QT4_NO_EXPORT void receiveSimplePresence(const SimplePresence &presence);
00219 TELEPATHY_QT4_NO_EXPORT void receiveCapabilities(const RequestableChannelClassList &caps);
00220 TELEPATHY_QT4_NO_EXPORT void receiveLocation(const QVariantMap &location);
00221 TELEPATHY_QT4_NO_EXPORT void receiveInfo(const ContactInfoFieldList &info);
00222
00223 TELEPATHY_QT4_NO_EXPORT static PresenceState subscriptionStateToPresenceState(uint subscriptionState);
00224 TELEPATHY_QT4_NO_EXPORT void setSubscriptionState(SubscriptionState state);
00225 TELEPATHY_QT4_NO_EXPORT void setPublishState(SubscriptionState state, const QString &message = QString());
00226 TELEPATHY_QT4_NO_EXPORT void setBlocked(bool value);
00227
00228 TELEPATHY_QT4_NO_EXPORT void setAddedToGroup(const QString &group);
00229 TELEPATHY_QT4_NO_EXPORT void setRemovedFromGroup(const QString &group);
00230
00231 struct Private;
00232 friend class Connection;
00233 friend class ContactFactory;
00234 friend class ContactManager;
00235 friend struct Private;
00236 Private *mPriv;
00237 };
00238
00239 }
00240
00241 Q_DECLARE_METATYPE(Tp::Contact::InfoFields);
00242
00243 #endif