File indexing completed on 2024-06-23 05:19:20
0001 /* 0002 SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "utils.h" 0008 0009 using namespace MimeTreeParser; 0010 0011 MimeMessagePart::Ptr MimeTreeParser::createAndParseTempNode(Interface::BodyPart &part, KMime::Content *parentNode, const char *content, const char *cntDesc) 0012 { 0013 auto newNode = new KMime::Content(); 0014 newNode->setContent(KMime::CRLFtoLF(content)); 0015 newNode->parse(); 0016 0017 if (!newNode->head().isEmpty()) { 0018 newNode->contentDescription()->from7BitString(cntDesc); 0019 } 0020 part.nodeHelper()->attachExtraContent(parentNode, newNode); 0021 0022 return MimeMessagePart::Ptr(new MimeMessagePart(part.objectTreeParser(), newNode, false)); 0023 } 0024 0025 KMime::Content *MimeTreeParser::findTypeInDirectChilds(KMime::Content *content, const QByteArray &mimeType) 0026 { 0027 if (mimeType.isEmpty()) { 0028 return content; 0029 } 0030 0031 const auto contents = content->contents(); 0032 for (const auto child : contents) { 0033 if ((!child->contentType()->isEmpty()) && (mimeType == child->contentType(false)->mimeType())) { 0034 return child; 0035 } 0036 } 0037 return nullptr; 0038 } 0039 0040 MessagePart::Ptr MimeTreeParser::toplevelTextNode(MessagePart::Ptr messageTree) 0041 { 0042 const auto subParts = messageTree->subParts(); 0043 for (const auto &mp : subParts) { 0044 auto text = mp.dynamicCast<TextMessagePart>(); 0045 auto attach = mp.dynamicCast<AttachmentMessagePart>(); 0046 if (text && !attach) { 0047 return text; 0048 } else if (const auto alternative = mp.dynamicCast<AlternativeMessagePart>()) { 0049 return alternative; 0050 } else { 0051 auto ret = toplevelTextNode(mp); 0052 if (ret) { 0053 return ret; 0054 } 0055 } 0056 } 0057 return {}; 0058 }