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.cpp84
1 files changed, 1 insertions, 83 deletions
diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp
index 3c2b7fc1..311c79f3 100644
--- a/framework/src/domain/composercontroller.cpp
+++ b/framework/src/domain/composercontroller.cpp
@@ -383,88 +383,6 @@ void ComposerController::recordForAutocompletion(const QByteArray &addrSpec, con
383 } 383 }
384} 384}
385 385
386static KMime::Content *createAttachmentPart(const QByteArray &content, const QString &filename, bool isInline, const QByteArray &mimeType, const QString &name)
387{
388
389 KMime::Content *part = new KMime::Content;
390 part->contentDisposition(true)->setFilename(filename);
391 if (isInline) {
392 part->contentDisposition(true)->setDisposition(KMime::Headers::CDinline);
393 } else {
394 part->contentDisposition(true)->setDisposition(KMime::Headers::CDattachment);
395 }
396 part->contentType(true)->setMimeType(mimeType);
397 part->contentType(true)->setName(name, "utf-8");
398 //Just always encode attachments base64 so it's safe for binary data
399 part->contentTransferEncoding(true)->setEncoding(KMime::Headers::CEbase64);
400 part->setBody(content);
401 return part;
402}
403
404static KMime::Content *createBodyPart(const QByteArray &body) {
405 auto mainMessage = new KMime::Content;
406 mainMessage->setBody(body);
407 mainMessage->contentType(true)->setMimeType("text/plain");
408 return mainMessage;
409}
410
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)
420{
421 auto mail = existingMessage;
422 if (!mail) {
423 mail = KMime::Message::Ptr::create();
424 }
425 mail->to(true)->clear();
426 applyAddresses(to, [&](const QByteArray &addrSpec, const QByteArray &displayName) {
427 mail->to(true)->addAddress(addrSpec, displayName);
428 });
429
430 mail->cc(true)->clear();
431 applyAddresses(cc, [&](const QByteArray &addrSpec, const QByteArray &displayName) {
432 mail->cc(true)->addAddress(addrSpec, displayName);
433 });
434
435 mail->bcc(true)->clear();
436 applyAddresses(bcc, [&](const QByteArray &addrSpec, const QByteArray &displayName) {
437 mail->bcc(true)->addAddress(addrSpec, displayName);
438 });
439
440 mail->from(true)->addAddress(from);
441
442 mail->subject(true)->fromUnicodeString(subject, "utf-8");
443 if (!mail->messageID()) {
444 mail->messageID(true)->generate("org.kde.kube");
445 }
446 if (!mail->date(true)->dateTime().isValid()) {
447 mail->date(true)->setDateTime(QDateTime::currentDateTimeUtc());
448 }
449
450 if (!attachments.isEmpty()) {
451 mail->contentType(true)->setMimeType("multipart/mixed");
452 mail->contentType()->setBoundary(KMime::multiPartBoundary());
453 mail->contentTransferEncoding()->setEncoding(KMime::Headers::CE7Bit);
454 mail->setPreamble("This is a multi-part message in MIME format.\n");
455 for (const auto &attachment : attachments) {
456 mail->addContent(createAttachmentPart(attachment.data, attachment.filename, attachment.isInline, attachment.mimeType, attachment.name));
457 }
458 mail->addContent(createBodyPart(body.toUtf8()));
459 } else {
460 //FIXME same implementation as above for attachments
461 mail->setBody(body.toUtf8());
462 }
463
464 mail->assemble();
465 return mail;
466}
467
468KMime::Message::Ptr ComposerController::assembleMessage() 386KMime::Message::Ptr ComposerController::assembleMessage()
469{ 387{
470 applyAddresses(mToModel->stringList(), [&](const QByteArray &addrSpec, const QByteArray &displayName) { 388 applyAddresses(mToModel->stringList(), [&](const QByteArray &addrSpec, const QByteArray &displayName) {
@@ -491,7 +409,7 @@ KMime::Message::Ptr ComposerController::assembleMessage()
491 }; 409 };
492 } 410 }
493 } 411 }
494 return createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), attachments); 412 return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), attachments);
495} 413}
496 414
497void ComposerController::updateSendAction() 415void ComposerController::updateSendAction()