1 /*
2    SPDX-FileCopyrightText: 2014-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "sieveeditormanagesievewidget.h"
8 #include "readserversieveconfigjob.h"
9 #include <KSieveUi/ManageSieveTreeView>
10 #include <KSieveUi/SieveTreeWidgetItem>
11 
12 #include <KManageSieve/SieveJob>
13 
14 #include <KLocalizedString>
15 
16 using namespace KSieveUi;
17 
SieveEditorManageSieveWidget(QWidget * parent)18 SieveEditorManageSieveWidget::SieveEditorManageSieveWidget(QWidget *parent)
19     : KSieveUi::ManageSieveWidget(parent)
20 {
21 }
22 
~SieveEditorManageSieveWidget()23 SieveEditorManageSieveWidget::~SieveEditorManageSieveWidget()
24 {
25 }
26 
refreshList()27 bool SieveEditorManageSieveWidget::refreshList()
28 {
29     bool noImapFound = true;
30     SieveTreeWidgetItem *last = nullptr;
31     for (const SieveEditorUtil::SieveServerConfig &conf : std::as_const(mSieveServerSettings)) {
32         last = new SieveTreeWidgetItem(treeView(), last);
33         last->setText(0, conf.sieveSettings.serverName + QStringLiteral(" (%1)").arg(conf.sieveSettings.userName));
34         last->setIcon(0, QIcon::fromTheme(QStringLiteral("network-server")));
35 
36         const QUrl u = conf.url();
37         if (u.isEmpty()) {
38             auto item = new QTreeWidgetItem(last);
39             item->setText(0, i18n("No Sieve URL configured"));
40             item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
41             treeView()->expandItem(last);
42         } else if (!conf.enabled) {
43             last->setFlags(last->flags() & ~Qt::ItemIsEnabled);
44             last->setText(0, i18n("(Disabled) %1", last->text(0)));
45         } else {
46             KManageSieve::SieveJob *job = KManageSieve::SieveJob::list(u);
47             job->setProperty("sieveimapaccountsettings", QVariant::fromValue(conf.sieveImapAccountSettings));
48             connect(job, &KManageSieve::SieveJob::gotList, this, &SieveEditorManageSieveWidget::slotGotList);
49             mJobs.insert(job, last);
50             mUrls.insert(last, u);
51             last->startAnimation();
52         }
53         noImapFound = false;
54     }
55     return noImapFound;
56 }
57 
updateSieveSettings()58 void SieveEditorManageSieveWidget::updateSieveSettings()
59 {
60     auto job = new ReadServerSieveConfigJob(this);
61     connect(job, &ReadServerSieveConfigJob::finished, this, &SieveEditorManageSieveWidget::slotReadServerSieveConfigDone);
62     job->start();
63 }
64 
slotReadServerSieveConfigDone(const QVector<SieveEditorUtil::SieveServerConfig> & lstConfig)65 void SieveEditorManageSieveWidget::slotReadServerSieveConfigDone(const QVector<SieveEditorUtil::SieveServerConfig> &lstConfig)
66 {
67     mSieveServerSettings = lstConfig;
68     Q_EMIT updateSieveSettingsDone();
69 }
70