From aaf114296e50bfa93b831491738cd0a780085c3d Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 11 May 2016 11:12:12 +0200 Subject: Let the controller retrieve what it requires, remember the id of the draft to modfiy. --- components/mail/contents/ui/main.qml | 6 ++- components/package/contents/ui/Composer.qml | 24 ++---------- components/package/contents/ui/FocusComposer.qml | 8 ++-- framework/domain/actions/sinkactions.cpp | 2 +- framework/domain/composercontroller.cpp | 50 ++++++++++++------------ framework/domain/composercontroller.h | 8 ++-- 6 files changed, 40 insertions(+), 58 deletions(-) diff --git a/components/mail/contents/ui/main.qml b/components/mail/contents/ui/main.qml index c2569cdc..8d7047ab 100644 --- a/components/mail/contents/ui/main.qml +++ b/components/mail/contents/ui/main.qml @@ -184,7 +184,8 @@ ApplicationWindow { } function handler(context) { - composerComponent.createObject(app, {"originalMessage": context.mail}) + var component = composerComponent.createObject(app) + component.loadMessage(context.mail, false) } } @@ -195,7 +196,8 @@ ApplicationWindow { } function handler(context) { - composerComponent.createObject(app, {"draftMessage": context.mail}) + var component= composerComponent.createObject(app, {"draftMessage": context.mail}) + component.loadMessage(context.mail, true) } } diff --git a/components/package/contents/ui/Composer.qml b/components/package/contents/ui/Composer.qml index ed8fb2f2..aef6913b 100644 --- a/components/package/contents/ui/Composer.qml +++ b/components/package/contents/ui/Composer.qml @@ -25,8 +25,10 @@ import org.kube.framework.domain 1.0 as KubeFramework Item { id: root - property variant originalMessage - property variant draftMessage + + function loadMessage(message, loadAsDraft) { + composer.loadMessage(message, loadAsDraft) + } function send() { composer.send() @@ -40,26 +42,8 @@ Item { composer.clear(); } - KubeFramework.Retriever { - id: originalMessageRetriever - propertyName: "mimeMessage" - model: KubeFramework.MailListModel { - mail: root.originalMessage - } - } - - KubeFramework.Retriever { - id: draftMessageRetriever - propertyName: "mimeMessage" - model: KubeFramework.MailListModel { - mail: root.draftMessage - } - } - KubeFramework.ComposerController { id: composer - originalMessage: originalMessageRetriever.value - draftMessage: draftMessageRetriever.value } ColumnLayout { diff --git a/components/package/contents/ui/FocusComposer.qml b/components/package/contents/ui/FocusComposer.qml index 4e61b6c1..ea410338 100644 --- a/components/package/contents/ui/FocusComposer.qml +++ b/components/package/contents/ui/FocusComposer.qml @@ -23,8 +23,10 @@ import org.kube.framework.theme 1.0 Rectangle { id: root - property variant originalMessage - property variant draftMessage + + function loadMessage(message, loadAsDraft) { + composer.loadMessage(message, loadAsDraft); + } color: ColorPalette.border @@ -62,8 +64,6 @@ Rectangle { Layout.fillWidth: true Layout.fillHeight: true - originalMessage: root.originalMessage - draftMessage: root.draftMessage } RowLayout { diff --git a/framework/domain/actions/sinkactions.cpp b/framework/domain/actions/sinkactions.cpp index 354a5aca..129b538a 100644 --- a/framework/domain/actions/sinkactions.cpp +++ b/framework/domain/actions/sinkactions.cpp @@ -130,7 +130,7 @@ static ActionHandlerHelper saveAsDraft("org.kde.kube.actions.save-as-draft", return Sink::Store::create(mail); }); } else { - qWarning() << "Modifying an existing mail"; + qWarning() << "Modifying an existing mail" << existingMail.identifier(); existingMail.setBlobProperty("mimeMessage", message->encodedContent()); return Sink::Store::modify(existingMail); } diff --git a/framework/domain/composercontroller.cpp b/framework/domain/composercontroller.cpp index 94914f17..2dcf1bb1 100644 --- a/framework/domain/composercontroller.cpp +++ b/framework/domain/composercontroller.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include "accountsmodel.h" #include "identitiesmodel.h" @@ -128,32 +129,28 @@ void ComposerController::setMessage(const KMime::Message::Ptr &msg) m_msg = QVariant::fromValue(msg); } -void ComposerController::setOriginalMessage(const QVariant &originalMessage) -{ - const auto mailData = KMime::CRLFtoLF(originalMessage.toByteArray()); - if (!mailData.isEmpty()) { - KMime::Message::Ptr mail(new KMime::Message); - mail->setContent(mailData); - mail->parse(); - auto reply = MailTemplates::reply(mail); - //We assume reply - setMessage(reply); - } else { - m_msg = QVariant(); - } -} - -void ComposerController::setDraftMessage(const QVariant &originalMessage) -{ - const auto mailData = KMime::CRLFtoLF(originalMessage.toByteArray()); - if (!mailData.isEmpty()) { - KMime::Message::Ptr mail(new KMime::Message); - mail->setContent(mailData); - mail->parse(); - setMessage(mail); - } else { - m_msg = QVariant(); - } +void ComposerController::loadMessage(const QVariant &message, bool loadAsDraft) +{ + Sink::Query query(*message.value()); + query.request(); + Sink::Store::fetchOne(query).then([this, loadAsDraft](const Sink::ApplicationDomain::Mail &mail) { + m_existingMail = mail; + const auto mailData = KMime::CRLFtoLF(mail.getMimeMessage()); + if (!mailData.isEmpty()) { + KMime::Message::Ptr mail(new KMime::Message); + mail->setContent(mailData); + mail->parse(); + if (loadAsDraft) { + auto reply = MailTemplates::reply(mail); + //We assume reply + setMessage(reply); + } else { + setMessage(mail); + } + } else { + qWarning() << "Retrieved empty message"; + } + }).exec(); } KMime::Message::Ptr ComposerController::assembleMessage() @@ -203,6 +200,7 @@ void ComposerController::saveAsDraft() Kube::Context context; context.setProperty("message", QVariant::fromValue(mail)); context.setProperty("accountId", QVariant::fromValue(currentAccountId)); + context.setProperty("existingMail", QVariant::fromValue(m_existingMail)); Kube::Action("org.kde.kube.actions.save-as-draft", context).execute(); clear(); } diff --git a/framework/domain/composercontroller.h b/framework/domain/composercontroller.h index b24c16a9..8390c639 100644 --- a/framework/domain/composercontroller.h +++ b/framework/domain/composercontroller.h @@ -24,6 +24,7 @@ #include #include #include +#include namespace KMime { class Message; @@ -32,8 +33,6 @@ class Message; class ComposerController : public QObject { Q_OBJECT - Q_PROPERTY (QVariant originalMessage WRITE setOriginalMessage) - Q_PROPERTY (QVariant draftMessage WRITE setDraftMessage) Q_PROPERTY (QString to READ to WRITE setTo NOTIFY toChanged) Q_PROPERTY (QString cc READ cc WRITE setCc NOTIFY ccChanged) Q_PROPERTY (QString bcc READ bcc WRITE setBcc NOTIFY bccChanged) @@ -64,9 +63,7 @@ public: QAbstractItemModel *identityModel() const; QStringList attachemts() const; - - void setOriginalMessage(const QVariant &originalMessage); - void setDraftMessage(const QVariant &draft); + Q_INVOKABLE void loadMessage(const QVariant &draft, bool loadAsDraft); signals: void subjectChanged(); @@ -92,6 +89,7 @@ private: QString m_subject; QString m_body; QStringList m_attachments; + Sink::ApplicationDomain::Mail m_existingMail; QVariant m_msg; int m_currentAccountIndex; }; -- cgit v1.2.3