1 /*
2 SPDX-FileCopyrightText: 2012-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 #include "abstractaddressbook.h"
7 #include "abstractdisplayinfo.h"
8
9 #include "libimportwizard_debug.h"
10 #include <Akonadi/CollectionDialog>
11 #include <Akonadi/Item>
12 #include <Akonadi/ItemCreateJob>
13 #include <KContacts/Addressee>
14 #include <KContacts/ContactGroup>
15 #include <KLocalizedString>
16
17 #include <QPointer>
18 using namespace LibImportWizard;
AbstractAddressBook()19 AbstractAddressBook::AbstractAddressBook()
20 : mCollection(-1)
21 {
22 }
23
~AbstractAddressBook()24 AbstractAddressBook::~AbstractAddressBook()
25 {
26 }
27
selectAddressBook()28 bool AbstractAddressBook::selectAddressBook()
29 {
30 addAddressBookImportInfo(i18n("Creating new contact..."));
31 if (!mCollection.isValid()) {
32 const QStringList mimeTypes(KContacts::Addressee::mimeType());
33 QPointer<Akonadi::CollectionDialog> dlg = new Akonadi::CollectionDialog(mAbstractDisplayInfo ? mAbstractDisplayInfo->parentWidget() : nullptr);
34 dlg->setMimeTypeFilter(mimeTypes);
35 dlg->setAccessRightsFilter(Akonadi::Collection::CanCreateItem);
36 dlg->setWindowTitle(i18nc("@title:window", "Select Address Book"));
37 dlg->setDescription(i18n("Select the address book the new contact shall be saved in:"));
38
39 if (dlg->exec() == QDialog::Accepted && dlg) {
40 mCollection = dlg->selectedCollection();
41 } else {
42 addAddressBookImportError(i18n("Address Book was not selected."));
43 delete dlg;
44 return false;
45 }
46 delete dlg;
47 }
48 return true;
49 }
50
createGroup(const KContacts::ContactGroup & group)51 void AbstractAddressBook::createGroup(const KContacts::ContactGroup &group)
52 {
53 if (selectAddressBook()) {
54 Akonadi::Item item;
55 item.setPayload<KContacts::ContactGroup>(group);
56 item.setMimeType(KContacts::ContactGroup::mimeType());
57
58 auto job = new Akonadi::ItemCreateJob(item, mCollection);
59 connect(job, &Akonadi::ItemCreateJob::result, this, &AbstractAddressBook::slotStoreDone);
60 }
61 }
62
addImportContactNote(KContacts::Addressee & address,const QString & applicationName)63 void AbstractAddressBook::addImportContactNote(KContacts::Addressee &address, const QString &applicationName)
64 {
65 QString currentNote = address.note();
66 if (!currentNote.isEmpty()) {
67 currentNote += QLatin1Char('\n');
68 }
69 currentNote += i18n("Imported from \"%1\"", applicationName);
70 address.setNote(currentNote);
71 }
72
createContact(const KContacts::Addressee & address)73 void AbstractAddressBook::createContact(const KContacts::Addressee &address)
74 {
75 if (selectAddressBook()) {
76 Akonadi::Item item;
77 item.setPayload<KContacts::Addressee>(address);
78 item.setMimeType(KContacts::Addressee::mimeType());
79 auto job = new Akonadi::ItemCreateJob(item, mCollection);
80 connect(job, &Akonadi::ItemCreateJob::result, this, &AbstractAddressBook::slotStoreDone);
81 }
82 }
83
slotStoreDone(KJob * job)84 void AbstractAddressBook::slotStoreDone(KJob *job)
85 {
86 if (job->error()) {
87 qCDebug(LIBIMPORTWIZARD_LOG) << " job->errorString() : " << job->errorString();
88 addAddressBookImportError(i18n("Error during contact creation: %1", job->errorString()));
89 return;
90 }
91 addAddressBookImportInfo(i18n("Contact creation complete"));
92 }
93
addImportInfo(const QString & log)94 void AbstractAddressBook::addImportInfo(const QString &log)
95 {
96 addAddressBookImportInfo(log);
97 }
98
addImportError(const QString & log)99 void AbstractAddressBook::addImportError(const QString &log)
100 {
101 addAddressBookImportError(log);
102 }
103
addAddressBookImportInfo(const QString & log)104 void AbstractAddressBook::addAddressBookImportInfo(const QString &log)
105 {
106 if (mAbstractDisplayInfo) {
107 mAbstractDisplayInfo->addressbookImportInfo(log);
108 }
109 }
110
addAddressBookImportError(const QString & log)111 void AbstractAddressBook::addAddressBookImportError(const QString &log)
112 {
113 if (mAbstractDisplayInfo) {
114 mAbstractDisplayInfo->addressbookImportError(log);
115 }
116 }
117
cleanUp()118 void AbstractAddressBook::cleanUp()
119 {
120 mCollection = Akonadi::Collection();
121 }
122