File indexing completed on 2025-03-09 04:54:12

0001 /*
0002   SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
0003 
0004   Based on KMail code by:
0005   SPDX-FileCopyrightText: 1997 Markus Wuebben <markus.wuebben@kde.org>
0006 
0007   SPDX-License-Identifier: LGPL-2.0-or-later
0008 */
0009 
0010 #include "attachmentfrommimecontentjob.h"
0011 
0012 #include <KMime/Content>
0013 
0014 using namespace MessageCore;
0015 using KMime::Content;
0016 
0017 class Q_DECL_HIDDEN MessageCore::AttachmentFromMimeContentJob::AttachmentFromMimeContentJobPrivate
0018 {
0019 public:
0020     const Content *mMimeContent = nullptr;
0021 };
0022 
0023 AttachmentFromMimeContentJob::AttachmentFromMimeContentJob(const Content *content, QObject *parent)
0024     : AttachmentLoadJob(parent)
0025     , d(new AttachmentFromMimeContentJobPrivate)
0026 {
0027     d->mMimeContent = content;
0028 }
0029 
0030 AttachmentFromMimeContentJob::~AttachmentFromMimeContentJob() = default;
0031 
0032 const Content *AttachmentFromMimeContentJob::mimeContent() const
0033 {
0034     return d->mMimeContent;
0035 }
0036 
0037 void AttachmentFromMimeContentJob::setMimeContent(const Content *content)
0038 {
0039     d->mMimeContent = content;
0040 }
0041 
0042 void AttachmentFromMimeContentJob::doStart()
0043 {
0044     // Create the AttachmentPart.
0045     Q_ASSERT(attachmentPart() == nullptr);
0046 
0047     AttachmentPart::Ptr part = AttachmentPart::Ptr(new AttachmentPart);
0048     auto content = const_cast<Content *>(d->mMimeContent);
0049     part->setData(content->decodedContent());
0050 
0051     // Get the details from the MIME headers.
0052     if (auto ct = content->contentType(false)) {
0053         part->setMimeType(ct->mimeType());
0054         part->setName(ct->name());
0055     }
0056 
0057     if (auto ct = content->contentTransferEncoding(false)) {
0058         part->setEncoding(ct->encoding());
0059     }
0060 
0061     if (auto ct = content->contentDisposition(false)) {
0062         part->setFileName(ct->filename());
0063         part->setInline(ct->disposition() == KMime::Headers::CDinline);
0064     }
0065 
0066     if (auto ct = content->contentDescription(false)) {
0067         part->setDescription(ct->asUnicodeString());
0068     }
0069 
0070     setAttachmentPart(part);
0071     emitResult(); // Success.
0072 }
0073 
0074 #include "moc_attachmentfrommimecontentjob.cpp"