File indexing completed on 2025-02-16 04:55:54
0001 /* 0002 SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only 0005 */ 0006 0007 #include "searchserverwithvacationsupportjob.h" 0008 #include "util/findaccountinfojob.h" 0009 #include <QVariant> 0010 0011 using namespace KSieveCore; 0012 0013 SearchServerWithVacationSupportJob::SearchServerWithVacationSupportJob(QObject *parent) 0014 : QObject(parent) 0015 { 0016 } 0017 0018 SearchServerWithVacationSupportJob::~SearchServerWithVacationSupportJob() = default; 0019 0020 void SearchServerWithVacationSupportJob::sendAccountList() 0021 { 0022 Q_EMIT searchServerWithVacationSupportFinished(mAccountList); 0023 deleteLater(); 0024 } 0025 0026 void SearchServerWithVacationSupportJob::start() 0027 { 0028 if (!canStart()) { 0029 sendAccountList(); 0030 return; 0031 } 0032 const QList<KSieveCore::SieveImapInstance> instances = KSieveCore::Util::sieveImapInstances(); 0033 for (const KSieveCore::SieveImapInstance &instance : instances) { 0034 if (instance.status() == KSieveCore::SieveImapInstance::Broken) { 0035 continue; 0036 } 0037 mServerSieveInfos.insert(instance.name(), instance.identifier()); 0038 } 0039 searchNextInfo(); 0040 } 0041 0042 void SearchServerWithVacationSupportJob::searchNextInfo() 0043 { 0044 mSieveServerMapIterator = mServerSieveInfos.constBegin(); 0045 if (mSieveServerMapIterator != mServerSieveInfos.constEnd()) { 0046 slotSearchSieveScript(mSieveServerMapIterator.key(), mSieveServerMapIterator.value()); 0047 } else { 0048 sendAccountList(); 0049 } 0050 } 0051 0052 void SearchServerWithVacationSupportJob::slotSearchSieveScript(const QString &name, const QString &identifier) 0053 { 0054 auto job = new KSieveCore::FindAccountInfoJob(this); 0055 connect(job, &KSieveCore::FindAccountInfoJob::findAccountInfoFinished, this, &SearchServerWithVacationSupportJob::slotFindAccountInfoFinished); 0056 job->setIdentifier(identifier); 0057 job->setProperty("serverName", QVariant(name)); 0058 job->setProvider(mPasswordProvider); 0059 job->start(); 0060 } 0061 0062 void SearchServerWithVacationSupportJob::slotFindAccountInfoFinished(const KSieveCore::Util::AccountInfo &info) 0063 { 0064 const QUrl url = info.sieveUrl; 0065 if (!url.isEmpty()) { 0066 const QString serverName = sender()->property("serverName").toString(); 0067 mAccountList.insert(serverName, info); 0068 } 0069 searchNextServerSieve(); 0070 } 0071 0072 void SearchServerWithVacationSupportJob::searchNextServerSieve() 0073 { 0074 ++mSieveServerMapIterator; 0075 if (mSieveServerMapIterator != mServerSieveInfos.constEnd()) { 0076 slotSearchSieveScript(mSieveServerMapIterator.key(), mSieveServerMapIterator.value()); 0077 } else { 0078 sendAccountList(); 0079 } 0080 } 0081 0082 bool SearchServerWithVacationSupportJob::canStart() const 0083 { 0084 return mPasswordProvider; 0085 } 0086 0087 KSieveCore::SieveImapPasswordProvider *SearchServerWithVacationSupportJob::passwordProvider() const 0088 { 0089 return mPasswordProvider; 0090 } 0091 0092 void SearchServerWithVacationSupportJob::setPasswordProvider(KSieveCore::SieveImapPasswordProvider *newProvider) 0093 { 0094 mPasswordProvider = newProvider; 0095 } 0096 0097 #include "moc_searchserverwithvacationsupportjob.cpp"