Sophie

Sophie

distrib > Mageia > 5 > i586 > by-pkgid > ddfeee3bedf84e44f20049fdcc070a8a > files > 39

kdepimlibs4-4.14.10-2.2.mga5.src.rpm

From 6da27b749c3496faa12570d0ddb4ef7f6905110b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Vr=C3=A1til?= <daniel.vratil@kdab.com>
Date: Wed, 30 Mar 2016 14:32:23 +0200
Subject: [PATCH 38/47] Add "Mark All as Read Recursively" action to
 StandardMailActionManager

---
 akonadi/kmime/markascommand.cpp             | 37 +++++++++++++++++++++++++++--
 akonadi/kmime/markascommand_p.h             |  4 +++-
 akonadi/kmime/standardmailactionmanager.cpp | 20 +++++++++++++++-
 akonadi/kmime/standardmailactionmanager.h   |  1 +
 4 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/akonadi/kmime/markascommand.cpp b/akonadi/kmime/markascommand.cpp
index 7adee881e..000a46924 100644
--- a/akonadi/kmime/markascommand.cpp
+++ b/akonadi/kmime/markascommand.cpp
@@ -22,6 +22,10 @@
 #include <akonadi/itemfetchjob.h>
 #include <akonadi/itemfetchscope.h>
 #include <akonadi/itemmodifyjob.h>
+#include <akonadi/collectionfetchjob.h>
+
+#include <kmessagebox.h>
+#include <klocalizedstring.h>
 
 MarkAsCommand::MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const Akonadi::Item::List &msgList, bool invert, QObject *parent)
     : CommandBase(parent)
@@ -33,7 +37,7 @@ MarkAsCommand::MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const A
     mMarkJobCount = 0;
 }
 
-MarkAsCommand::MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const Akonadi::Collection::List &folders, bool invert, QObject *parent)
+MarkAsCommand::MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const Akonadi::Collection::List &folders, bool invert, bool recursive, QObject *parent)
     : CommandBase(parent)
 {
     mInvertMark = invert;
@@ -41,6 +45,24 @@ MarkAsCommand::MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const A
     mTargetStatus = targetStatus;
     mFolderListJobCount = mFolders.size();
     mMarkJobCount = 0;
+    mRecursive = recursive;
+}
+
+void MarkAsCommand::slotCollectionFetchDone(KJob *job)
+{
+    if (job->error()) {
+        Util::showJobError(job);
+        emitResult(Failed);
+        return;
+    }
+
+    Akonadi::CollectionFetchJob *fjob = static_cast<Akonadi::CollectionFetchJob *>(job);
+    mFolders += fjob->collections();
+    mFolderListJobCount = mFolders.size();
+
+    // We have the subtree now, so act as if we were passed the collections in ctor
+    mRecursive = false;
+    execute();
 }
 
 void MarkAsCommand::slotFetchDone(KJob *job)
@@ -84,7 +106,18 @@ void MarkAsCommand::slotFetchDone(KJob *job)
 
 void MarkAsCommand::execute()
 {
-    if (!mFolders.isEmpty()) {
+    if (mRecursive && !mFolders.isEmpty()) {
+        if (KMessageBox::questionYesNo(qobject_cast<QWidget*>(parent()),
+                                       i18n("Are you sure you want to mark all messages in this folder and all its subfolders?"),
+                                       i18n("Mark All Recursively?")) == KMessageBox::Yes) {
+            Akonadi::CollectionFetchJob *job = new Akonadi::CollectionFetchJob(mFolders.first(),
+                                                                              Akonadi::CollectionFetchJob::Recursive,
+                                                                              parent());
+            connect(job, SIGNAL(result(KJob*)), this, SLOT(slotCollectionFetchDone(KJob*)));
+        } else {
+            emitResult(Canceled);
+        }
+    } else if (!mFolders.isEmpty()) {
         //yes, we go backwards, shouldn't matter
         Akonadi::ItemFetchJob *job = new Akonadi::ItemFetchJob(mFolders[mFolderListJobCount - 1], parent());
         job->fetchScope().setAncestorRetrieval(Akonadi::ItemFetchScope::Parent);
diff --git a/akonadi/kmime/markascommand_p.h b/akonadi/kmime/markascommand_p.h
index 16117cdbe..c6a8ae039 100644
--- a/akonadi/kmime/markascommand_p.h
+++ b/akonadi/kmime/markascommand_p.h
@@ -34,10 +34,11 @@ class MarkAsCommand : public CommandBase
     Q_OBJECT
 public:
     MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const Akonadi::Item::List &msgList, bool invert = false, QObject *parent = 0);
-    MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const Akonadi::Collection::List &folders, bool invert = false, QObject *parent = 0);
+    MarkAsCommand(const Akonadi::MessageStatus &targetStatus, const Akonadi::Collection::List &folders, bool invert = false, bool recursive = false, QObject *parent = 0);
     void execute();
 
 private Q_SLOTS:
+    void slotCollectionFetchDone(KJob *job);
     void slotFetchDone(KJob *job);
     void slotModifyItemDone(KJob *job);
 
@@ -50,6 +51,7 @@ private:
     int mMarkJobCount;
     int mFolderListJobCount;
     int mInvertMark;
+    bool mRecursive;
 };
 
 #endif // MARKASCOMMAND_H
