Move tracker plugin sources into src folder.
[qtcontacts-tracker:qtcontacts-tracker.git] / src / qtrackercontactfetchrequest.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the Qt Mobility Components.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file.  Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 **
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27 **
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QTRACKERCONTACTFETCHREQUEST_H_
43 #define QTRACKERCONTACTFETCHREQUEST_H_
44
45 #include "qtrackercontactasyncrequest.h"
46
47 #include <QContactOnlineAccount>
48 #include <QContactManager>
49
50 #include <QtTracker/Tracker>
51 #include <QtTracker/QLive>
52
53 QTM_BEGIN_NAMESPACE
54 class QContactAbstractRequest;
55 class QContactManagerEngine;
56 QTM_END_NAMESPACE
57
58 QTM_USE_NAMESPACE
59
60 namespace IMAccount {
61     enum IMResultColumn {
62         URI = 0,
63         ContactPresence,
64         ContactMessage,
65         ContactNickname,
66         ContactDisplayname,
67         ContactIMId,
68         ContactAvatar
69     };
70 };
71
72 namespace IMContact {
73     enum IMResultColumn {
74         URI,
75         ContactId,
76         ContactIMId,
77         ContactPresence,
78         ContactMessage,
79         ContactNickname,
80         AccountType,
81         Capabilities,
82         ServiceProvider
83     };
84 };
85
86 /*!
87  * Running QContactFetchRequest. Doing the async tracker query and when data is ready setting the
88  * finished status of request. \sa QTrackerContactFetchRequest
89  */
90 class QTrackerContactFetchRequest : public QObject, public QTrackerContactAsyncRequest
91 {
92     Q_OBJECT
93 //    Q_ENUMS(IMResultColumn)
94 public:
95     QTrackerContactFetchRequest(QContactAbstractRequest* req, QContactManagerEngine* parent);
96 public slots:
97     void contactsReady();
98     void phoneNumbersReady();
99     void emailAddressesReady();
100     void imAcountsReady();
101
102 protected slots:
103     virtual void run();
104     virtual void emitFinished(QContactManager::Error error = QContactManager::NoError);
105
106 protected:
107     QContactManager::Error applyFilterToContact(SopranoLive::RDFVariable &variable, const QContactFilter &filter);
108     QContactManager::Error applyDetailRangeFilterToContact(SopranoLive::RDFVariable &variable, const QContactFilter &filter);
109
110     // contacts query
111     SopranoLive::LiveNodes query;
112
113     QList<SopranoLive::LiveNodes> queryPhoneNumbersNodes; // 2 - one for affiliations and another one for PersonContact
114     int queryPhoneNumbersNodesPending;
115     QList<SopranoLive::LiveNodes> queryEmailAddressNodes; // 2 - one for affiliations and another one for PersonContact
116     int queryEmailAddressNodesPending;
117     SopranoLive::LiveNodes queryIMAccountNodes;
118     int queryIMAccountNodesPending;
119
120     // result of the request - multiple queries updating it
121     QList<QContact> result;
122
123 private:
124     bool isMeContact(const QContactFilter &filter);
125     // fills received phone number from tracker to list of contacts to QContactPhoneMumber details
126     // all the following methods update \sa result
127     void processQueryPhoneNumbers(SopranoLive::LiveNodes queryPhoneNumbers, bool affiliationNumbers);
128     void processQueryEmailAddresses(SopranoLive::LiveNodes queryEmailAddresses, bool affiliationEmails);
129     void processQueryIMContacts(SopranoLive::LiveNodes queryIMContacts);
130     void validateRequest();
131     void readFromQueryRowToContact(QContact &contact, int queryRow);
132     void addContactToResultSet(QContact &contact);
133     QContactOnlineAccount getOnlineAccountFromIMQuery(SopranoLive::LiveNodes imAccountQuery, int queryRow);
134     QContactOnlineAccount getIMAccountFromIMQuery(SopranoLive::LiveNodes imAccountQuery, int queryRow) ;
135     QContactOnlineAccount getIMContactFromIMQuery(SopranoLive::LiveNodes imAccountQuery, int queryRow);
136
137     // access existing contacts in result list, contactid to index in \sa result lookup
138     QHash<quint32, int> id2ContactLookup;
139 };
140
141 #endif /* QTRACKERCONTACTFETCHREQUEST_H_ */