Messagelib
mimetreeparser/src/nodehelper.cpp
2 SPDX-FileCopyrightText: 2009 Klarälvdalens Datakonsult AB, a KDAB Group company, [email protected]
83 qCDebug(MIMETREEPARSER_LOG) << "Node processed: " << node->index().toString() << node->contentType()->as7BitString();
101 const QMap<KMime::Content *, QVector<KMime::Content *>>::iterator it = mExtraContents.find(node);
132 static void clearBodyPartMemento(QMap<QByteArray, Interface::BodyPartMemento *> &bodyPartMementoMap)
134 for (QMap<QByteArray, Interface::BodyPartMemento *>::iterator it = bodyPartMementoMap.begin(), end = bodyPartMementoMap.end(); it != end; ++it) {
150 QMap<KMime::Content *, QVector<KMime::Content *>>::ConstIterator end(mExtraContents.constEnd());
152 for (QMap<KMime::Content *, QVector<KMime::Content *>>::ConstIterator it = mExtraContents.constBegin(); it != end; ++it) {
168 void NodeHelper::setEncryptionState(const KMime::Content *node, const KMMsgEncryptionState state)
303 auto tempFile = new QTemporaryFile(QDir::tempPath() + QLatin1String("/messageviewer_XXXXXX") + QLatin1String(".index.") + param);
311 if (!QDir().mkpath(fname) || !fFile.setPermissions(QFileDevice::WriteUser | QFileDevice::ReadUser | QFileDevice::ExeUser)) {
351 cur->parent() && cur->parent()->contentType(false) && cur->parent()->contentType(false)->mimeType().toLower() == "message/rfc822";
514 QVector<MessagePart::Ptr> NodeHelper::messagePartsOfMailHeader(const char *header, const KMime::Content *message) const
528 QVector<KMime::Headers::Base *> NodeHelper::headers(const char *header, const KMime::Content *message)
538 KMime::Headers::Base const *NodeHelper::mailHeaderAsBase(const char *header, const KMime::Content *message) const
551 QSharedPointer<KMime::Headers::Generics::AddressList> NodeHelper::mailHeaderAsAddressList(const char *header, const KMime::Content *message) const
557 QSharedPointer<KMime::Headers::Generics::AddressList> addressList(new KMime::Headers::Generics::AddressList());
605 // utf-8 is nowadays that widely, that it is a good guess to use it to fix issus with broken clients.
643 // FIXME(Andras) review it (by Marc?) to see if I got it right. This is supposed to be the partNode::internalBodyPartMemento replacement
644 Interface::BodyPartMemento *NodeHelper::bodyPartMemento(KMime::Content *node, const QByteArray &which) const
646 const QMap<QString, QMap<QByteArray, Interface::BodyPartMemento *>>::const_iterator nit = mBodyPartMementoMap.find(persistentIndex(node));
650 const QMap<QByteArray, Interface::BodyPartMemento *>::const_iterator it = nit->find(which.toLower());
654 // FIXME(Andras) review it (by Marc?) to see if I got it right. This is supposed to be the partNode::internalSetBodyPartMemento replacement
655 void NodeHelper::setBodyPartMemento(KMime::Content *node, const QByteArray &which, Interface::BodyPartMemento *memento)
657 QMap<QByteArray, Interface::BodyPartMemento *> &mementos = mBodyPartMementoMap[persistentIndex(node)];
660 const QMap<QByteArray, Interface::BodyPartMemento *>::iterator it = mementos.lowerBound(whichLower);
757 KMime::Content *NodeHelper::contentFromIndex(KMime::Content *node, const QString &persistentIndex) const
793 KMime::Content *NodeHelper::fromHREF(const KMime::Message::Ptr &mMessage, const QUrl &url) const
872 auto realNode = std::find_if(mExtraContents.cbegin(), mExtraContents.cend(), [node](const QVector<KMime::Content *> &nodes) {
885 qCDebug(MIMETREEPARSER_LOG) << "mExtraContents added for" << topLevelNode << " extra content: " << content;
909 qCWarning(MIMETREEPARSER_LOG) << "Asked to attach extra content to a kmime::message, this does not make sense. Attaching to:" << node
986 bool NodeHelper::unencryptedMessage_helper(KMime::Content *node, QByteArray &resultingData, bool addHeaders, int recursionLevel)
992 const QByteArray type = node->contentType(false) ? QByteArray(node->contentType(false)->mediaType()).toLower() : "text";
993 const QByteArray subType = node->contentType(false) ? node->contentType(false)->subType().toLower() : "plain";
997 qCDebug(MIMETREEPARSER_LOG) << "(" << recursionLevel << ") Looking at" << type << "/" << subType;
1020 qCDebug(MIMETREEPARSER_LOG) << "Current node has an associated decrypted node, adding a modified header "
1055 // We can't change the nodes under the signature, as that would invalidate it. Add the signature
1063 qCDebug(MIMETREEPARSER_LOG) << "Current node is a multipart node, adding its header and then processing all children.";
1073 const bool changed = unencryptedMessage_helper(child, resultingData, true, recursionLevel + 1);
1081 qCDebug(MIMETREEPARSER_LOG) << "Current node is a message, adding the header and then processing the child.";
1086 returnValue = unencryptedMessage_helper(curNode->bodyAsMessage().data(), resultingData, true, recursionLevel + 1);
1104 const bool messageChanged = unencryptedMessage_helper(originalMessage.data(), resultingData, true);
void append(const T &value)
Content * content(const ContentIndex &index) const
KIMAP2_EXPORT QTextCodec * codecForName(const QString &name)
QByteArray encodedBody()
QByteArray body() const
bool isNull() const const
QString errorString() const const
void assemble()
bool removeHeader()
bool contains(const Key &key) const const
QByteArray toLower() const const
QString toUpper() const const
QString encodingForName(const QString &descriptiveName) const
The AttachmentTemporaryFilesDirs class.
Definition: attachmenttemporaryfilesdirs.h:20
ReadWrite
QByteArray mimeType() const
Content * parent() const
virtual QFileDevice::Permissions permissions() const const override
virtual bool open(QIODevice::OpenMode mode) override
void clear()
const T value(const Key &key, const T &defaultValue) const const
QStringList split(const QString &sep, QString::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
void removeContent(Content *content, bool del=false)
bool bodyIsMessage() const
QMap::iterator begin()
void from7BitString(const char *s, size_t len) override
QString trimmed() const const
QStringView mid(qsizetype start) const const
void push_back(const T &value)
QString & prepend(QChar ch)
virtual bool setPermissions(QFileDevice::Permissions permissions) override
void setHead(const QByteArray &head)
QVector< KMime::Content * > List
ContentIndex index() const
QList::const_iterator constBegin() const const
QString toString() const
void setMimeType(const QByteArray &mimeType)
int lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
QByteArray boundary() const
Content * topLevel() const
QByteArray mediaType() const
QTextCodec * codecForLocale()
QString tempPath()
QMimeType mimeTypeForData(const QByteArray &data) const const
T value(int i) const const
QMap::iterator insert(const Key &key, const T &value)
int size() const const
QMap::iterator end()
void prepend(const T &value)
void parse()
KGuiItem clear()
QMap::iterator find(const Key &key)
bool isEmpty() const const
QByteArray encodedContent(bool useCrLf=false)
StripTrailingSlash
SkipEmptyParts
bool isEmpty() const const
QUrl fromLocalFile(const QString &localFile)
QMap::iterator erase(QMap::iterator pos)
QTextCodec * codecForName(const QByteArray &name)
Headers::ContentDisposition * contentDisposition(bool create=true)
Headers::ContentTransferEncoding * contentTransferEncoding(bool create=true)
name
QString toLocalFile() const const
bool hasMatch() const const
QByteArray head() const
ReadUser
QByteArray subType() const
QStringList availableEncodingNames() const
virtual void close() override
QMap::iterator lowerBound(const Key &key)
static QByteArray defaultCharset()
interface of classes that implement status for BodyPartFormatters.
Definition: bodypart.h:33
const Key key(const T &value, const Key &defaultKey) const const
bool isText() const
QString & replace(int position, int n, QChar after)
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const const
typedef ConstIterator
QByteArray decodedContent()
QSharedPointer< Message > bodyAsMessage() const
void addContent(Content *content, bool prepend=false)
void clear()
void setContent(const QByteArray &s)
QByteArray charset() const
QByteArray as7BitString(bool withHeaderType=true) const override
QString descriptionForEncoding(const QString &encoding) const
bool isEmpty() const const
QList::const_iterator constEnd() const const
QString path(QUrl::ComponentFormattingOptions options) const const
static KCharsets * charsets()
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QString path(const QString &relativePath)
QString fromLatin1(const char *str, int size)
contentDisposition
bool isLocalFile() const const
const QList< QKeySequence > & next()
QUrl adjusted(QUrl::FormattingOptions options) const const
virtual void from7BitString(const char *s, size_t len)
T & front()
int size() const const
Headers::ContentType * contentType(bool create=true)
QVector::const_iterator constBegin() const const
bool isMultipart() const
QVector< Content * > attachments()
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
QString mid(int position, int n) const const
QString message
const QList< QKeySequence > & end()
bool empty() const const
QString captured(int nth) const const
Headers::ContentDescription * contentDescription(bool create=true)
qint64 write(const char *data, qint64 maxSize)
void sort(Qt::CaseSensitivity cs)
virtual QByteArray name() const const=0
QVector< Content * > contents() const
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon May 8 2023 04:02:34 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon May 8 2023 04:02:34 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.