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"