File indexing completed on 2025-02-16 04:55:56

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #include "sieveactionabstractflags.h"
0007 #include "autocreatescripts/autocreatescriptutil_p.h"
0008 #include "autocreatescripts/sieveeditorgraphicalmodewidget.h"
0009 #include "widgets/selectflagswidget.h"
0010 
0011 #include "libksieveui_debug.h"
0012 #include <QHBoxLayout>
0013 #include <QXmlStreamReader>
0014 
0015 using namespace KSieveUi;
0016 SieveActionAbstractFlags::SieveActionAbstractFlags(SieveEditorGraphicalModeWidget *sieveGraphicalModeWidget,
0017                                                    const QString &name,
0018                                                    const QString &label,
0019                                                    QObject *parent)
0020     : SieveAction(sieveGraphicalModeWidget, name, label, parent)
0021 {
0022 }
0023 
0024 QWidget *SieveActionAbstractFlags::createParamWidget(QWidget *parent) const
0025 {
0026     auto w = new QWidget(parent);
0027     auto lay = new QHBoxLayout;
0028     lay->setContentsMargins({});
0029     w->setLayout(lay);
0030     auto flagsWidget = new SelectFlagsWidget;
0031     connect(flagsWidget, &SelectFlagsWidget::valueChanged, this, &SieveActionAbstractFlags::valueChanged);
0032     flagsWidget->setObjectName(QLatin1StringView("flagswidget"));
0033     lay->addWidget(flagsWidget);
0034     return w;
0035 }
0036 
0037 void SieveActionAbstractFlags::setParamWidgetValue(QXmlStreamReader &element, QWidget *w, QString &error)
0038 {
0039     while (element.readNextStartElement()) {
0040         const QStringView tagName = element.name();
0041         if (tagName == QLatin1StringView("list")) {
0042             auto flagsWidget = w->findChild<SelectFlagsWidget *>(QStringLiteral("flagswidget"));
0043             flagsWidget->setFlags(AutoCreateScriptUtil::listValue(element));
0044         } else if (tagName == QLatin1StringView("str")) {
0045             auto flagsWidget = w->findChild<SelectFlagsWidget *>(QStringLiteral("flagswidget"));
0046             flagsWidget->setFlags(QStringList() << element.readElementText());
0047         } else if (tagName == QLatin1StringView("crlf")) {
0048             element.skipCurrentElement();
0049             // nothing
0050         } else if (tagName == QLatin1StringView("comment")) {
0051             element.skipCurrentElement();
0052             // implement in the future ?
0053         } else {
0054             unknownTag(tagName, error);
0055             qCDebug(LIBKSIEVEUI_LOG) << " SieveActionAbstractFlags::setParamWidgetValue unknown tag :" << tagName;
0056         }
0057     }
0058 }
0059 
0060 QString SieveActionAbstractFlags::code(QWidget *w) const
0061 {
0062     const SelectFlagsWidget *flagsWidget = w->findChild<SelectFlagsWidget *>(QStringLiteral("flagswidget"));
0063     const QString flagCode = flagsWidget->code();
0064     const QString str = flagsCode();
0065     return str + QLatin1Char(' ') + (flagCode.isEmpty() ? QStringLiteral(";") : flagCode);
0066 }
0067 
0068 QStringList SieveActionAbstractFlags::needRequires(QWidget *) const
0069 {
0070     if (sieveCapabilities().contains(QLatin1StringView("imap4flags"))) {
0071         return QStringList() << QStringLiteral("imap4flags");
0072     } else {
0073         return QStringList() << QStringLiteral("imapflags");
0074     }
0075 }
0076 
0077 bool SieveActionAbstractFlags::needCheckIfServerHasCapability() const
0078 {
0079     return true;
0080 }
0081 
0082 QString SieveActionAbstractFlags::serverNeedsCapability() const
0083 {
0084     if (sieveCapabilities().contains(QLatin1StringView("imap4flags"))) {
0085         return QStringLiteral("imap4flags");
0086     } else {
0087         return QStringLiteral("imapflags");
0088     }
0089 }
0090 
0091 #include "moc_sieveactionabstractflags.cpp"