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. --- framework/domain/actions/sinkactions.cpp | 2 +- framework/domain/composercontroller.cpp | 50 +++++++++++++++----------------- framework/domain/composercontroller.h | 8 ++--- 3 files changed, 28 insertions(+), 32 deletions(-) (limited to 'framework/domain') 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