summaryrefslogtreecommitdiffstats
path: root/framework/src/domain/composercontroller.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-02 16:08:46 -0600
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-02 16:08:46 -0600
commit105474a893bfc6b6cd9fb86cb7b6bb6e39bb23e0 (patch)
tree57d07f46abccc836088ea27cc69bf0dae3ce9e18 /framework/src/domain/composercontroller.cpp
parent98efb475c6dacfcc937a9104c019b9aa8429f1b4 (diff)
downloadkube-105474a893bfc6b6cd9fb86cb7b6bb6e39bb23e0.tar.gz
kube-105474a893bfc6b6cd9fb86cb7b6bb6e39bb23e0.zip
Separate email assembly from controller.
Diffstat (limited to 'framework/src/domain/composercontroller.cpp')
-rw-r--r--framework/src/domain/composercontroller.cpp73
1 files changed, 51 insertions, 22 deletions
diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp
index 2cd29bfc..3c2b7fc1 100644
--- a/framework/src/domain/composercontroller.cpp
+++ b/framework/src/domain/composercontroller.cpp
@@ -408,31 +408,38 @@ static KMime::Content *createBodyPart(const QByteArray &body) {
408 return mainMessage; 408 return mainMessage;
409} 409}
410 410
411KMime::Message::Ptr ComposerController::assembleMessage() 411struct Attachment {
412 QString name;
413 QString filename;
414 QByteArray mimeType;
415 bool isInline;
416 QByteArray data;
417};
418
419static KMime::Message::Ptr createMessage(KMime::Message::Ptr existingMessage, const QStringList &to, const QStringList &cc, const QStringList &bcc, const KMime::Types::Mailbox &from, const QString &subject, const QString &body, const QList<Attachment> &attachments)
412{ 420{
413 auto mail = mExistingMessage; 421 auto mail = existingMessage;
414 if (!mail) { 422 if (!mail) {
415 mail = KMime::Message::Ptr::create(); 423 mail = KMime::Message::Ptr::create();
416 } 424 }
417 mail->to(true)->clear(); 425 mail->to(true)->clear();
418 applyAddresses(mToModel->stringList(), [&](const QByteArray &addrSpec, const QByteArray &displayName) { 426 applyAddresses(to, [&](const QByteArray &addrSpec, const QByteArray &displayName) {
419 mail->to(true)->addAddress(addrSpec, displayName); 427 mail->to(true)->addAddress(addrSpec, displayName);
420 recordForAutocompletion(addrSpec, displayName);
421 }); 428 });
429
422 mail->cc(true)->clear(); 430 mail->cc(true)->clear();
423 applyAddresses(mCcModel->stringList(), [&](const QByteArray &addrSpec, const QByteArray &displayName) { 431 applyAddresses(cc, [&](const QByteArray &addrSpec, const QByteArray &displayName) {
424 mail->cc(true)->addAddress(addrSpec, displayName); 432 mail->cc(true)->addAddress(addrSpec, displayName);
425 recordForAutocompletion(addrSpec, displayName);
426 }); 433 });
434
427 mail->bcc(true)->clear(); 435 mail->bcc(true)->clear();
428 applyAddresses(mBccModel->stringList(), [&](const QByteArray &addrSpec, const QByteArray &displayName) { 436 applyAddresses(bcc, [&](const QByteArray &addrSpec, const QByteArray &displayName) {
429 mail->bcc(true)->addAddress(addrSpec, displayName); 437 mail->bcc(true)->addAddress(addrSpec, displayName);
430 recordForAutocompletion(addrSpec, displayName);
431 }); 438 });
432 439
433 mail->from(true)->addAddress(getIdentity()); 440 mail->from(true)->addAddress(from);
434 441
435 mail->subject(true)->fromUnicodeString(getSubject(), "utf-8"); 442 mail->subject(true)->fromUnicodeString(subject, "utf-8");
436 if (!mail->messageID()) { 443 if (!mail->messageID()) {
437 mail->messageID(true)->generate("org.kde.kube"); 444 mail->messageID(true)->generate("org.kde.kube");
438 } 445 }
@@ -440,31 +447,53 @@ KMime::Message::Ptr ComposerController::assembleMessage()
440 mail->date(true)->setDateTime(QDateTime::currentDateTimeUtc()); 447 mail->date(true)->setDateTime(QDateTime::currentDateTimeUtc());
441 } 448 }
442 449
443 auto root = mAttachmentModel->invisibleRootItem(); 450 if (!attachments.isEmpty()) {
444 if (root->hasChildren()) {
445 mail->contentType(true)->setMimeType("multipart/mixed"); 451 mail->contentType(true)->setMimeType("multipart/mixed");
446 mail->contentType()->setBoundary(KMime::multiPartBoundary()); 452 mail->contentType()->setBoundary(KMime::multiPartBoundary());
447 mail->contentTransferEncoding()->setEncoding(KMime::Headers::CE7Bit); 453 mail->contentTransferEncoding()->setEncoding(KMime::Headers::CE7Bit);
448 mail->setPreamble("This is a multi-part message in MIME format.\n"); 454 mail->setPreamble("This is a multi-part message in MIME format.\n");
449 for (int row = 0; row < root->rowCount(); row++) { 455 for (const auto &attachment : attachments) {
450 auto item = root->child(row, 0); 456 mail->addContent(createAttachmentPart(attachment.data, attachment.filename, attachment.isInline, attachment.mimeType, attachment.name));
451 const auto name = item->data(NameRole).toString();
452 const auto filename = item->data(FilenameRole).toString();
453 const auto mimeType = item->data(MimeTypeRole).toByteArray();
454 const auto isInline = item->data(InlineRole).toBool();
455 const auto content = item->data(ContentRole).toByteArray();
456 mail->addContent(createAttachmentPart(content, filename, isInline, mimeType, name));
457 } 457 }
458 mail->addContent(createBodyPart(getBody().toUtf8())); 458 mail->addContent(createBodyPart(body.toUtf8()));
459 } else { 459 } else {
460 //FIXME same implementation as above for attachments 460 //FIXME same implementation as above for attachments
461 mail->setBody(getBody().toUtf8()); 461 mail->setBody(body.toUtf8());
462 } 462 }
463 463
464 mail->assemble(); 464 mail->assemble();
465 return mail; 465 return mail;
466} 466}
467 467
468KMime::Message::Ptr ComposerController::assembleMessage()
469{
470 applyAddresses(mToModel->stringList(), [&](const QByteArray &addrSpec, const QByteArray &displayName) {
471 recordForAutocompletion(addrSpec, displayName);
472 });
473 applyAddresses(mCcModel->stringList(), [&](const QByteArray &addrSpec, const QByteArray &displayName) {
474 recordForAutocompletion(addrSpec, displayName);
475 });
476 applyAddresses(mBccModel->stringList(), [&](const QByteArray &addrSpec, const QByteArray &displayName) {
477 recordForAutocompletion(addrSpec, displayName);
478 });
479
480 QList<Attachment> attachments;
481 auto root = mAttachmentModel->invisibleRootItem();
482 if (root->hasChildren()) {
483 for (int row = 0; row < root->rowCount(); row++) {
484 auto item = root->child(row, 0);
485 attachments << Attachment{
486 item->data(NameRole).toString(),
487 item->data(FilenameRole).toString(),
488 item->data(MimeTypeRole).toByteArray(),
489 item->data(InlineRole).toBool(),
490 item->data(ContentRole).toByteArray()
491 };
492 }
493 }
494 return createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), attachments);
495}
496
468void ComposerController::updateSendAction() 497void ComposerController::updateSendAction()
469{ 498{
470 auto enabled = !mToModel->stringList().isEmpty() && !getSubject().isEmpty() && !getAccountId().isEmpty(); 499 auto enabled = !mToModel->stringList().isEmpty() && !getSubject().isEmpty() && !getAccountId().isEmpty();