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