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"