Fix : NB #176921 Change in presence status/status message does not gets reflected...
[qtcontacts-tracker:contactsd.git] / plugins / telepathy / trackersink.h
1 /***************************************************************************
2 **
3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (people-users@projects.maemo.org)
6 **
7 ** This file is part of contactsd.
8 **
9 ** If you have questions regarding the use of this file, please contact
10 ** Nokia at people-users@projects.maemo.org.
11 **
12 ** This library is free software; you can redistribute it and/or
13 ** modify it under the terms of the GNU Lesser General Public
14 ** License version 2.1 as published by the Free Software Foundation
15 ** and appearing in the file LICENSE.LGPL included in the packaging
16 ** of this file.
17 **
18 ****************************************************************************/
19
20 #ifndef TRACKERSINK_H
21 #define TRACKERSINK_H
22
23 #include <QtTracker/Tracker>
24 #include <QtTracker/QLive>
25 #include <QtTracker/ontologies/nco.h>
26 #include <tpcontact.h>
27
28 using namespace SopranoLive;
29
30 /**
31   * \class TrackerSink
32   * This class saves telepathy contacts into tracker and keeps them in sync
33   */
34 class TrackerSink : public QObject
35 {
36     Q_OBJECT
37 public:
38
39     static TrackerSink * instance();
40     static const QUrl & toTrackerStatus(const QString& tpStatus);
41
42     virtual ~TrackerSink();
43
44      /*! \brief saves a telepathy contact into the database
45       * \param contact The telepathy contact you wish to store
46       */
47     void sinkToStorage(const QSharedPointer<TpContact>& contact);
48     /*! \brief retuns the contacts saved in the database
49       * \return  the list of contacts ContactList
50       */
51
52     TpContactList getFromStorage();
53     /*! \brief see if a give contact is already in the database
54       * \param id The id of the contact ex: you@gmail.com
55       * \return true if contact is in the database false otherwise
56       */
57     bool contains(const QString& id);
58
59     bool compareAvatar(const QString& token);
60
61     QSharedPointer<TpContact> getContactFromCache(const QString&);
62
63     void saveAvatarToken(const QString& id, const QString& token, const QString& mime);
64
65     void saveToTracker(const QString&, const QString&, const QString&, const QUrl&, const QString&, const QString&, Tp::ContactCapabilities*);
66
67     void takeAllOffline(const QString& path);
68
69     void getIMContacts(const QString&);
70
71 signals:
72     /*! \brief Signal which is emmited when a new avatar is added to the storage
73       */
74     void  avatarUpdated();
75
76 private Q_SLOTS:
77    void onAvatarUpdated(const QString&, const QString&, const QString&);
78    void onSimplePresenceChanged(TpContact* contact, uint uniqueId);
79    void onCapabilities(TpContact*);
80    void onFeaturesReady(TpContact*);
81    void onChange(uint uniqueId, TpContact::ChangeType type);
82    void onModelUpdate();
83
84 private:
85     void connectOnSignals(TpContactPtr contact);
86     const QUrl& toTrackerStatus(const uint stat);
87
88
89 private:
90     TrackerSink();
91     /**
92      * Return a service pointer: if transaction is on - from transaction.
93      * If transactions is committed - returns tracker.
94      */
95     RDFServicePtr service();
96     void commitTrackerTransaction();
97     void initiateTrackerTransaction();
98     TpContact* find(uint id);
99
100     bool isValidTpContact(const TpContact *tpContact);
101     class Private;
102     Private * const d;
103     friend class ut_trackersink;
104 };
105
106 #endif // TRACKERSINK_H