From f0a88e15144817d854923e8beb63902accbe4cc9 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 9 Mar 2016 15:04:39 +0100 Subject: Prepared a save-as-draft action. --- framework/mail/actions/sinkactions.cpp | 36 ++++++++++++++++++++++++++++++++++ framework/mail/composer.cpp | 12 ++++++++++-- framework/mail/composer.h | 5 +++++ 3 files changed, 51 insertions(+), 2 deletions(-) (limited to 'framework') diff --git a/framework/mail/actions/sinkactions.cpp b/framework/mail/actions/sinkactions.cpp index e00d3947..a19ab149 100644 --- a/framework/mail/actions/sinkactions.cpp +++ b/framework/mail/actions/sinkactions.cpp @@ -68,3 +68,39 @@ static ActionHandlerHelper synchronizeHandler("org.kde.kube.actions.synchronize" Sink::Store::synchronize(Sink::Query::ResourceFilter(folder->resourceInstanceIdentifier())).exec(); } ); + +// static ActionHandlerHelper saveAsDraft("org.kde.kube.actions.save-as-draft", +// [](Context *context) -> bool { +// return context->property("mail").isValid(); +// }, +// [](Context *context) { +// Sink::Query query; +// query += Sink::Query::RequestedProperties(QByteArrayList() << "name") +// //FIXME do something like specialuse? +// query += Sink::Query::PropertyFilter("name", "Drafts"); +// // query += Sink::Query::PropertyContainsFilter("specialuser", "drafts"); +// query += Sink::Query::PropertyFilter("drafts", true); +// //TODO Use drafts folder of that specific account +// Sink::Store::fetchAll(query) +// .then>([](const QList folders) { +// if (folders.isEmpty()) { +// return KAsync::start([]() { +// //If message is already existing, modify, otherwise create +// }); +// } +// }); +// //TODO +// // * Find drafts folder +// // * Store KMime::Message on disk for use in blob property +// // * Check if message is already existing and either create or update +// // * +// // auto mail = context->property("mail").value(); +// // if (!mail) { +// // qWarning() << "Failed to get the mail mail: " << context->property("mail"); +// // return; +// // } +// // mail->setProperty("unread", false); +// // qDebug() << "Mark as read " << mail->identifier(); +// // Sink::Store::modify(*mail).exec(); +// } +// ); diff --git a/framework/mail/composer.cpp b/framework/mail/composer.cpp index 9edc8345..2f4fe2e9 100644 --- a/framework/mail/composer.cpp +++ b/framework/mail/composer.cpp @@ -141,7 +141,7 @@ void Composer::setOriginalMessage(const QVariant &originalMessage) } } -void Composer::send() +KMime::Message::Ptr Composer::assembleMessage() { auto mail = m_msg.value(); if (!mail) { @@ -157,7 +157,12 @@ void Composer::send() mail->subject(true)->fromUnicodeString(m_subject, "utf-8"); mail->setBody(m_body.toUtf8()); mail->assemble(); + return mail; +} +void Composer::send() +{ + auto mail = assembleMessage(); Kube::ApplicationContext settings; auto account = settings.currentAccount(); auto identity = account.primaryIdentity(); @@ -176,7 +181,10 @@ void Composer::send() void Composer::saveAsDraft() { - //TODO + auto mail = assembleMessage(); + Kube::Context context; + context.setProperty("message", QVariant::fromValue(mail)); + Kube::Action("org.kde.kube.actions.saveasdraft", context).execute(); clear(); } diff --git a/framework/mail/composer.h b/framework/mail/composer.h index ee38187f..dd066b2e 100644 --- a/framework/mail/composer.h +++ b/framework/mail/composer.h @@ -24,6 +24,10 @@ #include #include +namespace KMime { +class Message; +} + class Composer : public QObject { Q_OBJECT @@ -76,6 +80,7 @@ public slots: void clear(); private: + QSharedPointer assembleMessage(); QString m_to; QString m_cc; QString m_bcc; -- cgit v1.2.3