summaryrefslogtreecommitdiffstats
path: root/framework/src/domain/composercontroller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/domain/composercontroller.cpp')
-rw-r--r--framework/src/domain/composercontroller.cpp66
1 files changed, 38 insertions, 28 deletions
diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp
index 60e955ea..4bfc34ab 100644
--- a/framework/src/domain/composercontroller.cpp
+++ b/framework/src/domain/composercontroller.cpp
@@ -272,14 +272,8 @@ static QStringList getStringListFromAddresses(const KMime::Types::Mailbox::List
272void ComposerController::addAttachmentPart(KMime::Content *partToAttach) 272void ComposerController::addAttachmentPart(KMime::Content *partToAttach)
273{ 273{
274 QVariantMap map; 274 QVariantMap map;
275 if (partToAttach->contentType()->mimeType() == "multipart/digest" || 275 // May need special care for the multipart/digest MIME type
276 partToAttach->contentType()->mimeType() == "message/rfc822") { 276 map.insert("content", partToAttach->decodedContent());
277 // if it is a digest or a full message, use the encodedContent() of the attachment,
278 // which already has the proper headers
279 map.insert("content", partToAttach->encodedContent());
280 } else {
281 map.insert("content", partToAttach->decodedContent());
282 }
283 map.insert("mimetype", partToAttach->contentType()->mimeType()); 277 map.insert("mimetype", partToAttach->contentType()->mimeType());
284 278
285 QMimeDatabase db; 279 QMimeDatabase db;
@@ -337,7 +331,40 @@ void ComposerController::setMessage(const KMime::Message::Ptr &msg)
337 setExistingMessage(msg); 331 setExistingMessage(msg);
338} 332}
339 333
340void ComposerController::loadMessage(const QVariant &message, bool loadAsDraft) 334void ComposerController::loadDraft(const QVariant &message) {
335 loadMessage(message, [this] (const KMime::Message::Ptr &mail) {
336 mRemoveDraft = true;
337 setMessage(mail);
338 });
339}
340
341void ComposerController::loadReply(const QVariant &message) {
342 loadMessage(message, [this] (const KMime::Message::Ptr &mail) {
343 //Find all personal email addresses to exclude from reply
344 KMime::Types::AddrSpecList me;
345 auto list = static_cast<IdentitySelector*>(mIdentitySelector.data())->getAllAddresses();
346 for (const auto &a : list) {
347 KMime::Types::Mailbox mb;
348 mb.setAddress(a);
349 me << mb.addrSpec();
350 }
351
352 MailTemplates::reply(mail, [this] (const KMime::Message::Ptr &reply) {
353 //We assume reply
354 setMessage(reply);
355 }, me);
356 });
357}
358
359void ComposerController::loadForward(const QVariant &message) {
360 loadMessage(message, [this] (const KMime::Message::Ptr &mail) {
361 MailTemplates::forward(mail, [this] (const KMime::Message::Ptr &fwdMessage) {
362 setMessage(fwdMessage);
363 });
364 });
365}
366
367void ComposerController::loadMessage(const QVariant &message, std::function<void(const KMime::Message::Ptr&)> callback)
341{ 368{
342 using namespace Sink; 369 using namespace Sink;
343 using namespace Sink::ApplicationDomain; 370 using namespace Sink::ApplicationDomain;
@@ -346,8 +373,7 @@ void ComposerController::loadMessage(const QVariant &message, bool loadAsDraft)
346 Q_ASSERT(msg); 373 Q_ASSERT(msg);
347 Query query(*msg); 374 Query query(*msg);
348 query.request<Mail::MimeMessage>(); 375 query.request<Mail::MimeMessage>();
349 Store::fetchOne<Mail>(query).then([this, loadAsDraft](const Mail &mail) { 376 Store::fetchOne<Mail>(query).then([this, callback](const Mail &mail) {
350 mRemoveDraft = loadAsDraft;
351 setExistingMail(mail); 377 setExistingMail(mail);
352 378
353 const auto mailData = KMime::CRLFtoLF(mail.getMimeMessage()); 379 const auto mailData = KMime::CRLFtoLF(mail.getMimeMessage());
@@ -355,23 +381,7 @@ void ComposerController::loadMessage(const QVariant &message, bool loadAsDraft)
355 KMime::Message::Ptr mail(new KMime::Message); 381 KMime::Message::Ptr mail(new KMime::Message);
356 mail->setContent(mailData); 382 mail->setContent(mailData);
357 mail->parse(); 383 mail->parse();
358 if (loadAsDraft) { 384 callback(mail);
359 setMessage(mail);
360 } else {
361 //Find all personal email addresses to exclude from reply
362 KMime::Types::AddrSpecList me;
363 auto list = static_cast<IdentitySelector*>(mIdentitySelector.data())->getAllAddresses();
364 for (const auto &a : list) {
365 KMime::Types::Mailbox mb;
366 mb.setAddress(a);
367 me << mb.addrSpec();
368 }
369
370 MailTemplates::reply(mail, [this] (const KMime::Message::Ptr &reply) {
371 //We assume reply
372 setMessage(reply);
373 }, me);
374 }
375 } else { 385 } else {
376 qWarning() << "Retrieved empty message"; 386 qWarning() << "Retrieved empty message";
377 } 387 }