New: Add omit-presence-changes parameter
[qtcontacts-tracker:hasselmms-qtcontacts-tracker.git] / src / engine / trackerchangelistener.h
1 /*********************************************************************************
2  ** This file is part of QtContacts tracker storage plugin
3  **
4  ** Copyright (c) 2009-2011 Nokia Corporation and/or its subsidiary(-ies).
5  **
6  ** Contact:  Nokia Corporation (info@qt.nokia.com)
7  **
8  ** GNU Lesser General Public License Usage
9  ** This file may be used under the terms of the GNU Lesser General Public License
10  ** version 2.1 as published by the Free Software Foundation and appearing in the
11  ** file LICENSE.LGPL included in the packaging of this file.  Please review the
12  ** following information to ensure the GNU Lesser General Public License version
13  ** 2.1 requirements will be met:
14  ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
15  **
16  ** In addition, as a special exception, Nokia gives you certain additional rights.
17  ** These rights are described in the Nokia Qt LGPL Exception version 1.1, included
18  ** in the file LGPL_EXCEPTION.txt in this package.
19  **
20  ** Other Usage
21  ** Alternatively, this file may be used in accordance with the terms and
22  ** conditions contained in a signed written agreement between you and Nokia.
23  *********************************************************************************/
24
25 #ifndef TRACKERCHANGELISTENER_H_
26 #define TRACKERCHANGELISTENER_H_
27
28 #include <qtcontacts.h>
29
30 #include <QtCore/QTimer>
31 #include <QtSparqlTrackerExtensions/TrackerChangeNotifier>
32
33 QTM_USE_NAMESPACE
34
35 ////////////////////////////////////////////////////////////////////////////////////////////////////
36
37 class QContactTrackerEngineParameters;
38
39 class QctQueue;
40 class QctTrackerIdResolver;
41
42 ////////////////////////////////////////////////////////////////////////////////////////////////////
43
44 /*!
45  * \class TrackerChangeListener
46  * \brief Translates signals from tracker and to contact signals
47  * Listens for tracker signals, computes which contacts are (and what is) changed and emits
48  * signals about contact change. Initially designed to compute change signals for
49  * QContactTrackerEngine
50  */
51 class QctTrackerChangeListener : public QObject
52 {
53     Q_OBJECT
54
55 public:
56     explicit QctTrackerChangeListener(const QContactTrackerEngineParameters &params,
57                                       QObject *parent = 0);
58     virtual ~QctTrackerChangeListener();
59
60 signals:
61     // signals are with the same semantics as in QContactManagerEngine
62     void contactsAdded(const QList<QContactLocalId>& contactIds);
63     void contactsChanged(const QList<QContactLocalId>& contactIds);
64     void contactsRemoved(const QList<QContactLocalId>& contactIds);
65     void relationshipsAdded(const QList<QContactLocalId>& affectedContactIds);
66     void relationshipsRemoved(const QList<QContactLocalId>& affectedContactIds);
67
68 private slots:
69     void onGraphChanged(const QList<TrackerChangeNotifier::Quad>& deletes,
70                         const QList<TrackerChangeNotifier::Quad>& inserts);
71     void onTrackerIdsResolved();
72
73     void emitQueuedNotifications();
74
75 private:
76     void processNotifications(QList<TrackerChangeNotifier::Quad> &notifications,
77                               QSet<QContactLocalId> &additionsOrRemovals,
78                               QSet<QContactLocalId> &relationshipChanges,
79                               QSet<QContactLocalId> &propertyChanges,
80                               bool matchTaggedSignals);
81
82     void resetTaskQueue();
83
84 private:
85     QList<TrackerChangeNotifier::Quad> m_deleteNotifications;
86     QList<TrackerChangeNotifier::Quad> m_insertNotifications;
87
88
89     QctTrackerIdResolver *m_resolver;
90     QctQueue *m_taskQueue;
91
92     QTimer m_signalCoalescingTimer;
93
94     struct {
95         QList<uint> contactClasses;
96         uint belongsToGroup;
97         uint contactLocalUID;
98         uint rdfType;
99         uint contentLastModified;
100         uint graph;
101     } m_trackerIds;
102
103     bool m_debugSignals : 1;
104     const bool m_omitPresenceChanges : 1;
105 };
106
107 #endif /* TRACKERCHANGELISTENER_H_ */