Fixes: Add Avatar detail to detail mask when writing back thumbnail
[qtcontacts-tracker:hasselmms-qtcontacts-tracker.git] / src / engine / contactsaverequest.h
1 /*********************************************************************************
2  ** This file is part of QtContacts tracker storage plugin
3  **
4  ** Copyright (c) 2010-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 QTRACKERCONTACTSAVEREQUEST_H
26 #define QTRACKERCONTACTSAVEREQUEST_H
27
28 #include "baserequest.h"
29
30 #include <QElapsedTimer>
31 #include <cubi.h>
32
33 ////////////////////////////////////////////////////////////////////////////////////////////////////
34
35 class QTrackerContactSaveRequest : public QTrackerBaseRequest<QContactSaveRequest>
36 {
37     friend class UpdateBuilder;
38
39     Q_DISABLE_COPY(QTrackerContactSaveRequest)
40     Q_OBJECT
41
42 public:
43     explicit QTrackerContactSaveRequest(QContactAbstractRequest *request,
44                                         QContactTrackerEngine *engine,
45                                         QObject *parent = 0);
46     virtual ~QTrackerContactSaveRequest();
47
48     void setTimestamp(const QDateTime &timestamp) { m_timestamp = timestamp; }
49     const QDateTime & timestamp() const { return m_timestamp; }
50
51     // might modify local ids
52     QString queryString() const;
53
54 public: // QTrackerAbstractRequest API
55     void updateRequest(QContactManager::Error error);
56     Dependencies dependencies() const;
57     void run();
58
59 private:
60     // will remove odd details
61     QContactManager::Error normalizeContact(QContact &contact, QHash<QString, QContactDetail> &detailsByUri) const;
62     QContactManager::Error writebackThumbnails(QContact &contact);
63
64     bool resolveContactIris();
65     bool resolveContactIds();
66
67     bool isFullSaveRequest() const { return m_detailMask.isEmpty(); }
68     bool isPartialSaveRequest() const { return not m_detailMask.isEmpty(); }
69
70 private: // fields
71     QList<QContact> m_contacts;
72     QStringList m_contactIris;
73     QStringList m_detailMask;
74
75     ErrorMap m_errorMap;
76
77     const QString m_nameOrder;
78     QDateTime m_timestamp;
79     int m_batchSize;
80
81     QElapsedTimer m_stopWatch;
82
83     Cubi::ValueList m_weakSyncTargets;
84 };
85
86 ////////////////////////////////////////////////////////////////////////////////////////////////////
87
88 #endif // QTRACKERCONTACTSAVEREQUEST_H