File indexing completed on 2024-06-23 05:18:32

0001 /*
0002   SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
0003 
0004   SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "job/multipartjob.h"
0008 #include "contentjobbase_p.h"
0009 
0010 #include "messagecomposer_debug.h"
0011 
0012 #include <KMime/Content>
0013 
0014 using namespace MessageComposer;
0015 
0016 class MessageComposer::MultipartJobPrivate : public ContentJobBasePrivate
0017 {
0018 public:
0019     MultipartJobPrivate(MultipartJob *qq)
0020         : ContentJobBasePrivate(qq)
0021     {
0022     }
0023 
0024     QByteArray subtype;
0025 };
0026 
0027 MultipartJob::MultipartJob(QObject *parent)
0028     : ContentJobBase(*new MultipartJobPrivate(this), parent)
0029 {
0030 }
0031 
0032 MultipartJob::~MultipartJob() = default;
0033 
0034 QByteArray MultipartJob::multipartSubtype() const
0035 {
0036     Q_D(const MultipartJob);
0037     return d->subtype;
0038 }
0039 
0040 void MultipartJob::setMultipartSubtype(const QByteArray &subtype)
0041 {
0042     Q_D(MultipartJob);
0043     d->subtype = subtype;
0044 }
0045 
0046 void MultipartJob::process()
0047 {
0048     Q_D(MultipartJob);
0049     Q_ASSERT(d->resultContent == nullptr); // Not processed before.
0050     Q_ASSERT(!d->subtype.isEmpty());
0051     d->resultContent = new KMime::Content;
0052     auto contentType = d->resultContent->contentType(true);
0053     contentType->setMimeType("multipart/" + d->subtype);
0054     contentType->setBoundary(KMime::multiPartBoundary());
0055     d->resultContent->contentTransferEncoding()->setEncoding(KMime::Headers::CE7Bit);
0056     d->resultContent->setPreamble("This is a multi-part message in MIME format.\n");
0057     for (KMime::Content *c : std::as_const(d->subjobContents)) {
0058         d->resultContent->appendContent(c);
0059         if (c->contentTransferEncoding()->encoding() == KMime::Headers::CE8Bit) {
0060             d->resultContent->contentTransferEncoding()->setEncoding(KMime::Headers::CE8Bit);
0061             break;
0062         }
0063     }
0064     qCDebug(MESSAGECOMPOSER_LOG) << "Created" << d->resultContent->contentType()->mimeType() << "content with" << d->resultContent->contents().count()
0065                                  << "subjobContents.";
0066     emitResult();
0067 }
0068 
0069 #include "moc_multipartjob.cpp"