From bd1622c27e744971b8fc70b90e9c9d175acec2f2 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 10 Apr 2016 11:00:57 +0200 Subject: Use the MailtransportResource for mailtransport. --- framework/domain/actions/mailactions.cpp | 19 -------------- framework/domain/actions/sinkactions.cpp | 43 ++++++++++++++++++++++++++++++++ framework/domain/composercontroller.cpp | 35 ++++++++------------------ framework/domain/composercontroller.h | 13 ++++------ 4 files changed, 59 insertions(+), 51 deletions(-) (limited to 'framework') diff --git a/framework/domain/actions/mailactions.cpp b/framework/domain/actions/mailactions.cpp index dab0533e..fde98c85 100644 --- a/framework/domain/actions/mailactions.cpp +++ b/framework/domain/actions/mailactions.cpp @@ -27,22 +27,3 @@ using namespace Kube; -static ActionHandlerHelper sendMailHandler("org.kde.kube.actions.sendmail", - [](Context *context) -> bool { - auto username = context->property("username").value(); - auto password = context->property("password").value(); - auto server = context->property("server").value(); - auto message = context->property("message").value(); - return !username.isEmpty() && !password.isEmpty() && !server.isEmpty() && message; - }, - [](Context *context) { - auto username = context->property("username").value(); - auto password = context->property("password").value(); - auto server = context->property("server").value(); - //For ssl use "smtps://mainserver.example.net - QByteArray cacert; // = "/path/to/certificate.pem"; - auto message = context->property("message").value(); - qWarning() << "Sending a mail: "; - MailTransport::sendMessage(message, server, username, password, cacert); - } -); diff --git a/framework/domain/actions/sinkactions.cpp b/framework/domain/actions/sinkactions.cpp index 57d63752..dea6fc72 100644 --- a/framework/domain/actions/sinkactions.cpp +++ b/framework/domain/actions/sinkactions.cpp @@ -19,6 +19,9 @@ #include #include +#include +#include + #include using namespace Kube; @@ -70,6 +73,46 @@ static ActionHandlerHelper synchronizeHandler("org.kde.kube.actions.synchronize" } ); +static ActionHandlerHelper sendMailHandler("org.kde.kube.actions.sendmail", + [](Context *context) -> bool { + auto accountId = context->property("accountId").value(); + auto message = context->property("message").value(); + return !accountId.isEmpty() && message; + }, + [](Context *context) { + auto accountId = context->property("accountId").value(); + //For ssl use "smtps://mainserver.example.net + // QByteArray cacert; // = "/path/to/certificate.pem"; + auto message = context->property("message").value(); + auto mimeMessage = Sink::Store::getTemporaryFilePath(); + QFile file(mimeMessage); + if (!file.open(QIODevice::ReadWrite)) { + qWarning() << "Failed to open the file: " << file.errorString() << mimeMessage; + return; + } + file.write(message->encodedContent()); + qWarning() << "Sending a mail: "; + + Sink::Query query; + query += Sink::Query::PropertyFilter("type", "org.kde.mailtransport"); + query += Sink::Query::PropertyFilter("account", QVariant::fromValue(accountId)); + Sink::Store::fetchAll(query) + .then>([=](const QList &resources) { + if (resources.isEmpty()) { + qWarning() << "Failed to find a mailtransport resource"; + } else { + auto resourceId = resources[0]->identifier(); + qDebug() << "Sending message via resource: " << resourceId; + Sink::ApplicationDomain::Mail mail(resourceId); + mail.setProperty("mimeMessage", mimeMessage); + Sink::Store::create(mail).exec(); + // return Sink::Store::create(mail); + } + return KAsync::error(0, "Failed to find a MailTransport resource."); + }).exec(); + } +); + // static ActionHandlerHelper saveAsDraft("org.kde.kube.actions.save-as-draft", // [](Context *context) -> bool { // return context->property("mail").isValid(); diff --git a/framework/domain/composercontroller.cpp b/framework/domain/composercontroller.cpp index 4ab4ac21..a383de26 100644 --- a/framework/domain/composercontroller.cpp +++ b/framework/domain/composercontroller.cpp @@ -26,12 +26,13 @@ #include #include #include +#include +#include "accountsmodel.h" #include "mailtemplates.h" ComposerController::ComposerController(QObject *parent) : QObject(parent) { - m_identityModel << "Kuberich " << "Uni " << "Spam "; } QString ComposerController::to() const @@ -99,22 +100,11 @@ void ComposerController::setBody(const QString &body) } } -QStringList ComposerController::identityModel() const +QAbstractItemModel *ComposerController::identityModel() const { - return m_identityModel; -} - -int ComposerController::fromIndex() const -{ - return m_fromIndex; -} - -void ComposerController::setFromIndex(int fromIndex) -{ - if(m_fromIndex != fromIndex) { - m_fromIndex = fromIndex; - emit fromIndexChanged(); - } + static auto accountsModel = new AccountsModel(); + QQmlEngine::setObjectOwnership(accountsModel, QQmlEngine::CppOwnership); + return accountsModel;; } QStringList ComposerController::attachemts() const @@ -165,6 +155,8 @@ KMime::Message::Ptr ComposerController::assembleMessage() KEmailAddress::splitAddress(to.toUtf8(), displayName, addrSpec, comment); mail->to(true)->addAddress(addrSpec, displayName); } + //FIXME set "from" from identity (or do that in the action directly?) + // mail->from(true)->addAddress("test@example.com", "John Doe"); mail->subject(true)->fromUnicodeString(m_subject, "utf-8"); mail->setBody(m_body.toUtf8()); mail->assemble(); @@ -174,17 +166,13 @@ KMime::Message::Ptr ComposerController::assembleMessage() void ComposerController::send() { auto mail = assembleMessage(); - Kube::ApplicationContext settings; - auto account = settings.currentAccount(); - auto identity = account.primaryIdentity(); - auto transport = identity.transport(); + auto currentAccountId = identityModel()->index(m_currentAccountIndex, 0).data(AccountsModel::AccountId).toByteArray(); Kube::Context context; context.setProperty("message", QVariant::fromValue(mail)); + context.setProperty("accountId", QVariant::fromValue(currentAccountId)); - context.setProperty("username", transport.username()); - context.setProperty("password", transport.password()); - context.setProperty("server", transport.server()); + qDebug() << "Current account " << currentAccountId; Kube::Action("org.kde.kube.actions.sendmail", context).execute(); clear(); @@ -206,5 +194,4 @@ void ComposerController::clear() setTo(""); setCc(""); setBcc(""); - setFromIndex(-1); } diff --git a/framework/domain/composercontroller.h b/framework/domain/composercontroller.h index b410ce9b..4ad505d8 100644 --- a/framework/domain/composercontroller.h +++ b/framework/domain/composercontroller.h @@ -23,6 +23,7 @@ #include #include #include +#include namespace KMime { class Message; @@ -37,8 +38,8 @@ class ComposerController : public QObject Q_PROPERTY (QString bcc READ bcc WRITE setBcc NOTIFY bccChanged) Q_PROPERTY (QString subject READ subject WRITE setSubject NOTIFY subjectChanged) Q_PROPERTY (QString body READ body WRITE setBody NOTIFY bodyChanged) - Q_PROPERTY (QStringList identityModel READ identityModel) - Q_PROPERTY (int fromIndex READ fromIndex WRITE setFromIndex NOTIFY fromIndexChanged) + Q_PROPERTY (QAbstractItemModel* identityModel READ identityModel CONSTANT) + Q_PROPERTY (int currentIdentityIndex MEMBER m_currentAccountIndex) Q_PROPERTY (QStringList attachments READ attachemts NOTIFY attachmentsChanged) public: @@ -59,10 +60,7 @@ public: QString body() const; void setBody(const QString &body); - QStringList identityModel() const; - - int fromIndex() const; - void setFromIndex(int fromIndex); + QAbstractItemModel *identityModel() const; QStringList attachemts() const; @@ -91,9 +89,8 @@ private: QString m_bcc; QString m_subject; QString m_body; - QStringList m_identityModel; - int m_fromIndex; QStringList m_attachments; QVariant m_originalMessage; QVariant m_msg; + int m_currentAccountIndex; }; -- cgit v1.2.3