summaryrefslogtreecommitdiffstats
path: root/framework/domain/mailcontroller.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-01-12 12:42:37 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-01-12 12:42:37 +0100
commit8facecfbeb4539275fce77b4a07a6a1cfad32052 (patch)
tree90f45cc07a88b6b739c486745ad320cf2ed8aa91 /framework/domain/mailcontroller.cpp
parent7129af7b55dd13c8caa359f7cda9642bfab533b4 (diff)
downloadkube-8facecfbeb4539275fce77b4a07a6a1cfad32052.tar.gz
kube-8facecfbeb4539275fce77b4a07a6a1cfad32052.zip
Thread actions
Diffstat (limited to 'framework/domain/mailcontroller.cpp')
-rw-r--r--framework/domain/mailcontroller.cpp76
1 files changed, 46 insertions, 30 deletions
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 @@
20 20
21#include <sink/store.h> 21#include <sink/store.h>
22#include <sink/log.h> 22#include <sink/log.h>
23#include <sink/standardqueries.h>
23 24
24SINK_DEBUG_AREA("mailcontroller"); 25SINK_DEBUG_AREA("mailcontroller");
25 26
@@ -40,9 +41,24 @@ MailController::MailController()
40 updateActions(); 41 updateActions();
41} 42}
42 43
43void MailController::updateActions() 44void MailController::runModification(const std::function<void(ApplicationDomain::Mail &)> &f)
44{ 45{
45 if (auto mail = getMail()) { 46 if (auto mail = getMail()) {
47 f(*mail);
48 run(Store::modify(*mail));
49 } else if (auto mail = getThreadLeader()) {
50 f(*mail);
51 run(Store::modify(Sink::StandardQueries::completeThread(*mail), *mail));
52 }
53}
54
55void MailController::updateActions()
56{
57 auto mail = getMail();
58 if (!mail) {
59 mail= getThreadLeader();
60 }
61 if (mail) {
46 action_moveToTrash->setEnabled(!mail->getTrash()); 62 action_moveToTrash->setEnabled(!mail->getTrash());
47 action_restoreFromTrash->setEnabled(mail->getTrash()); 63 action_restoreFromTrash->setEnabled(mail->getTrash());
48 } 64 }
@@ -50,58 +66,58 @@ void MailController::updateActions()
50 66
51void MailController::markAsRead() 67void MailController::markAsRead()
52{ 68{
53 auto mail = getMail(); 69 runModification([] (ApplicationDomain::Mail &mail) {
54 mail->setUnread(false); 70 mail.setUnread(false);
55 SinkLog() << "Mark as read " << mail->identifier(); 71 SinkLog() << "Mark as read " << mail.identifier();
56 run(Store::modify(*mail)); 72 });
57} 73}
58 74
59void MailController::markAsUnread() 75void MailController::markAsUnread()
60{ 76{
61 auto mail = getMail(); 77 runModification([] (ApplicationDomain::Mail &mail) {
62 mail->setUnread(true); 78 mail.setUnread(true);
63 SinkLog() << "Mark as unread " << mail->identifier(); 79 SinkLog() << "Mark as unread " << mail.identifier();
64 run(Store::modify(*mail)); 80 });
65} 81}
66 82
67void MailController::markAsImportant() 83void MailController::markAsImportant()
68{ 84{
69 auto mail = getMail(); 85 runModification([] (ApplicationDomain::Mail &mail) {
70 mail->setImportant(true); 86 mail.setImportant(true);
71 SinkLog() << "Mark as important " << mail->identifier(); 87 SinkLog() << "Mark as important " << mail.identifier();
72 run(Store::modify(*mail)); 88 });
73} 89}
74 90
75void MailController::moveToTrash() 91void MailController::moveToTrash()
76{ 92{
77 auto mail = getMail(); 93 runModification([] (ApplicationDomain::Mail &mail) {
78 mail->setTrash(true); 94 mail.setTrash(true);
79 SinkLog() << "Move to trash " << mail->identifier(); 95 SinkLog() << "Move to trash " << mail.identifier();
80 run(Store::modify(*mail)); 96 });
81} 97}
82 98
83void MailController::restoreFromTrash() 99void MailController::restoreFromTrash()
84{ 100{
85 auto mail = getMail(); 101 runModification([] (ApplicationDomain::Mail &mail) {
86 mail->setTrash(false); 102 mail.setTrash(false);
87 SinkLog() << "Restore from trash " << mail->identifier(); 103 SinkLog() << "Restore from trash " << mail.identifier();
88 run(Store::modify(*mail)); 104 });
89} 105}
90 106
91void MailController::remove() 107void MailController::remove()
92{ 108{
93 auto mail = getMail(); 109 runModification([] (ApplicationDomain::Mail &mail) {
94 mail->setTrash(true); 110 mail.setTrash(true);
95 SinkLog() << "Remove " << mail->identifier(); 111 SinkLog() << "Remove " << mail.identifier();
96 run(Store::remove(*mail)); 112 });
97} 113}
98 114
99void MailController::moveToFolder() 115void MailController::moveToFolder()
100{ 116{
101 auto mail = getMail(); 117 runModification([&] (ApplicationDomain::Mail &mail) {
102 auto targetFolder = getTargetFolder(); 118 auto targetFolder = getTargetFolder();
103 mail->setFolder(*targetFolder); 119 mail.setFolder(*targetFolder);
104 SinkLog() << "Moving to folder " << mail->identifier() << targetFolder->identifier(); 120 SinkLog() << "Moving to folder " << mail.identifier() << targetFolder->identifier();
105 run(Store::modify(*mail)); 121 });
106} 122}
107 123