Move tracker plugin sources into src folder.
[qtcontacts-tracker:qtcontacts-tracker.git] / src / qtrackercontactsaverequest.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 QTRACKERCONTACTSAVEREQUEST_H_
43 #define QTRACKERCONTACTSAVEREQUEST_H_
44
45 #include <QObject>
46 #include <QPair>
47 #include <QList>
48 #include <QSet>
49 #include <QtTracker/QLive>
50 #include <QtTracker/ontologies/nco.h>
51
52 #include <qtrackercontactasyncrequest.h>
53
54 #include <qmobilityglobal.h>
55 #include <qtcontacts.h>
56
57 QTM_BEGIN_NAMESPACE
58 class QContactAbstractRequest;
59 class QContactManagerEngine;
60 QTM_END_NAMESPACE
61
62 QTM_USE_NAMESPACE
63
64 class QTrackerContactSaveRequest: public QObject, public QTrackerContactAsyncRequest
65 {
66     Q_OBJECT
67 public:
68     QTrackerContactSaveRequest(QContactAbstractRequest* req, QContactManagerEngine* parent);
69     virtual ~QTrackerContactSaveRequest();
70
71 private Q_SLOTS:
72     void onTrackerSignal(const QList<QContactLocalId> &ids);
73
74 private:
75     /* worker methods*/
76     void saveContacts(const QList<QContact> &contacts);
77     void computeProgress(const QList<QContactLocalId> &addedIds);
78     void addAffiliation(SopranoLive::RDFServicePtr service, QContactLocalId contactId);
79     void saveContactDetails(SopranoLive::RDFServicePtr service,SopranoLive::Live<SopranoLive::nco::PersonContact>& ncoContact,const QContact &contact, bool newContact);
80     void saveAddresses(SopranoLive::RDFServicePtr service, SopranoLive::RDFVariable &var, const QList<QContactDetail> &details, bool newContact );
81     void saveEmails(SopranoLive::RDFServicePtr service, SopranoLive::RDFVariable &var, const QList<QContactDetail> &details, bool newContact );
82     void saveUrls(SopranoLive::RDFServicePtr service, SopranoLive::RDFVariable &var, const QList<QContactDetail> &details, bool newContact );
83     void savePhoneNumbers(SopranoLive::RDFServicePtr service, SopranoLive::RDFVariable &var, const QList<QContactDetail> &details, bool newContact );
84     void deletePhoneNumbers(SopranoLive::RDFServicePtr service, const SopranoLive::RDFVariable& rdfContactIn);
85     void addTag(SopranoLive::RDFServicePtr service, SopranoLive::RDFVariable &var, const QString &tag);
86     void createTagIfItDoesntExistAlready(SopranoLive::RDFServicePtr service, const QString &tag);
87
88 private:
89     /*holding the data about status of async operation*/
90     QList<QContact> contactsFinished;
91
92     QMap<int, QContactManager::Error> errorsOfContactsFinished;
93     // needed for error reporting - errorsOfContactsFinished is map (array index -> error)
94     QMap<QContactLocalId, int> id2Index;
95     int errorCount;
96
97     /* extracted utilities */
98     static QStringList detailsDefinitionsInContact(const QContact &c);
99     static bool contactHasWorkRelatedDetails(const QContact &c);
100     QSet<QContactLocalId> pendingContactIds;
101
102 };
103
104 #endif /* QTRACKERCONTACTSAVEREQUEST_H_ */