Home · Modules · All Classes · All Namespaces
contact.h
1 
23 #ifndef _TelepathyQt_contact_h_HEADER_GUARD_
24 #define _TelepathyQt_contact_h_HEADER_GUARD_
25 
26 #ifndef IN_TP_QT_HEADER
27 #error IN_TP_QT_HEADER
28 #endif
29 
30 #include <TelepathyQt/Channel>
31 #include <TelepathyQt/Feature>
32 #include <TelepathyQt/Object>
33 #include <TelepathyQt/Types>
34 
35 #include <QSet>
36 #include <QVariantMap>
37 
38 namespace Tp
39 {
40 
41 struct AvatarData;
42 class ContactCapabilities;
43 class LocationInfo;
44 class ContactManager;
45 class PendingContactInfo;
46 class PendingOperation;
47 class PendingStringList;
48 class Presence;
49 class ReferencedHandles;
50 
51 class TP_QT_EXPORT Contact : public Object
52 {
53  Q_OBJECT
54  Q_DISABLE_COPY(Contact)
55 
56 public:
57  static const Feature FeatureAlias;
58  static const Feature FeatureAvatarData;
61  static const Feature FeatureInfo;
62  static const Feature FeatureLocation;
64  static const Feature FeatureAddresses;
66 
70  PresenceStateYes
71  };
72 
73  class InfoFields
74  {
75  public:
76  InfoFields();
77  InfoFields(const ContactInfoFieldList &fields);
78  InfoFields(const InfoFields &other);
79  ~InfoFields();
80 
81  bool isValid() const { return mPriv.constData() != 0; }
82 
83  InfoFields &operator=(const InfoFields &other);
84 
85  ContactInfoFieldList fields(const QString &name) const;
86 
87  ContactInfoFieldList allFields() const;
88 
89  private:
90  struct Private;
91  friend struct Private;
92  QSharedDataPointer<Private> mPriv;
93  };
94 
95  ~Contact();
96 
97  ContactManagerPtr manager() const;
98 
99  ReferencedHandles handle() const;
100 
101  // TODO filter: exact, prefix, substring match
102  QString id() const;
103 
104  Features requestedFeatures() const;
105  Features actualFeatures() const;
106 
107  // TODO filter: exact, prefix, substring match
108  QString alias() const;
109 
110  QMap<QString, QString> vcardAddresses() const;
111  QStringList uris() const;
112 
113  bool isAvatarTokenKnown() const;
114  QString avatarToken() const;
115  AvatarData avatarData() const;
116  void requestAvatarData();
117 
118  /*
119  * TODO filter:
120  * - exact match of presence().type(), presence().status()
121  * - ANY 1 of a number of presence types/statuses
122  * - presence().type() greater or less than a set value
123  * - have/don't have presence().message() AND exact/prefix/substring
124  */
125  Presence presence() const;
126 
127  // TODO filter: the same as Account filtering by caps
128  ContactCapabilities capabilities() const;
129 
130  // TODO filter: is it available, how accurate, are they near me
131  LocationInfo location() const;
132 
133  // TODO filter: having a specific field, having ANY field,
134  // (field: exact, contents: exact/prefix/substring)
135  bool isContactInfoKnown() const;
136  InfoFields infoFields() const;
137  PendingOperation *refreshInfo();
138  PendingContactInfo *requestInfo();
139 
140  /*
141  * Filters on exact values of these, but also the "in your contact list at all or not" usecase
142  */
143  bool isSubscriptionStateKnown() const;
144  bool isSubscriptionRejected() const;
145  PresenceState subscriptionState() const;
146  bool isPublishStateKnown() const;
147  bool isPublishCancelled() const;
148  PresenceState publishState() const;
149  QString publishStateMessage() const;
150 
151  PendingOperation *requestPresenceSubscription(const QString &message = QString());
152  PendingOperation *removePresenceSubscription(const QString &message = QString());
153  PendingOperation *authorizePresencePublication(const QString &message = QString());
154  PendingOperation *removePresencePublication(const QString &message = QString());
155 
156  /*
157  * Filter on being blocked or not
158  */
159  bool isBlocked() const;
160  PendingOperation *block();
161  PendingOperation *blockAndReportAbuse();
162  PendingOperation *unblock();
163 
164  /*
165  * Filter on the groups they're in - to show a specific group only
166  *
167  * Also prefix/substring match on ANY of the groups of the contact
168  */
169  QStringList groups() const;
170  PendingOperation *addToGroup(const QString &group);
171  PendingOperation *removeFromGroup(const QString &group);
172 
173  QStringList clientTypes() const;
174  PendingStringList *requestClientTypes();
175 
176 Q_SIGNALS:
177  void aliasChanged(const QString &alias);
178 
179  void avatarTokenChanged(const QString &avatarToken);
180  void avatarDataChanged(const Tp::AvatarData &avatarData);
181 
182  void presenceChanged(const Tp::Presence &presence);
183 
184  void capabilitiesChanged(const Tp::ContactCapabilities &caps);
185 
186  void locationUpdated(const Tp::LocationInfo &location);
187 
188  void infoFieldsChanged(const Tp::Contact::InfoFields &infoFields);
189 
190  void subscriptionStateChanged(Tp::Contact::PresenceState state);
191 
192  void publishStateChanged(Tp::Contact::PresenceState state, const QString &message);
193 
194  void blockStatusChanged(bool blocked);
195 
196  void addedToGroup(const QString &group);
197  void removedFromGroup(const QString &group);
198 
199  void clientTypesChanged(const QStringList &clientTypes);
200 
201  // TODO: consider how the Renaming interface should work and map to Contacts
202  // I guess it would be something like:
203  // void renamedTo(Tp::ContactPtr)
204  // with that contact getting the same features requested as the current one. Or would we rather
205  // want to signal that change right away with a handle?
206 
207 protected:
208  Contact(ContactManager *manager, const ReferencedHandles &handle,
209  const Features &requestedFeatures, const QVariantMap &attributes);
210 
211  virtual void augment(const Features &requestedFeatures, const QVariantMap &attributes);
212 
213 private:
214  static const Feature FeatureRosterGroups;
215 
216  TP_QT_NO_EXPORT void receiveAlias(const QString &alias);
217  TP_QT_NO_EXPORT void receiveAvatarToken(const QString &avatarToken);
218  TP_QT_NO_EXPORT void setAvatarToken(const QString &token);
219  TP_QT_NO_EXPORT void receiveAvatarData(const AvatarData &);
220  TP_QT_NO_EXPORT void receiveSimplePresence(const SimplePresence &presence);
221  TP_QT_NO_EXPORT void receiveCapabilities(const RequestableChannelClassList &caps);
222  TP_QT_NO_EXPORT void receiveLocation(const QVariantMap &location);
223  TP_QT_NO_EXPORT void receiveInfo(const ContactInfoFieldList &info);
224  TP_QT_NO_EXPORT void receiveAddresses(const QMap<QString, QString> &addresses,
225  const QStringList &uris);
226  TP_QT_NO_EXPORT void receiveClientTypes(const QStringList &clientTypes);
227 
228  TP_QT_NO_EXPORT static PresenceState subscriptionStateToPresenceState(uint subscriptionState);
229  TP_QT_NO_EXPORT void setSubscriptionState(SubscriptionState state);
230  TP_QT_NO_EXPORT void setPublishState(SubscriptionState state, const QString &message = QString());
231  TP_QT_NO_EXPORT void setBlocked(bool value);
232 
233  TP_QT_NO_EXPORT void setAddedToGroup(const QString &group);
234  TP_QT_NO_EXPORT void setRemovedFromGroup(const QString &group);
235 
236  struct Private;
237  friend class Connection;
238  friend class ContactFactory;
239  friend class ContactManager;
240  friend struct Private;
241  Private *mPriv;
242 };
243 
244 } // Tp
245 
246 Q_DECLARE_METATYPE(Tp::Contact::InfoFields);
247 
248 #endif
Definition: contact.h:68
The ContactManager class is responsible for managing contacts.
Definition: contact-manager.h:50
PresenceState
Definition: contact.h:67
static const Feature FeatureAddresses
Definition: contact.h:64
static const Feature FeatureAvatarData
Definition: contact.h:58
static const Feature FeatureAlias
Definition: contact.h:57
QList< ContactInfoField > ContactInfoFieldList
Definition: build/TelepathyQt/_gen/types.h:1213
static const Feature FeatureCapabilities
Definition: contact.h:60
The Feature class represents a feature that can be enabled on demand.
Definition: feature.h:41
The PendingContactInfo class represents the parameters of and the reply to an asynchronous contact in...
Definition: pending-contact-info.h:39
static const Feature FeatureClientTypes
Definition: contact.h:65
Definition: contact.h:69
The Contact::InfoFields class represents the information of a Telepathy contact.
Definition: contact.h:73
Helper container for safe management of handle lifetimes. Every handle in a ReferencedHandles contain...
Definition: referenced-handles.h:47
static const Feature FeatureSimplePresence
Definition: contact.h:63
The AvatarData class represents a Telepathy avatar.
Definition: avatar.h:40
The Connection class represents a Telepathy connection.
Definition: connection.h:61
static const Feature FeatureLocation
Definition: contact.h:62
The PendingStringList class is a generic subclass of PendingOperation representing a pending D-Bus me...
Definition: pending-string-list.h:37
SubscriptionState
Definition: build/TelepathyQt/_gen/constants.h:1789
The LocationInfo class represents the location of a Telepathy Contact.
Definition: location-info.h:40
The ContactCapabilities class represents the capabilities of a Contact.
Definition: contact-capabilities.h:38
static const Feature FeatureInfo
Definition: contact.h:61
bool isValid() const
Definition: contact.h:81
The Features class represents a list of Feature.
Definition: feature.h:61
The Contact class represents a Telepathy contact.
Definition: contact.h:51
The Presence class represents a Telepathy simple presence.
Definition: presence.h:36
Definition: build/TelepathyQt/_gen/types.h:2776
The Object class provides an object with property notification.
Definition: object.h:39
Definition: abstract-adaptor.cpp:31
static const Feature FeatureAvatarToken
Definition: contact.h:59
The ContactFactory class is responsible for constructing Contact objects according to application-def...
Definition: contact-factory.h:44
QList< RequestableChannelClass > RequestableChannelClassList
Definition: build/TelepathyQt/_gen/types.h:2664
The PendingOperation class is a base class for pending asynchronous operations.
Definition: pending-operation.h:45