File indexing completed on 2024-06-23 05:18:32

0001 /*
0002  * This file is part of KMail.
0003  *
0004  * SPDX-FileCopyrightText: 2010 KDAB
0005  * SPDX-FileContributor: Tobias Koenig <tokoe@kde.org>
0006  *
0007  * SPDX-License-Identifier: GPL-2.0-or-later
0008  */
0009 
0010 #include "distributionlistexpandjob.h"
0011 
0012 #include <Akonadi/ContactGroupExpandJob>
0013 #include <Akonadi/ContactGroupSearchJob>
0014 
0015 using namespace MessageComposer;
0016 
0017 DistributionListExpandJob::DistributionListExpandJob(const QString &name, QObject *parent)
0018     : KJob(parent)
0019     , mListName(name)
0020 {
0021 }
0022 
0023 DistributionListExpandJob::~DistributionListExpandJob() = default;
0024 
0025 void DistributionListExpandJob::start()
0026 {
0027     auto job = new Akonadi::ContactGroupSearchJob(this);
0028     job->setQuery(Akonadi::ContactGroupSearchJob::Name, mListName);
0029     connect(job, &KJob::result, this, &DistributionListExpandJob::slotSearchDone);
0030 }
0031 
0032 QString DistributionListExpandJob::addresses() const
0033 {
0034     return mEmailAddresses.join(QLatin1StringView(", "));
0035 }
0036 
0037 bool DistributionListExpandJob::isEmpty() const
0038 {
0039     return mIsEmpty;
0040 }
0041 
0042 void DistributionListExpandJob::slotSearchDone(KJob *job)
0043 {
0044     if (job->error()) {
0045         setError(job->error());
0046         setErrorText(job->errorText());
0047         emitResult();
0048         return;
0049     }
0050 
0051     const Akonadi::ContactGroupSearchJob *searchJob = qobject_cast<Akonadi::ContactGroupSearchJob *>(job);
0052 
0053     const KContacts::ContactGroup::List groups = searchJob->contactGroups();
0054     if (groups.isEmpty()) {
0055         emitResult();
0056         return;
0057     }
0058 
0059     auto expandJob = new Akonadi::ContactGroupExpandJob(groups.first());
0060     connect(expandJob, &KJob::result, this, &DistributionListExpandJob::slotExpansionDone);
0061     expandJob->start();
0062 }
0063 
0064 void DistributionListExpandJob::slotExpansionDone(KJob *job)
0065 {
0066     if (job->error()) {
0067         setError(job->error());
0068         setErrorText(job->errorText());
0069         emitResult();
0070         return;
0071     }
0072 
0073     const Akonadi::ContactGroupExpandJob *expandJob = qobject_cast<Akonadi::ContactGroupExpandJob *>(job);
0074 
0075     const KContacts::Addressee::List contacts = expandJob->contacts();
0076     mEmailAddresses.reserve(contacts.count());
0077     for (const KContacts::Addressee &contact : contacts) {
0078         mEmailAddresses << contact.fullEmail();
0079     }
0080 
0081     mIsEmpty = mEmailAddresses.isEmpty();
0082 
0083     emitResult();
0084 }
0085 
0086 #include "moc_distributionlistexpandjob.cpp"