diff --git a/akonadi/kmime/standardmailactionmanager.cpp b/akonadi/kmime/standardmailactionmanager.cpp
index 89194ecac..6e886011e 100644
--- a/akonadi/kmime/standardmailactionmanager.cpp
+++ b/akonadi/kmime/standardmailactionmanager.cpp
@@ -546,6 +546,11 @@ public:
             invert = true;
             typeStr = typeStr.mid(1);
         }
+        bool recursive = false;
+        if (typeStr.startsWith(':')) {
+            recursive = true;
+            typeStr = typeStr.mid(1);
+        }
 
         StandardMailActionManager::Type type = MarkAllMailAsRead;
         if (typeStr == "U") {
@@ -562,7 +567,7 @@ public:
             return;
         }
 
-        MarkAsCommand *command = new MarkAsCommand(targetStatus, collections, invert, mParent);
+        MarkAsCommand *command = new MarkAsCommand(targetStatus, collections, invert, recursive, mParent);
         command->execute();
     }
 
@@ -777,6 +782,18 @@ KAction *StandardMailActionManager::createAction(Type type)
         action->setData(QByteArray("R"));
         connect(action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAllAs()));
         break;
+    case MarkAllMailAsReadRecursive:
+        action = new KAction(d->mParentWidget);
+        action->setIcon(KIcon(QLatin1String("mail-mark-read")));
+        action->setText(i18n("Mark &All Messages as Read Recursively"));
+        action->setIconText(i18n("Mark All as Read Recursively"));
+        action->setHelpText(i18n("Mark all messages as read recursively."));
+        action->setWhatsThis(i18n("Mark all messages as read recursively."));
+        d->mActions.insert(MarkAllMailAsReadRecursive, action);
+        d->mActionCollection->addAction(QString::fromLatin1("akonadi_mark_all_as_read_recursive"), action);
+        action->setData(QByteArray(":R"));
+        connect(action, SIGNAL(triggered(bool)), this, SLOT(slotMarkAllAs()));
+        break;
     case MarkAllMailAsUnread:
         action = new KAction(d->mParentWidget);
         action->setIcon(KIcon(QLatin1String("mail-mark-unread")));
@@ -887,6 +904,7 @@ void StandardMailActionManager::createAllActions()
     createAction(MarkMailAsImportant);
     createAction(MarkMailAsActionItem);
     createAction(MarkAllMailAsRead);
+    createAction(MarkAllMailAsReadRecursive);
     createAction(MarkAllMailAsUnread);
     createAction(MarkAllMailAsImportant);
     createAction(MarkAllMailAsActionItem);
diff --git a/akonadi/kmime/standardmailactionmanager.h b/akonadi/kmime/standardmailactionmanager.h
index c365e5648..8bbb7e591 100644
--- a/akonadi/kmime/standardmailactionmanager.h
+++ b/akonadi/kmime/standardmailactionmanager.h
@@ -58,6 +58,7 @@ public:
         MarkMailAsImportant,                              ///< Marks a mail as important
         MarkMailAsActionItem,                             ///< Marks a mail as action item
         MarkAllMailAsRead,                                ///< Marks all mails in a folder as read.
+        MarkAllMailAsReadRecursive,                       ///< Marks all mails in a folder and its subfolders as read.
         MarkAllMailAsUnread,                              ///< Marks all mails in a folder as unread.
         MarkAllMailAsImportant,                           ///< Marks all mails in a folder as important
         MarkAllMailAsActionItem,                          ///< Marks all mails in a folder as action item
-- 
2.14.1