From 8facecfbeb4539275fce77b4a07a6a1cfad32052 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 12 Jan 2017 12:42:37 +0100 Subject: Thread actions --- framework/domain/mailcontroller.cpp | 76 ++++++++++++++++++++++--------------- framework/domain/mailcontroller.h | 2 + 2 files changed, 48 insertions(+), 30 deletions(-) (limited to 'framework') diff --git a/framework/domain/mailcontroller.cpp b/framework/domain/mailcontroller.cpp index a5d7efb7..962b785f 100644 --- a/framework/domain/mailcontroller.cpp +++ b/framework/domain/mailcontroller.cpp @@ -20,6 +20,7 @@ #include #include +#include SINK_DEBUG_AREA("mailcontroller"); @@ -40,9 +41,24 @@ MailController::MailController() updateActions(); } -void MailController::updateActions() +void MailController::runModification(const std::function &f) { if (auto mail = getMail()) { + f(*mail); + run(Store::modify(*mail)); + } else if (auto mail = getThreadLeader()) { + f(*mail); + run(Store::modify(Sink::StandardQueries::completeThread(*mail), *mail)); + } +} + +void MailController::updateActions() +{ + auto mail = getMail(); + if (!mail) { + mail= getThreadLeader(); + } + if (mail) { action_moveToTrash->setEnabled(!mail->getTrash()); action_restoreFromTrash->setEnabled(mail->getTrash()); } @@ -50,58 +66,58 @@ void MailController::updateActions() void MailController::markAsRead() { - auto mail = getMail(); - mail->setUnread(false); - SinkLog() << "Mark as read " << mail->identifier(); - run(Store::modify(*mail)); + runModification([] (ApplicationDomain::Mail &mail) { + mail.setUnread(false); + SinkLog() << "Mark as read " << mail.identifier(); + }); } void MailController::markAsUnread() { - auto mail = getMail(); - mail->setUnread(true); - SinkLog() << "Mark as unread " << mail->identifier(); - run(Store::modify(*mail)); + runModification([] (ApplicationDomain::Mail &mail) { + mail.setUnread(true); + SinkLog() << "Mark as unread " << mail.identifier(); + }); } void MailController::markAsImportant() { - auto mail = getMail(); - mail->setImportant(true); - SinkLog() << "Mark as important " << mail->identifier(); - run(Store::modify(*mail)); + runModification([] (ApplicationDomain::Mail &mail) { + mail.setImportant(true); + SinkLog() << "Mark as important " << mail.identifier(); + }); } void MailController::moveToTrash() { - auto mail = getMail(); - mail->setTrash(true); - SinkLog() << "Move to trash " << mail->identifier(); - run(Store::modify(*mail)); + runModification([] (ApplicationDomain::Mail &mail) { + mail.setTrash(true); + SinkLog() << "Move to trash " << mail.identifier(); + }); } void MailController::restoreFromTrash() { - auto mail = getMail(); - mail->setTrash(false); - SinkLog() << "Restore from trash " << mail->identifier(); - run(Store::modify(*mail)); + runModification([] (ApplicationDomain::Mail &mail) { + mail.setTrash(false); + SinkLog() << "Restore from trash " << mail.identifier(); + }); } void MailController::remove() { - auto mail = getMail(); - mail->setTrash(true); - SinkLog() << "Remove " << mail->identifier(); - run(Store::remove(*mail)); + runModification([] (ApplicationDomain::Mail &mail) { + mail.setTrash(true); + SinkLog() << "Remove " << mail.identifier(); + }); } void MailController::moveToFolder() { - auto mail = getMail(); - auto targetFolder = getTargetFolder(); - mail->setFolder(*targetFolder); - SinkLog() << "Moving to folder " << mail->identifier() << targetFolder->identifier(); - run(Store::modify(*mail)); + runModification([&] (ApplicationDomain::Mail &mail) { + auto targetFolder = getTargetFolder(); + mail.setFolder(*targetFolder); + SinkLog() << "Moving to folder " << mail.identifier() << targetFolder->identifier(); + }); } diff --git a/framework/domain/mailcontroller.h b/framework/domain/mailcontroller.h index b4f08aac..ae0f32d5 100644 --- a/framework/domain/mailcontroller.h +++ b/framework/domain/mailcontroller.h @@ -26,6 +26,7 @@ class MailController : public Kube::Controller { Q_OBJECT KUBE_CONTROLLER_PROPERTY(Sink::ApplicationDomain::Mail::Ptr, Mail, mail) + KUBE_CONTROLLER_PROPERTY(Sink::ApplicationDomain::Mail::Ptr, ThreadLeader, threadLeader) KUBE_CONTROLLER_PROPERTY(Sink::ApplicationDomain::Folder::Ptr, TargetFolder, targetFolder) KUBE_CONTROLLER_ACTION(markAsRead) KUBE_CONTROLLER_ACTION(markAsUnread) @@ -39,4 +40,5 @@ public: explicit MailController(); private slots: void updateActions(); + void runModification(const std::function &f); }; -- cgit v1.2.3