From 00cf2a2fe6b0ba7bea64a7872c3aef7d12ee27a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Vr=C3=A1til?= <daniel.vratil@kdab.com> Date: Fri, 24 Jun 2016 12:02:29 +0200 Subject: [PATCH 66/74] Revert "Fix accessing attachments in deeply nested extra nodes" The fix introduces a regression when opening regular attachments This reverts commit b6ea90df1c123a555ecca9e0940ef36ffccbdd89. --- messageviewer/viewer/nodehelper.cpp | 18 +++++------------- messageviewer/viewer/viewer_p.cpp | 24 ++++++++---------------- 2 files changed, 13 insertions(+), 29 deletions(-) diff --git a/messageviewer/viewer/nodehelper.cpp b/messageviewer/viewer/nodehelper.cpp index 6480ad5f70..ddc184886f 100644 --- a/messageviewer/viewer/nodehelper.cpp +++ b/messageviewer/viewer/nodehelper.cpp @@ -672,20 +672,12 @@ QString NodeHelper::persistentIndex( const KMime::Content * node ) const QString indexStr = node->index().toString(); const KMime::Content * const topLevel = node->topLevel(); //if the node is an extra node, prepend the index of the extra node to the url - QMap<KMime::Content*, QList<KMime::Content*> >::ConstIterator it = mExtraContents.constBegin(); - for (; it != mExtraContents.constEnd(); ++it) { - const QList<KMime::Content*> &extraNodes = it.value(); - for ( int i = 0; i < extraNodes.size(); ++i ) { - if ( topLevel == extraNodes.at(i) ) { - indexStr.prepend(QString::fromLatin1("%1:").arg(i) ); - if (topLevel != node) { - const QString parentIdx = persistentIndex(topLevel); - return indexStr.prepend(persistentIndex(topLevel)); - } - } - } + Q_FOREACH( const QList<KMime::Content*> & extraNodes, mExtraContents ) { + const int extraNodesSize( extraNodes.size() ); + for ( int i = 0; i < extraNodesSize; ++i ) + if ( topLevel == extraNodes.at(i) ) + return indexStr.prepend( QString::fromLatin1("%1:").arg(i) ); } - return indexStr; } diff --git a/messageviewer/viewer/viewer_p.cpp b/messageviewer/viewer/viewer_p.cpp index 19bce31b5a..92937ef007 100644 --- a/messageviewer/viewer/viewer_p.cpp +++ b/messageviewer/viewer/viewer_p.cpp @@ -307,25 +307,17 @@ KMime::Content * ViewerPrivate::nodeFromUrl( const KUrl & url ) if ( path.contains(QLatin1Char(':')) ) { //if the content was not found, it might be in an extra node. Get the index of the extra node (the first part of the url), //and use the remaining part as a ContentIndex to find the node inside the extra node - QStringList indexes = path.split(QLatin1Char(':')); - KMime::Content *c = mMessage.get(); - while (indexes.size() > 1) { - int idx = indexes.takeFirst().toInt(); - QList<KMime::Content*> extras = mNodeHelper->extraContents(c); - if (idx < extras.size()) { - c = extras[idx]; - } else { - c = 0; - break; - } + int i = path.left( path.indexOf(QLatin1Char(':')) ).toInt(); + path = path.mid( path.indexOf(QLatin1Char(':')) + 1 ); + KMime::ContentIndex idx(path); + QList<KMime::Content*> extras = mNodeHelper->extraContents( mMessage.get() ); + if ( i >= 0 && i < extras.size() ) { + KMime::Content* c = extras[i]; + node = c->content( idx ); } - - Q_ASSERT(indexes.size() == 1); - KMime::ContentIndex idx(indexes[0]); - node = c->content(idx); } else { if( mMessage ) - node = mMessage->content( KMime::ContentIndex( path ) ); + node= mMessage->content( KMime::ContentIndex( path ) ); } } else { const QString path = url.toLocalFile(); -- 2.14.1