00001 /* 00002 * This file is part of TelepathyQt4 00003 * 00004 * Copyright (C) 2008 Collabora Ltd. <http://www.collabora.co.uk/> 00005 * Copyright (C) 2008 Nokia Corporation 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00020 */ 00021 00022 #ifndef _TelepathyQt4_cli_contact_h_HEADER_GUARD_ 00023 #define _TelepathyQt4_cli_contact_h_HEADER_GUARD_ 00024 00025 #ifndef IN_TELEPATHY_QT4_HEADER 00026 #error IN_TELEPATHY_QT4_HEADER 00027 #endif 00028 00029 #include <QObject> 00030 #include <QSet> 00031 #include <QVariantMap> 00032 00033 #include <TelepathyQt4/Types> 00034 00035 namespace Telepathy 00036 { 00037 namespace Client 00038 { 00039 class ContactManager; 00040 class ReferencedHandles; 00041 00042 class Contact : public QObject 00043 { 00044 Q_OBJECT 00045 00046 public: 00047 enum Feature { 00048 FeatureAlias, 00049 FeatureAvatarToken, 00050 FeatureSimplePresence, 00051 _Padding = 0xFFFFFFFF 00052 }; 00053 00054 ContactManager *manager() const; 00055 00056 ReferencedHandles handle() const; 00057 QString id() const; 00058 00059 QSet<Feature> requestedFeatures() const; 00060 QSet<Feature> actualFeatures() const; 00061 00062 QString alias() const; 00063 00064 bool isAvatarTokenKnown() const; 00065 QString avatarToken() const; 00066 00067 QString presenceStatus() const; 00068 uint presenceType() const; 00069 QString presenceMessage() const; 00070 00071 ~Contact(); 00072 00073 Q_SIGNALS: 00074 void aliasChanged(const QString &alias); 00075 void avatarTokenChanged(const QString &avatarToken); 00076 void simplePresenceChanged(const QString &status, uint type, const QString &presenceMessage); 00077 00078 // TODO: consider how the Renaming interface should work and map to Contacts 00079 // I guess it would be something like: 00080 // void renamedTo(QSharedPointer<Contact>) 00081 // with that contact getting the same features requested as the current one. Or would we rather 00082 // want to signal that change right away with a handle? 00083 00084 private: 00085 Q_DISABLE_COPY(Contact); 00086 00087 Contact(ContactManager *manager, const ReferencedHandles &handle, 00088 const QSet<Feature> &requestedFeatures, const QVariantMap &attributes); 00089 00090 void augment(const QSet<Feature> &requestedFeatures, const QVariantMap &attributes); 00091 00092 void receiveAlias(const QString &alias); 00093 void receiveAvatarToken(const QString &avatarToken); 00094 void receiveSimplePresence(const SimplePresence &presence); 00095 00096 struct Private; 00097 friend class ContactManager; 00098 friend struct Private; 00099 Private *mPriv; 00100 }; 00101 00102 } // Telepathy::Client 00103 } // Telepathy 00104 00105 #endif