File: ContactsBackend.h

package info (click to toggle)
buteo-sync-plugins 0.8.36-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,068 kB
  • sloc: cpp: 8,130; xml: 755; sh: 207; perl: 82; makefile: 11
file content (235 lines) | stat: -rw-r--r-- 7,350 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
/*
 * This file is part of buteo-sync-plugins package
 *
 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 *
 * Contact: Sateesh Kavuri <sateesh.kavuri@nokia.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * version 2.1 as published by the Free Software Foundation.
 *
 * This library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 *
 */
#ifndef CONTACTSBACKEND_H_
#define CONTACTSBACKEND_H_

#include <QContactManager>
#include <QContact>
#include <QContactChangeLogFilter>
#include <QContactId>
#include <QVersitDocument>
#include <QStringList>

using namespace QtContacts;
using namespace QtVersit;
#define QContactLocalId QContactId

enum VCARD_VERSION { VCARD_VERSION21, VCARD_VERSION30 };

struct ContactsStatus
{
    QString id;
    QContactManager::Error errorCode;
};

//! \brief Harmattan Contact storage plugin backend interface class
///
/// This class interfaces with the backend implementation of contact manager on harmattan
/// device
class ContactsBackend
{

public:

    /*!
     * \brief Constructor
     * @param aVerType
     */
    ContactsBackend(QVersitDocument::VersitType aVerType,
                    const QString &syncTarget,
                    const QString &originId);


    /*!
     * \brief Destructor
     */
    ~ContactsBackend();

    /*!
     * \brief Searches for available storage plugins and sets the manager to that plugin
     * @return
     */
    bool init();

    /*!
     * \brief releases the resources held.
     * @return
     */
    bool uninit();

    /*!
     * \brief Return ids of all contacts retrieved from the backend
     * @return List of contact IDs
     */
    QList<QContactLocalId> getAllContactIds();

    /*!
     * \brief Return all new contacts ids in a QList of QStrings
     * @param aTimeStamp Timestamp of the oldest contact ID to be returned
     * @return List of contact IDs
     */
    QList<QContactLocalId> getAllNewContactIds(const QDateTime& aTimeStamp);

    /*!
     * \brief Return all modified contact ids in a QList of QStrings
     * @param aTimeStamp Timestamp of the oldest contact ID to be returned
     * @return List of contact IDs
     */
    QList<QContactLocalId> getAllModifiedContactIds(const QDateTime& aTimeStamp);


    /*!
     * \brief Return all deleted contacts ids in a QList of QStrings
     * @param aTimeStamp Timestamp of the oldest contact ID to be returned
     * @return List of contact IDs
     */
    QList<QContactLocalId> getAllDeletedContactIds(const QDateTime& aTimeStamp);

    /*!
     * \brief Get contact data for a given gontact ID as a QContact object
     * @param aContactId The ID of the contact
     * @param aContact The returned data of the contact
     */
    void getContact(const QContactLocalId& aContactId,
                    QContact& aContact);


    /*!
     * \brief Get multiple contacts at once as vcards
     * @param aContactIDs List of contact IDs to be returned
     * @param aContactData Returned contact data
     */
    void getContacts(const QList<QContactLocalId> &aContactIDs,
                     QMap<QString,QString>& aContactData );
    /*!
     * \brief Get multiple contacts at once as QContact objects
     * @param aContactIds List of contact IDs
     * @param aContacts List of returned contact data
     */
    void getContacts(const QList<QContactLocalId>& aContactIds,
                     QList<QContact>& aContacts);

    /*!
     * \brief Batch addition of contacts
     * @param aContactDataList Contact data
     * @param aStatusMap Returned status data
     * @return Errors
     */
    bool addContacts( const QStringList &aContactDataList,
                      QMap<int, ContactsStatus> &aStatusMap );

    // Functions for modifying contacts

    /*!
     * \brief Modify a contact that whose data and ID are  given as Input
     * @param id Contact ID
     * @param contactdata Contact data
     * @return Error
     */
    QContactManager::Error modifyContact(const QString &id, const QString &contactdata);

    /*!
     * \brief Batch modification
     * @param aContactDataList Contact data
     * @param aContactsIdList Contact IDs
     * @return Errors
     */
    QMap<int, ContactsStatus> modifyContacts(const QStringList &aContactDataList,
                                             const QStringList &aContactsIdList);

    /*!
     * \brief Batch deletion of contacts
     * @param aContactIDList Contact IDs
     * @return Errors
     */
    QMap<int, ContactsStatus> deleteContacts(const QStringList &aContactIDList);


    /*!
     * \brief Tells if batch updates are enabled
     * @return True if enabled, false if not
     */
    inline bool batchUpdatesEnabled() {  return true;     }

    /*!
     * \brief Returns the last time the contact was modified
     * @param  aContactId Id of the contact
     * @return Timestamp of contact's last modification time
     */
    QDateTime lastModificationTime(const QContactLocalId &aContactId);

    /*! \brief Return creation time of single contact
     *
     * @param aContact Contact
     * @return Creation time
     */
    QDateTime getCreationTime( const QContact& aContact );

    /*! \brief Returns creation times of the contacts
     *
     * @param aContactIds Ids of the contacts
     * @return Creation times
     */
    QList<QDateTime> getCreationTimes( const QList<QContactLocalId>& aContactIds );


    /*! \brief Converts a QContact to a VCard
     *
     * @param aContact Contact
     * @return VCard
     */
    QString convertQContactToVCard(const QContact &aContact);
private: // functions

    QMap<QString, QString> convertQContactListToVCardList \
                                        (const QList<QContact> &aContactList);
    QList<QVersitDocument> convertVCardListToVersitDocumentList \
                                (const QStringList &aVCardList);
    void prepareContactSave(QList<QContact> *contactList);

    /*!
     * \brief Returns contact IDs specified by event type and timestamp
     * @param aEventType Added/changed/removed contacts
     * @param aTimeStamp Contacts older than aTimeStamp are filtered out
     * @param aIdList Returned contact IDs
     */
    void getSpecifiedContactIds(const QContactChangeLogFilter::EventType aEventType,
                                const QDateTime &aTimeStamp,
                                QList<QContactLocalId> &aIdList);

private: // data

    QContactManager                *iReadMgr;      ///< A pointer to contact manager
    QContactManager                *iWriteMgr;      ///< A pointer to contact manager

    QVersitDocument::VersitType    iVCardVer;  ///< VCard Version type to operate on

    QString iSyncTarget;    ///< syncTarget to use for contact details
    QString iOriginId;      ///< origin meta-data ID to use for contact details
};





#endif /* CONTACTSBACKEND_H_ */