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"