7#include "addemaildisplayjob.h"
8#include "widgets/selectaddressbookdialog.h"
9#include <Akonadi/AgentConfigurationDialog>
10#include <Akonadi/AgentFilterProxyModel>
11#include <Akonadi/AgentInstance>
12#include <Akonadi/AgentInstanceCreateJob>
13#include <Akonadi/AgentManager>
14#include <Akonadi/AgentType>
15#include <Akonadi/AgentTypeDialog>
16#include <Akonadi/Collection>
17#include <Akonadi/CollectionDialog>
18#include <Akonadi/CollectionFetchJob>
19#include <Akonadi/CollectionFetchScope>
20#include <Akonadi/ContactEditorDialog>
21#include <Akonadi/ContactSearchJob>
22#include <Akonadi/ItemCreateJob>
23#include <Akonadi/ItemModifyJob>
25#include <KContacts/ContactGroup>
26#include <KLocalizedString>
32class Akonadi::AddEmailDisplayJobPrivate
35 AddEmailDisplayJobPrivate(AddEmailDisplayJob *qq,
const QString &emailString, QWidget *parentWidget)
37 , mCompleteAddress(emailString)
38 , mParentWidget(parentWidget)
43 void slotResourceCreationDone(KJob *job)
46 q->setError(job->
error());
57 auto searchJob =
new Akonadi::ContactSearchJob(q);
58 searchJob->setLimit(1);
67 Akonadi::Item item = contact;
70 address.insertCustom(QStringLiteral(
"KADDRESSBOOK"),
71 QStringLiteral(
"MailPreferedFormatting"),
72 mShowAsHTML ? QStringLiteral(
"HTML") : QStringLiteral(
"TEXT"));
73 address.insertCustom(QStringLiteral(
"KADDRESSBOOK"),
74 QStringLiteral(
"MailAllowToRemoteContent"),
75 mRemoteContent ? QStringLiteral(
"TRUE") : QStringLiteral(
"FALSE"));
77 auto itemModifyJob =
new Akonadi::ItemModifyJob(item);
79 auto modifiedJob =
static_cast<Akonadi::ItemModifyJob *
>(itemModifyJob);
80 if (!modifiedJob->error()) {
81 Q_EMIT q->contactUpdated(modifiedJob->item(), messageId, mShowAsHTML, mRemoteContent);
83 slotAddModifyContactDone(itemModifyJob);
90 void slotSearchDone(KJob *job)
93 q->setError(job->
error());
99 const Akonadi::ContactSearchJob *searchJob = qobject_cast<Akonadi::ContactSearchJob *>(job);
105 Akonadi::Item item = items.
at(0);
106 KContacts::Addressee contact = searchJob->
contacts().at(0);
107 contact.insertCustom(QStringLiteral(
"KADDRESSBOOK"),
108 QStringLiteral(
"MailPreferedFormatting"),
109 mShowAsHTML ? QStringLiteral(
"HTML") : QStringLiteral(
"TEXT"));
110 contact.insertCustom(QStringLiteral(
"KADDRESSBOOK"),
111 QStringLiteral(
"MailAllowToRemoteContent"),
112 mRemoteContent ? QStringLiteral(
"TRUE") : QStringLiteral(
"FALSE"));
113 item.
setPayload<KContacts::Addressee>(contact);
114 auto itemModifyJob =
new Akonadi::ItemModifyJob(item);
116 auto modifiedJob =
static_cast<Akonadi::ItemModifyJob *
>(itemModifyJob);
117 if (!modifiedJob->error()) {
118 Q_EMIT q->contactUpdated(modifiedJob->item(), messageId, mShowAsHTML, mRemoteContent);
120 slotAddModifyContactDone(itemModifyJob);
131 addressBookJob->fetchScope().setContentMimeTypes(mimeTypes);
133 slotCollectionsFetched(job);
137 void slotCollectionsFetched(KJob *job)
140 q->setError(job->
error());
146 const Akonadi::CollectionFetchJob *addressBookJob = qobject_cast<Akonadi::CollectionFetchJob *>(job);
150 for (
const Akonadi::Collection &collection : colsList) {
152 canCreateItemCollections.
append(collection);
156 Akonadi::Collection addressBook;
158 const int nbItemCollection(canCreateItemCollections.
size());
159 if (nbItemCollection == 0) {
162 i18nc(
"@info",
"You must create an address book before adding a contact. Do you want to create an address book?"),
163 i18nc(
"@title:window",
"No Address Book Available"),
164 KGuiItem(
i18nc(
"@action:button",
"Create Address Book"), QStringLiteral(
"address-book-new")),
166 == KMessageBox::ButtonCode::PrimaryAction) {
167 QPointer<Akonadi::AgentTypeDialog> dlg =
new Akonadi::AgentTypeDialog(mParentWidget);
168 dlg->setWindowTitle(
i18nc(
"@title:window",
"Add Address Book"));
171 dlg->agentFilterProxyModel()->addCapabilityFilter(QStringLiteral(
"Resource"));
174 const Akonadi::AgentType agentType = dlg->agentType();
177 auto job =
new Akonadi::AgentInstanceCreateJob(agentType, q);
180 slotResourceCreationDone(job);
183 auto configureDialog =
new Akonadi::AgentConfigurationDialog(job->instance(), mParentWidget);
185 q->connect(configureDialog, &
QDialog::rejected, q, [
this, instance = job->instance()] {
186 Akonadi::AgentManager::self()->removeInstance(instance);
192 configureDialog->show();
199 q->setError(KJob::UserDefinedError);
205 q->setError(KJob::UserDefinedError);
211 q->setError(KJob::UserDefinedError);
215 }
else if (nbItemCollection == 1) {
216 addressBook = canCreateItemCollections[0];
219 QPointer<Akonadi::SelectAddressBookDialog> dlg =
new Akonadi::SelectAddressBookDialog(mParentWidget);
223 addressBook = dlg->selectedCollection();
225 q->setError(KJob::UserDefinedError);
236 q->setError(KJob::UserDefinedError);
240 KContacts::Addressee contact;
241 contact.setNameFromString(mName);
242 KContacts::Email email(mEmail);
243 email.setPreferred(
true);
244 contact.addEmail(email);
245 contact.insertCustom(QStringLiteral(
"KADDRESSBOOK"),
246 QStringLiteral(
"MailPreferedFormatting"),
247 mShowAsHTML ? QStringLiteral(
"HTML") : QStringLiteral(
"TEXT"));
248 contact.insertCustom(QStringLiteral(
"KADDRESSBOOK"),
249 QStringLiteral(
"MailAllowToRemoteContent"),
250 mRemoteContent ? QStringLiteral(
"TRUE") : QStringLiteral(
"FALSE"));
255 item.
setPayload<KContacts::Addressee>(contact);
258 auto createJob =
new Akonadi::ItemCreateJob(item, addressBook, q);
260 auto modifiedJob =
static_cast<Akonadi::ItemCreateJob *
>(createJob);
261 if (!modifiedJob->error()) {
262 Q_EMIT q->contactUpdated(modifiedJob->item(), messageId, mShowAsHTML, mRemoteContent);
264 slotAddModifyContactDone(createJob);
268 void slotAddModifyContactDone(KJob *job)
271 q->setError(job->
error());
277 AddEmailDisplayJob *
const q;
278 Akonadi::Item contact;
280 const QString mCompleteAddress;
283 QWidget *
const mParentWidget;
284 bool mShowAsHTML =
false;
285 bool mRemoteContent =
false;
290 , d(new AddEmailDisplayJobPrivate(this, email, parentWidget))
294AddEmailDisplayJob::~AddEmailDisplayJob() =
default;
296void AddEmailDisplayJob::setShowAsHTML(
bool html)
298 d->mShowAsHTML = html;
301void AddEmailDisplayJob::setRemoteContent(
bool b)
303 d->mRemoteContent = b;
306void AddEmailDisplayJob::setContact(
const Akonadi::Item &contact)
308 d->contact = contact;
316void AddEmailDisplayJob::start()
318 if (d->contact.isValid()) {
325#include "moc_addemaildisplayjob.cpp"
Collection::List collections() const
void setPayload(const T &p)
void setMimeType(const QString &mimeType)
virtual Q_SCRIPTABLE void start()=0
QString errorText() const
QString i18nc(const char *context, const char *text, const TYPE &arg...)
A widget for editing the display name of a contact.
PostalAddress address(const QVariant &location)
ButtonCode questionTwoActions(QWidget *parent, const QString &text, const QString &title, const KGuiItem &primaryAction, const KGuiItem &secondaryAction, const QString &dontAskAgainName=QString(), Options options=Notify)
void append(QList< T > &&value)
const_reference at(qsizetype i) const const
bool isEmpty() const const
qsizetype size() const const