From df10583b42f49a58d27dd6dd322f22fd88ce1418 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 10 May 2016 15:53:06 +0200 Subject: Support for loading drafts --- framework/domain/composercontroller.cpp | 33 +++++++++++++++++++++++---------- framework/domain/composercontroller.h | 7 ++++--- framework/domain/maillistmodel.cpp | 5 +++++ framework/domain/maillistmodel.h | 1 + 4 files changed, 33 insertions(+), 13 deletions(-) (limited to 'framework/domain') diff --git a/framework/domain/composercontroller.cpp b/framework/domain/composercontroller.cpp index 0cf61442..94914f17 100644 --- a/framework/domain/composercontroller.cpp +++ b/framework/domain/composercontroller.cpp @@ -113,17 +113,21 @@ QStringList ComposerController::attachemts() const return m_attachments; } -QVariant ComposerController::originalMessage() const -{ - return m_originalMessage; -} - void ComposerController::addAttachment(const QUrl &fileUrl) { m_attachments.append(fileUrl.toString()); emit attachmentsChanged(); } +void ComposerController::setMessage(const KMime::Message::Ptr &msg) +{ + setTo(msg->to(true)->asUnicodeString()); + setCc(msg->cc(true)->asUnicodeString()); + setSubject(msg->subject(true)->asUnicodeString()); + setBody(msg->body()); + m_msg = QVariant::fromValue(msg); +} + void ComposerController::setOriginalMessage(const QVariant &originalMessage) { const auto mailData = KMime::CRLFtoLF(originalMessage.toByteArray()); @@ -133,11 +137,20 @@ void ComposerController::setOriginalMessage(const QVariant &originalMessage) mail->parse(); auto reply = MailTemplates::reply(mail); //We assume reply - setTo(reply->to(true)->asUnicodeString()); - setCc(reply->cc(true)->asUnicodeString()); - setSubject(reply->subject(true)->asUnicodeString()); - setBody(reply->body()); - m_msg = QVariant::fromValue(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(); } diff --git a/framework/domain/composercontroller.h b/framework/domain/composercontroller.h index 4ad505d8..b24c16a9 100644 --- a/framework/domain/composercontroller.h +++ b/framework/domain/composercontroller.h @@ -32,7 +32,8 @@ class Message; class ComposerController : public QObject { Q_OBJECT - Q_PROPERTY (QVariant originalMessage READ originalMessage WRITE setOriginalMessage) + 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,8 +65,8 @@ public: QStringList attachemts() const; - QVariant originalMessage() const; void setOriginalMessage(const QVariant &originalMessage); + void setDraftMessage(const QVariant &draft); signals: void subjectChanged(); @@ -83,6 +84,7 @@ public slots: void addAttachment(const QUrl &fileUrl); private: + void setMessage(const QSharedPointer &msg); QSharedPointer assembleMessage(); QString m_to; QString m_cc; @@ -90,7 +92,6 @@ private: QString m_subject; QString m_body; QStringList m_attachments; - QVariant m_originalMessage; QVariant m_msg; int m_currentAccountIndex; }; diff --git a/framework/domain/maillistmodel.cpp b/framework/domain/maillistmodel.cpp index cbf39a86..4ea7075c 100644 --- a/framework/domain/maillistmodel.cpp +++ b/framework/domain/maillistmodel.cpp @@ -46,6 +46,7 @@ QHash< int, QByteArray > MailListModel::roleNames() const roles[Date] = "date"; roles[Unread] = "unread"; roles[Important] = "important"; + roles[Draft] = "draft"; roles[Id] = "id"; roles[MimeMessage] = "mimeMessage"; roles[DomainObject] = "domainObject"; @@ -70,6 +71,8 @@ QVariant MailListModel::data(const QModelIndex &idx, int role) const return mail->getUnread(); case Important: return mail->getImportant(); + case Draft: + return mail->getDraft(); case Id: return mail->identifier(); case DomainObject: @@ -113,6 +116,7 @@ void MailListModel::setParentFolder(const QVariant &parentFolder) query.request(); query.request(); query.request(); + query.request(); query.request(); query.filter(*folder); qWarning() << "Running folder query: " << folder->resourceInstanceIdentifier() << folder->identifier(); @@ -140,6 +144,7 @@ void MailListModel::setMail(const QVariant &variant) query.request(); query.request(); query.request(); + query.request(); query.request(); qWarning() << "Running mail query: " << mail->resourceInstanceIdentifier() << mail->identifier(); runQuery(query); diff --git a/framework/domain/maillistmodel.h b/framework/domain/maillistmodel.h index 47a2a091..13662a17 100644 --- a/framework/domain/maillistmodel.h +++ b/framework/domain/maillistmodel.h @@ -47,6 +47,7 @@ public: Date, Unread, Important, + Draft, Id, MimeMessage, DomainObject -- cgit v1.2.3