[pim/kmail] src: Continue to implement undoredomanager
Laurent Montel <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 42361f427063fbe7290ce227c6a208299e7c2471 by Laurent Montel.
Committed on 26/07/2026 at 19:34.
Pushed by mlaurent into branch 'master'.
Continue to implement undoredomanager
M +36 -1 src/kmundoredomanager.cpp
M +7 -0 src/kmundoredomanager.h
https://invent.kde.org/pim/kmail/-/commit/42361f427063fbe7290ce227c6a208299e7c2471
diff --git a/src/kmundoredomanager.cpp b/src/kmundoredomanager.cpp
index b66519f5e..4b73de531 100644
--- a/src/kmundoredomanager.cpp
+++ b/src/kmundoredomanager.cpp
@@ -7,7 +7,10 @@
#include "kmundoredomanager.h"
#include "kmkernel.h"
#include <Akonadi/ItemMoveJob>
+#include <KLocalizedString>
+#include <KMessageBox>
#include <QUndoStack>
+
using namespace KMail;
KMUndoRedoManager::KMUndoRedoManager(QObject *parent)
: QObject{parent}
@@ -17,9 +20,26 @@ KMUndoRedoManager::KMUndoRedoManager(QObject *parent)
KMUndoRedoManager::~KMUndoRedoManager() = default;
+void KMUndoRedoManager::moveItems()
+{
+#if 0
+ auto job = new Akonadi::ItemMoveJob(mItems, mSrcFolder, nullptr);
+ connect(job, &Akonadi::ItemMoveJob::result, this, &KMUndoRedoManager::slotMoveResult);
+#endif
+ // TODO
+}
+
+void KMUndoRedoManager::slotMoveResult(KJob *job)
+{
+ if (job->error()) {
+ KMessageBox::error(kmkernel->mainWin(), i18n("Cannot move message. %1", job->errorString()));
+ }
+}
+
int KMUndoRedoManager::newUndoMoveAction(const Akonadi::Collection &srcFolder, const Akonadi::Collection &destFolder)
{
- auto info = new KMUndoInfoMoveItems;
+ auto info = new KMUndoInfoMoveItems(this);
+ mUndoStack->push(info);
#if 0
info->id = ++mLastId;
info->srcFolder = srcFolder;
@@ -43,8 +63,18 @@ void KMUndoRedoManager::addMsgToMoveAction(int undoId, const Akonadi::Item &item
// TODO
}
+KMUndoInfoMoveItems::KMUndoInfoMoveItems(KMUndoRedoManager *manager, QUndoCommand *parent)
+ : QUndoCommand(parent)
+ , mManager(manager)
+{
+}
+
void KMUndoInfoMoveItems::undo()
{
+#if 0
+ auto job = new Akonadi::ItemMoveJob(mItems, mSrcFolder, nullptr);
+ connect(job, &Akonadi::ItemMoveJob::result, this, &KMUndoInfoMoveItems::slotMoveResult);
+#endif
// TODO
}
@@ -63,6 +93,11 @@ void KMUndoInfoMoveItems::setItems(const Akonadi::Item::List &newItems)
mItems = newItems;
}
+void KMUndoInfoMoveItems::addItem(const Akonadi::Item &item)
+{
+ mItems.append(item);
+}
+
Akonadi::Collection KMUndoInfoMoveItems::srcFolder() const
{
return mSrcFolder;
diff --git a/src/kmundoredomanager.h b/src/kmundoredomanager.h
index 4e3f5ffc8..d7b2a5020 100644
--- a/src/kmundoredomanager.h
+++ b/src/kmundoredomanager.h
@@ -22,6 +22,9 @@ public:
[[nodiscard]] int newUndoMoveAction(const Akonadi::Collection &srcFolder, const Akonadi::Collection &destFolder);
void addMsgToMoveAction(int undoId, const Akonadi::Item &item);
+ void moveItems();
+ void slotMoveResult(KJob *job);
+
private:
QUndoStack *const mUndoStack;
};
@@ -29,11 +32,14 @@ private:
class KMUndoInfoMoveItems : public QUndoCommand
{
public:
+ explicit KMUndoInfoMoveItems(KMUndoRedoManager *manager, QUndoCommand *parent = nullptr);
+
void undo() override;
void redo() override;
[[nodiscard]] Akonadi::Item::List items() const;
void setItems(const Akonadi::Item::List &newItems);
+ void addItem(const Akonadi::Item &item);
[[nodiscard]] Akonadi::Collection srcFolder() const;
void setSrcFolder(const Akonadi::Collection &newSrcFolder);
@@ -45,6 +51,7 @@ public:
void setMoveToTrash(bool newMoveToTrash);
private:
+ KMUndoRedoManager *const mManager;
Akonadi::Item::List mItems;
Akonadi::Collection mSrcFolder;
Akonadi::Collection mDestFolder;