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