diff options
Diffstat (limited to 'framework/src/domain/composercontroller.cpp')
-rw-r--r-- | framework/src/domain/composercontroller.cpp | 84 |
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 | ||
386 | static 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 | |||
404 | static 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 | |||
411 | struct Attachment { | ||
412 | QString name; | ||
413 | QString filename; | ||
414 | QByteArray mimeType; | ||
415 | bool isInline; | ||
416 | QByteArray data; | ||
417 | }; | ||
418 | |||
419 | static 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 | |||
468 | KMime::Message::Ptr ComposerController::assembleMessage() | 386 | KMime::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 | ||
497 | void ComposerController::updateSendAction() | 415 | void ComposerController::updateSendAction() |