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);
131 static void clearBodyPartMemento(QMap<QByteArray, Interface::BodyPartMemento *> &bodyPartMementoMap)
133 for (QMap<QByteArray, Interface::BodyPartMemento *>::iterator it = bodyPartMementoMap.begin(), end = bodyPartMementoMap.end(); it != end; ++it) {
149 QMap<KMime::Content *, QVector<KMime::Content *>>::ConstIterator end(mExtraContents.constEnd());
151 for (QMap<KMime::Content *, QVector<KMime::Content *>>::ConstIterator it = mExtraContents.constBegin(); it != end; ++it) {
166 void NodeHelper::setEncryptionState(const KMime::Content *node, const KMMsgEncryptionState state)
293 auto tempFile = new QTemporaryFile(QDir::tempPath() + QLatin1String("/messageviewer_XXXXXX") + QLatin1String(".index.") + param);
301 if (!QDir().mkpath(fname) || !fFile.setPermissions(QFileDevice::WriteUser | QFileDevice::ReadUser | QFileDevice::ExeUser)) {
341 cur->parent() && cur->parent()->contentType(false) && cur->parent()->contentType(false)->mimeType().toLower() == "message/rfc822";
504 QVector<MessagePart::Ptr> NodeHelper::messagePartsOfMailHeader(const char *header, const KMime::Content *message) const
518 QVector<KMime::Headers::Base *> NodeHelper::headers(const char *header, const KMime::Content *message)
528 KMime::Headers::Base const *NodeHelper::mailHeaderAsBase(const char *header, const KMime::Content *message) const
541 QSharedPointer<KMime::Headers::Generics::AddressList> NodeHelper::mailHeaderAsAddressList(const char *header, const KMime::Content *message) const
547 QSharedPointer<KMime::Headers::Generics::AddressList> addressList(new KMime::Headers::Generics::AddressList());
595 // utf-8 is nowadays that widely, that it is a good guess to use it to fix issus with broken clients.
629 // FIXME(Andras) review it (by Marc?) to see if I got it right. This is supposed to be the partNode::internalBodyPartMemento replacement
630 Interface::BodyPartMemento *NodeHelper::bodyPartMemento(KMime::Content *node, const QByteArray &which) const
632 const QMap<QString, QMap<QByteArray, Interface::BodyPartMemento *>>::const_iterator nit = mBodyPartMementoMap.find(persistentIndex(node));
636 const QMap<QByteArray, Interface::BodyPartMemento *>::const_iterator it = nit->find(which.toLower());
640 // FIXME(Andras) review it (by Marc?) to see if I got it right. This is supposed to be the partNode::internalSetBodyPartMemento replacement
641 void NodeHelper::setBodyPartMemento(KMime::Content *node, const QByteArray &which, Interface::BodyPartMemento *memento)
643 QMap<QByteArray, Interface::BodyPartMemento *> &mementos = mBodyPartMementoMap[persistentIndex(node)];
646 const QMap<QByteArray, Interface::BodyPartMemento *>::iterator it = mementos.lowerBound(whichLower);
743 KMime::Content *NodeHelper::contentFromIndex(KMime::Content *node, const QString &persistentIndex) const
774 KMime::Content *NodeHelper::fromHREF(const KMime::Message::Ptr &mMessage, const QUrl &url) const
853 auto realNode = std::find_if(mExtraContents.cbegin(), mExtraContents.cend(), [node](const QVector<KMime::Content *> &nodes) {
866 qCDebug(MIMETREEPARSER_LOG) << "mExtraContents added for" << topLevelNode << " extra content: " << content;
890 qCWarning(MIMETREEPARSER_LOG) << "Asked to attach extra content to a kmime::message, this does not make sense. Attaching to:" << node
965 bool NodeHelper::unencryptedMessage_helper(KMime::Content *node, QByteArray &resultingData, bool addHeaders, int recursionLevel)
971 const QByteArray type = node->contentType(false) ? QByteArray(node->contentType(false)->mediaType()).toLower() : "text";
972 const QByteArray subType = node->contentType(false) ? node->contentType(false)->subType().toLower() : "plain";
976 qCDebug(MIMETREEPARSER_LOG) << "(" << recursionLevel << ") Looking at" << type << "/" << subType;
999 qCDebug(MIMETREEPARSER_LOG) << "Current node has an associated decrypted node, adding a modified header "
1034 // We can't change the nodes under the signature, as that would invalidate it. Add the signature
1042 qCDebug(MIMETREEPARSER_LOG) << "Current node is a multipart node, adding its header and then processing all children.";
1052 const bool changed = unencryptedMessage_helper(child, resultingData, true, recursionLevel + 1);
1060 qCDebug(MIMETREEPARSER_LOG) << "Current node is a message, adding the header and then processing the child.";
1065 returnValue = unencryptedMessage_helper(curNode->bodyAsMessage().data(), resultingData, true, recursionLevel + 1);
1083 const bool messageChanged = unencryptedMessage_helper(originalMessage.data(), resultingData, true);
StripTrailingSlash
void addContent(Content *content, bool prepend=false)
QTextCodec * codecForName(const QString &name) const
QString captured(int nth) const const
int toInt(bool *ok, int base) const const
QByteArray encodedBody()
QString toUpper() const const
QMap::iterator erase(QMap::iterator pos)
QByteArray subType() const
bool isMultipart() const
bool contains(const Key &key) const const
virtual QByteArray name() const const =0
bool isText() const
QByteArray toLower() const const
void append(const T &value)
void setMimeType(const QByteArray &mimeType)
QString errorString() const const
QString & prepend(QChar ch)
bool hasHeader(const char *type) const
QByteArray as7BitString(bool withHeaderType=true) const override
QMap::const_iterator constBegin() const const
bool isEmpty() const const
virtual void from7BitString(const char *s, size_t len)
ReadWrite
MESSAGECORE_EXPORT KMime::Content * next(KMime::Content *node, bool allowChildren=true)
Returns the next node (child, sibling or parent) of the given node.
Definition: messagecore/src/helpers/nodehelper.cpp:33
void setHead(const QByteArray &head)
QByteArray body() const
ContentIndex index() const
virtual bool setPermissions(QFileDevice::Permissions permissions) override
Headers::ContentDisposition * contentDisposition(bool create=true)
void from7BitString(const char *s, size_t len) override
QByteArray mimeType() const
void clear()
QByteArray encodedContent(bool useCrLf=false)
bool isEmpty() const const
QTextCodec * codecForLocale()
int size() const const
int lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
bool isNull() const const
T value(int i) const const
Definition: headerstyle.h:23
contentDisposition
QByteArray decodedContent()
QVector< Content * > contents() const
void append(const T &value)
QByteArray charset() const
QStringList availableEncodingNames() const
Content * content(const ContentIndex &index) const
The AttachmentTemporaryFilesDirs class.
Definition: attachmenttemporaryfilesdirs.h:20
void parse()
QString tempPath()
QVector< Content * > attachments()
QMapIterator::Item next()
bool isEmpty() const const
QMimeType mimeTypeForData(const QByteArray &data) const const
QString trimmed() const const
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const const
QStringList split(const QString &sep, QString::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
QString path(QUrl::ComponentFormattingOptions options) const const
bool hasMatch() const const
QString encodingForName(const QString &descriptiveName) const
QMap::iterator end()
const Key & key() const const
bool bodyIsMessage() const
virtual bool open(QIODevice::OpenMode mode) override
const T & value() const const
QMap::iterator lowerBound(const Key &key)
Headers::ContentTransferEncoding * contentTransferEncoding(bool create=true)
QMap::iterator begin()
void assemble()
QString toLocalFile() const const
Headers::ContentType * contentType(bool create=true)
KIMAP_EXPORT QTextCodec * codecForName(const QString &name)
void setContent(const QByteArray &s)
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
SkipEmptyParts
Headers::Base * headerByType(const char *type) const
static KCharsets * charsets()
QStringRef midRef(int position, int n) const const
const Key key(const T &value, const Key &defaultKey) const const
QString & replace(int position, int n, QChar after)
Content * topLevel() const
const QList< QKeySequence > & end()
QByteArray head() const
QByteArray toLatin1() const const
void removeContent(Content *content, bool del=false)
QString mid(int position, int n) const const
QByteArray boundary() const
bool removeHeader(const char *type)
QUrl adjusted(QUrl::FormattingOptions options) const const
QString toString() const
static QByteArray defaultCharset()
QSharedPointer< Message > Ptr
interface of classes that implement status for BodyPartFormatters.
Definition: bodypart.h:33
QSharedPointer< Message > bodyAsMessage() const
virtual void close() override
void clear()
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QTextCodec * codecForName(const QByteArray &name)
typedef ConstIterator
T & front()
void push_back(const T &value)
qint64 write(const char *data, qint64 maxSize)
ReadUser
QString fromLatin1(const char *str, int size)
void sort(Qt::CaseSensitivity cs)
Content * parent() const
void prepend(const T &value)
QMap::iterator insert(const Key &key, const T &value)
QByteArray mediaType() const
QList::const_iterator constEnd() const const
QList::const_iterator constBegin() const const
virtual QFileDevice::Permissions permissions() const const override
Headers::ContentDescription * contentDescription(bool create=true)
int size() const const
bool empty() const const
void clear()
QMap::iterator find(const Key &key)
QVector< KMime::Content * > List
bool mkpath(const QString &dirPath) const const
bool hasNext() const const
QUrl fromLocalFile(const QString &localFile)
QVector< Headers::Base * > headersByType(const char *type) const
const T value(const Key &key, const T &defaultValue) const const
bool isLocalFile() const const
name
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Fri Apr 16 2021 23:14:00 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006
Documentation copyright © 1996-2021 The KDE developers.
Generated on Fri Apr 16 2021 23:14:00 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.