File indexing completed on 2025-02-16 04:56:08
0001 /* 0002 SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only 0005 */ 0006 0007 #include "vacationmanager.h" 0008 #include "ksieveui/vacation/multiimapvacationdialog.h" 0009 #include <KSieveCore/MultiImapVacationManager> 0010 #include <KSieveCore/VacationCreateScriptJob> 0011 0012 #include <KLocalizedString> 0013 #include <KMessageBox> 0014 #include <QPointer> 0015 #include <QWidget> 0016 0017 using namespace KSieveUi; 0018 0019 class KSieveUi::VacationManagerPrivate 0020 { 0021 public: 0022 VacationManagerPrivate(QWidget *parent) 0023 : mWidget(parent) 0024 { 0025 } 0026 0027 QWidget *const mWidget; 0028 QPointer<KSieveUi::MultiImapVacationDialog> mMultiImapVacationDialog = nullptr; 0029 QPointer<KSieveCore::MultiImapVacationManager> mCheckVacation = nullptr; 0030 bool mQuestionAsked = false; 0031 }; 0032 0033 VacationManager::VacationManager(KSieveCore::SieveImapPasswordProvider *passwordProvider, QWidget *parent) 0034 : QObject(parent) 0035 , d(new KSieveUi::VacationManagerPrivate(parent)) 0036 { 0037 d->mCheckVacation = new KSieveCore::MultiImapVacationManager(passwordProvider, this); 0038 connect(d->mCheckVacation.data(), &KSieveCore::MultiImapVacationManager::scriptActive, this, &VacationManager::slotUpdateVacationScriptStatus); 0039 } 0040 0041 VacationManager::~VacationManager() = default; 0042 0043 void VacationManager::checkVacation() 0044 { 0045 d->mCheckVacation->checkVacation(); 0046 } 0047 0048 void VacationManager::slotUpdateVacationScriptStatus(bool active, const QString &serverName) 0049 { 0050 Q_EMIT updateVacationScriptStatus(active, serverName); 0051 if (active) { 0052 if (!d->mQuestionAsked) { 0053 d->mQuestionAsked = true; 0054 if (KMessageBox::questionTwoActions(nullptr, 0055 i18n("There is still an active out-of-office reply configured.\n" 0056 "Do you want to edit it?"), 0057 i18nc("@title:window", "Out-of-office reply still active"), 0058 KGuiItem(i18n("Edit"), QStringLiteral("document-properties")), 0059 KGuiItem(i18n("Ignore"), QStringLiteral("dialog-cancel"))) 0060 == KMessageBox::ButtonCode::PrimaryAction) { 0061 slotEditVacation(serverName); 0062 } 0063 } 0064 } 0065 } 0066 0067 void VacationManager::slotEditVacation(const QString &serverName) 0068 { 0069 if (d->mMultiImapVacationDialog) { 0070 d->mMultiImapVacationDialog->raise(); 0071 d->mMultiImapVacationDialog->activateWindow(); 0072 } else { 0073 d->mMultiImapVacationDialog = new KSieveUi::MultiImapVacationDialog(d->mCheckVacation, d->mWidget); 0074 connect(d->mMultiImapVacationDialog.data(), &KSieveUi::MultiImapVacationDialog::okClicked, this, &VacationManager::slotDialogOk); 0075 connect(d->mMultiImapVacationDialog.data(), &KSieveUi::MultiImapVacationDialog::cancelClicked, this, &VacationManager::slotDialogCanceled); 0076 } 0077 d->mMultiImapVacationDialog->show(); 0078 0079 if (!serverName.isEmpty()) { 0080 d->mMultiImapVacationDialog->switchToServerNamePage(serverName); 0081 } 0082 } 0083 0084 void VacationManager::slotDialogCanceled() 0085 { 0086 if (d->mMultiImapVacationDialog->isVisible()) { 0087 d->mMultiImapVacationDialog->hide(); 0088 } 0089 0090 d->mMultiImapVacationDialog->deleteLater(); 0091 d->mMultiImapVacationDialog = nullptr; 0092 } 0093 0094 void VacationManager::slotDialogOk() 0095 { 0096 const QList<KSieveCore::VacationCreateScriptJob *> listJob = d->mMultiImapVacationDialog->listCreateJob(); 0097 for (KSieveCore::VacationCreateScriptJob *job : listJob) { 0098 connect(job, &KSieveCore::VacationCreateScriptJob::scriptActive, this, &VacationManager::updateVacationScriptStatus); 0099 job->setKep14Support(d->mCheckVacation->kep14Support(job->serverName())); 0100 job->start(); 0101 } 0102 if (d->mMultiImapVacationDialog->isVisible()) { 0103 d->mMultiImapVacationDialog->hide(); 0104 } 0105 0106 d->mMultiImapVacationDialog->deleteLater(); 0107 0108 d->mMultiImapVacationDialog = nullptr; 0109 } 0110 0111 #include "moc_vacationmanager.cpp"