1/****************************************************************************
2**
3** Copyright (C) 2015 The Qt Company Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the test suite of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL21$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 2.1 or version 3 as published by the Free
20** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22** following information to ensure the GNU Lesser General Public License
23** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25**
26** As a special exception, The Qt Company gives you certain additional
27** rights. These rights are described in The Qt Company LGPL Exception
28** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29**
30** $QT_END_LICENSE$
31**
32****************************************************************************/
33
34#ifndef QCONTACTMANAGERDATAHOLDER_H
35#define QCONTACTMANAGERDATAHOLDER_H
36
37#include <QtCore/qdebug.h>
38#include <QtCore/qlist.h>
39#include <QtCore/qmap.h>
40#include <QtCore/qstring.h>
41
42#include <QtContacts/qcontactmanager.h>
43
44//
45// W A R N I N G
46// -------------
47//
48// This file is not part of the Qt API. It exists purely as an
49// implementation detail. This header file may change from version to
50// version without notice, or even be removed.
51//
52// We mean it.
53//
54
55QT_BEGIN_NAMESPACE_CONTACTS
56class QContact;
57QT_END_NAMESPACE_CONTACTS
58
59QTCONTACTS_USE_NAMESPACE
60
61class QContactManagerDataHolder
62{
63public:
64 QContactManagerDataHolder()
65 {
66 QStringList managerNames = QContactManager::availableManagers();
67
68 foreach(const QString& mgr, managerNames) {
69 // Don't bother with these
70 if (mgr == "memory" || mgr == "invalid" || mgr == "testdummy" || mgr == "maliciousplugin" || mgr == "testlazy")
71 continue;
72 QMap<QString, QString> params;
73 QString mgrUri = QContactManager::buildUri(managerName: mgr, params);
74 QContactManager* cm = QContactManager::fromUri(uri: mgrUri);
75 if (cm) {
76 qDebug() << "Saving contacts for" << mgrUri;
77 QList<QContact> contacts = cm->contacts();
78 savedContacts.insert(key: cm->managerName(),value: contacts);
79 QList<QContactId> ids;
80 foreach(const QContact& contact, contacts)
81 ids.append(t: contact.id());
82 cm->removeContacts(contactIds: ids, errorMap: 0);
83 delete cm;
84 }
85 }
86 }
87
88 ~QContactManagerDataHolder()
89 {
90 foreach(const QString& mgrUri, savedContacts.keys()) {
91 QContactManager* cm = QContactManager::fromUri(uri: mgrUri);
92 if (cm) {
93 qDebug() << "Restoring contacts for" << mgrUri;
94 QList<QContact> contacts = savedContacts.value(akey: mgrUri);
95 cm->saveContacts(contacts: &contacts, errorMap: 0);
96 // XXX this doesn't restore relationships..
97 delete cm;
98 }
99 }
100 }
101private:
102 QMap<QString, QList<QContact> > savedContacts;
103};
104
105#endif // QCONTACTMANAGERDATAHOLDER_H
106

source code of qtpim/tests/auto/contacts/qcontactmanagerdataholder.h