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 --- components/mail/contents/ui/main.qml | 29 +++++++++++++++++++++ components/package/contents/ui/Composer.qml | 15 ++++++++--- components/package/contents/ui/FocusComposer.qml | 2 ++ components/package/contents/ui/MailListView.qml | 7 +++++ framework/domain/composercontroller.cpp | 33 +++++++++++++++++------- framework/domain/composercontroller.h | 7 ++--- framework/domain/maillistmodel.cpp | 5 ++++ framework/domain/maillistmodel.h | 1 + 8 files changed, 83 insertions(+), 16 deletions(-) diff --git a/components/mail/contents/ui/main.qml b/components/mail/contents/ui/main.qml index 15a2b0b8..c2569cdc 100644 --- a/components/mail/contents/ui/main.qml +++ b/components/mail/contents/ui/main.qml @@ -38,7 +38,9 @@ ApplicationWindow { KubeAction.Context { id: maillistcontext property variant mail + property bool isDraft mail: mailListView.currentMail + isDraft: mailListView.isDraft } KubeAction.Context { @@ -53,6 +55,12 @@ ApplicationWindow { context: maillistcontext } + KubeAction.Action { + id: editAction + actionId: "org.kde.kube.actions.edit" + context: maillistcontext + } + KubeAction.Action { id: markAsReadAction actionId: "org.kde.kube.actions.mark-as-read" @@ -180,6 +188,17 @@ ApplicationWindow { } } + KubeAction.ActionHandler { + actionId: "org.kde.kube.actions.edit" + function isReady(context) { + return context.mail && context.isDraft; + } + + function handler(context) { + composerComponent.createObject(app, {"draftMessage": context.mail}) + } + } + ToolButton { id: newMailButton @@ -202,6 +221,16 @@ ApplicationWindow { } } + ToolButton { + Layout.fillHeight: true + iconName: "mail-message-edit" + text: "Edit" + enabled: editAction.ready + onClicked: { + editAction.execute() + } + } + Item { Layout.fillWidth: true } diff --git a/components/package/contents/ui/Composer.qml b/components/package/contents/ui/Composer.qml index 8c6f9c77..ed8fb2f2 100644 --- a/components/package/contents/ui/Composer.qml +++ b/components/package/contents/ui/Composer.qml @@ -26,6 +26,7 @@ import org.kube.framework.domain 1.0 as KubeFramework Item { id: root property variant originalMessage + property variant draftMessage function send() { composer.send() @@ -40,17 +41,25 @@ Item { } KubeFramework.Retriever { - id: retriever + id: originalMessageRetriever propertyName: "mimeMessage" model: KubeFramework.MailListModel { - id: mailListModel mail: root.originalMessage } } + KubeFramework.Retriever { + id: draftMessageRetriever + propertyName: "mimeMessage" + model: KubeFramework.MailListModel { + mail: root.draftMessage + } + } + KubeFramework.ComposerController { id: composer - originalMessage: retriever.value + originalMessage: originalMessageRetriever.value + draftMessage: draftMessageRetriever.value } ColumnLayout { diff --git a/components/package/contents/ui/FocusComposer.qml b/components/package/contents/ui/FocusComposer.qml index 1cd3cb32..4e61b6c1 100644 --- a/components/package/contents/ui/FocusComposer.qml +++ b/components/package/contents/ui/FocusComposer.qml @@ -24,6 +24,7 @@ import org.kube.framework.theme 1.0 Rectangle { id: root property variant originalMessage + property variant draftMessage color: ColorPalette.border @@ -62,6 +63,7 @@ Rectangle { Layout.fillWidth: true Layout.fillHeight: true originalMessage: root.originalMessage + draftMessage: root.draftMessage } RowLayout { diff --git a/components/package/contents/ui/MailListView.qml b/components/package/contents/ui/MailListView.qml index 12d6c705..9caaa9ce 100644 --- a/components/package/contents/ui/MailListView.qml +++ b/components/package/contents/ui/MailListView.qml @@ -29,6 +29,7 @@ Controls.ScrollView { id: root property variant parentFolder property variant currentMail + property bool isDraft : false ListView { id: listView @@ -69,6 +70,12 @@ Controls.ScrollView { when: listView.currentIndex == index value: model.domainObject } + QtQml.Binding { + target: root + property: "isDraft" + when: listView.currentIndex == index + value: model.draft + } RowLayout { 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