[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdepim] libksieve/ksieveui/autocreatescripts: Add support for addflags in keep actions
From:       Montel Laurent <montel () kde ! org>
Date:       2013-07-31 20:46:57
Message-ID: E1V4dIP-0006wa-Jz () scm ! kde ! org
[Download RAW message or body]

Git commit 9c86e1e3747021539c1bf3062c7c0754c2d93e28 by Montel Laurent.
Committed on 31/07/2013 at 20:46.
Pushed by mlaurent into branch 'master'.

Add support for addflags in keep actions

M  +1    -1    libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionfileinto.cpp
 M  +75   -2    libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.cpp
M  +6    -0    libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.h
A  +9    -0    libksieve/ksieveui/autocreatescripts/tests/scripts/keep.siv

http://commits.kde.org/kdepim/9c86e1e3747021539c1bf3062c7c0754c2d93e28

diff --git a/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionfileinto.cpp \
b/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionfileinto.cpp index \
                62ea130..eab03f0 100644
--- a/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionfileinto.cpp
+++ b/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionfileinto.cpp
@@ -24,7 +24,7 @@
 #include <QHBoxLayout>
 #include <QDebug>
 #include <QDomNode>
-
+//Add support for adding flags
 using namespace KSieveUi;
 SieveActionFileInto::SieveActionFileInto(QObject *parent)
     : SieveAction(QLatin1String("fileinto"), i18n("File Into"), parent)
diff --git a/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.cpp \
b/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.cpp index \
                ca162ab..4c801e9 100644
--- a/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.cpp
+++ b/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.cpp
@@ -16,12 +16,21 @@
 */
 
 #include "sieveactionkeep.h"
+#include "widgets/selectflagswidget.h"
+#include "autocreatescripts/autocreatescriptutil_p.h"
+#include "autocreatescripts/sieveeditorgraphicalmodewidget.h"
+
+
 #include <KLocale>
+#include <QLabel>
+#include <QHBoxLayout>
+#include <QDomNode>
 
 using namespace KSieveUi;
 SieveActionKeep::SieveActionKeep(QObject *parent)
     : SieveAction(QLatin1String("keep"), i18n("Keep"), parent)
 {
+    mHasFlagSupport = \
SieveEditorGraphicalModeWidget::sieveCapabilities().contains(QLatin1String("imapflags"));
  }
 
 SieveAction* SieveActionKeep::newAction()
@@ -29,9 +38,19 @@ SieveAction* SieveActionKeep::newAction()
     return new SieveActionKeep;
 }
 
-QString SieveActionKeep::code(QWidget *) const
+QString SieveActionKeep::code(QWidget *w) const
 {
-    return QLatin1String("keep;");
+    if (mHasFlagSupport) {
+        const SelectFlagsWidget *flagsWidget = w->findChild<SelectFlagsWidget*>( \
QLatin1String("flagswidget") ); +        const QString flagCode = \
flagsWidget->code(); +        if (flagCode.isEmpty()) {
+            return QLatin1String("keep;");
+        } else {
+            return QLatin1String("keep :flags") + QLatin1Char(' ') + flagCode;
+        }
+    } else {
+        return QLatin1String("keep;");
+    }
 }
 
 QString SieveActionKeep::help() const
@@ -39,4 +58,58 @@ QString SieveActionKeep::help() const
     return i18n("The \"keep\" action is whatever action is taken in lieu of all \
other actions, if no filtering happens at all; generally, this simply means to file \
the message into the user's main mailbox.");  }
 
+QWidget *SieveActionKeep::createParamWidget( QWidget *parent ) const
+{
+    if (mHasFlagSupport) {
+        QWidget *w = new QWidget(parent);
+        QHBoxLayout *lay = new QHBoxLayout;
+        lay->setMargin(0);
+        w->setLayout(lay);
+        QLabel *addFlags = new QLabel(i18n("Add flags:"));
+        lay->addWidget(addFlags);
+
+        SelectFlagsWidget *flagsWidget = new SelectFlagsWidget;
+        flagsWidget->setObjectName(QLatin1String("flagswidget"));
+        lay->addWidget(flagsWidget);
+        return w;
+    } else {
+        return 0;
+    }
+}
+
+void SieveActionKeep::setParamWidgetValue( const QDomElement &element, QWidget *w )
+{
+    if (mHasFlagSupport) {
+        QDomNode node = element.firstChild();
+        while (!node.isNull()) {
+            QDomElement e = node.toElement();
+            if (!e.isNull()) {
+                const QString tagName = e.tagName();
+                if (tagName == QLatin1String("list")) {
+                    SelectFlagsWidget *flagsWidget = \
w->findChild<SelectFlagsWidget*>( QLatin1String("flagswidget") ); +                   \
flagsWidget->setFlags(AutoCreateScriptUtil::listValue(e)); +                } else if \
(tagName == QLatin1String("str")) { +                    SelectFlagsWidget \
*flagsWidget = w->findChild<SelectFlagsWidget*>( QLatin1String("flagswidget") ); +    \
flagsWidget->setFlags(QStringList()<<e.text()); +                } else if (tagName \
== QLatin1String("tag") && e.text() == QLatin1String("flags")) { +                    \
//nothing :) +                } else {
+                    qDebug()<<" SieveActionAbstractFlags::setParamWidgetValue \
unknown tag :"<<tagName; +                }
+            }
+            node = node.nextSibling();
+        }
+    } else {
+        qDebug()<<" Server doesn't support imapflags";
+    }
+}
+
+QStringList SieveActionKeep::needRequires(QWidget *) const
+{
+    QStringList requiresLst;
+    if (mHasFlagSupport)
+        requiresLst << QLatin1String("imapflags");
+    return requiresLst;
+}
+
 #include "sieveactionkeep.moc"
diff --git a/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.h \
b/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.h index \
                f12754e..51007c3 100644
--- a/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.h
+++ b/libksieve/ksieveui/autocreatescripts/sieveactions/sieveactionkeep.h
@@ -28,6 +28,12 @@ public:
 
     QString code(QWidget *) const;
     QString help() const;
+    QWidget *createParamWidget( QWidget *parent ) const;
+    void setParamWidgetValue( const QDomElement &element, QWidget *w );
+    QStringList needRequires(QWidget *) const;
+
+private:
+    bool mHasFlagSupport;
 };
 }
 #endif // SIEVEACTIONKEEP_H
diff --git a/libksieve/ksieveui/autocreatescripts/tests/scripts/keep.siv \
b/libksieve/ksieveui/autocreatescripts/tests/scripts/keep.siv new file mode 100644
index 0000000..f40d28f
--- /dev/null
+++ b/libksieve/ksieveui/autocreatescripts/tests/scripts/keep.siv
@@ -0,0 +1,9 @@
+require "date";
+require "imapflags";
+ 
+#SCRIPTNAME: xxx
+if date :is "" "year" "0000"
+{
+    keep :flags [ "\\Flagged", "\\Seen" ];
+    keep;
+} "


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic