summaryrefslogtreecommitdiffstats
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
parent7129af7b55dd13c8caa359f7cda9642bfab533b4 (diff)
downloadkube-8facecfbeb4539275fce77b4a07a6a1cfad32052.tar.gz
kube-8facecfbeb4539275fce77b4a07a6a1cfad32052.zip
Thread actions
-rw-r--r--components/package/contents/ui/SingleMailView.qml2
-rw-r--r--framework/domain/mailcontroller.cpp76
-rw-r--r--framework/domain/mailcontroller.h2
3 files changed, 49 insertions, 31 deletions
diff --git a/components/package/contents/ui/SingleMailView.qml b/components/package/contents/ui/SingleMailView.qml
index d7c3193c..6baeaed2 100644
--- a/components/package/contents/ui/SingleMailView.qml
+++ b/components/package/contents/ui/SingleMailView.qml
@@ -363,7 +363,7 @@ Item {
363 363
364 KubeFramework.MailController { 364 KubeFramework.MailController {
365 id: mailController 365 id: mailController
366 mail: model.mail 366 threadLeader: model.mail
367 } 367 }
368 368
369 text: model.trash ? qsTr("Delete Mail") : qsTr("Move to trash") 369 text: model.trash ? qsTr("Delete Mail") : qsTr("Move to trash")
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
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
26{ 26{
27 Q_OBJECT 27 Q_OBJECT
28 KUBE_CONTROLLER_PROPERTY(Sink::ApplicationDomain::Mail::Ptr, Mail, mail) 28 KUBE_CONTROLLER_PROPERTY(Sink::ApplicationDomain::Mail::Ptr, Mail, mail)
29 KUBE_CONTROLLER_PROPERTY(Sink::ApplicationDomain::Mail::Ptr, ThreadLeader, threadLeader)
29 KUBE_CONTROLLER_PROPERTY(Sink::ApplicationDomain::Folder::Ptr, TargetFolder, targetFolder) 30 KUBE_CONTROLLER_PROPERTY(Sink::ApplicationDomain::Folder::Ptr, TargetFolder, targetFolder)
30 KUBE_CONTROLLER_ACTION(markAsRead) 31 KUBE_CONTROLLER_ACTION(markAsRead)
31 KUBE_CONTROLLER_ACTION(markAsUnread) 32 KUBE_CONTROLLER_ACTION(markAsUnread)
@@ -39,4 +40,5 @@ public:
39 explicit MailController(); 40 explicit MailController();
40private slots: 41private slots:
41 void updateActions(); 42 void updateActions();
43 void runModification(const std::function<void(Sink::ApplicationDomain::Mail &)> &f);
42}; 44};