diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2018-06-20 11:04:39 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2018-07-09 12:15:30 +0000 |
commit | cffe60fdb87d39494c92500aa6f99204d20fb90a (patch) | |
tree | 2ded8c7b3351588b82abf85dd46b2fd598322258 | |
parent | b3a591884528bc2793172ad9950be60844b1ecc2 (diff) |
Order contents items alphabetically by title
If many different doc versions are installed
order them by version number in the reverse order
(the bigger version in front)
Task-number: QTBUG-21357
Task-number: QTBUG-59364
Task-number: QTCREATORBUG-10004
Task-number: QTCREATORBUG-17949
Change-Id: I8429c3d63fedf9811ea41ca13f754b677ff55a1e
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
-rw-r--r-- | src/assistant/help/qhelpcollectionhandler.cpp | 52 | ||||
-rw-r--r-- | tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp | 2 |
2 files changed, 46 insertions, 8 deletions
diff --git a/src/assistant/help/qhelpcollectionhandler.cpp b/src/assistant/help/qhelpcollectionhandler.cpp index 677b2b4fc..b1a09d126 100644 --- a/src/assistant/help/qhelpcollectionhandler.cpp +++ b/src/assistant/help/qhelpcollectionhandler.cpp @@ -41,12 +41,14 @@ #include "qhelp_global.h" #include "qhelpdbreader_p.h" +#include <QtCore/QDataStream> #include <QtCore/QDateTime> #include <QtCore/QDir> #include <QtCore/QFile> #include <QtCore/QFileInfo> #include <QtCore/QTimer> #include <QtCore/QVector> +#include <QtCore/QVersionNumber> #include <QtSql/QSqlError> #include <QtSql/QSqlDriver> @@ -1028,6 +1030,23 @@ QStringList QHelpCollectionHandler::indicesForFilter(const QStringList &filterAt return indices; } +static QString getTitle(const QByteArray &contents) +{ + if (!contents.size()) + return QString(); + + int depth = 0; + QString link; + QString title; + + QDataStream s(contents); + s >> depth; + s >> link; + s >> title; + + return title; +} + QList<QHelpCollectionHandler::ContentsData> QHelpCollectionHandler::contentsForFilter( const QStringList &filterAttributes) const { @@ -1038,14 +1057,17 @@ QList<QHelpCollectionHandler::ContentsData> QHelpCollectionHandler::contentsForF "SELECT DISTINCT " "NamespaceTable.Name, " "FolderTable.Name, " - "ContentsTable.Data " + "ContentsTable.Data, " + "VersionTable.Version " "FROM " "FolderTable, " "NamespaceTable, " - "ContentsTable " + "ContentsTable, " + "VersionTable " "WHERE ContentsTable.NamespaceId = NamespaceTable.Id " "AND NamespaceTable.Id = FolderTable.NamespaceId " - "AND ContentsTable.NamespaceId = NamespaceTable.Id"); + "AND ContentsTable.NamespaceId = NamespaceTable.Id " + "AND VersionTable.NamespaceId = NamespaceTable.Id"); const QString filterQuery = filterlessQuery + prepareFilterQuery(filterAttributes.count(), @@ -1059,18 +1081,34 @@ QList<QHelpCollectionHandler::ContentsData> QHelpCollectionHandler::contentsForF m_query->exec(); - QMap<QString, ContentsData> contentsMap; + QMap<QString, QMap<QVersionNumber, ContentsData>> contentsMap; while (m_query->next()) { const QString namespaceName = m_query->value(0).toString(); + const QByteArray contents = m_query->value(2).toByteArray(); + const QString versionString = m_query->value(3).toString(); + + const QString title = getTitle(contents); + const QVersionNumber version = QVersionNumber::fromString(versionString); // get existing or insert a new one otherwise - ContentsData &contentsData = contentsMap[namespaceName]; + ContentsData &contentsData = contentsMap[title][version]; contentsData.namespaceName = namespaceName; contentsData.folderName = m_query->value(1).toString(); - contentsData.contentsList.append(m_query->value(2).toByteArray()); + contentsData.contentsList.append(contents); + } + + QList<QHelpCollectionHandler::ContentsData> result; + for (const auto &versionContents : qAsConst(contentsMap)) { + // insert items in the reverse order of version number + const auto itBegin = versionContents.constBegin(); + auto it = versionContents.constEnd(); + while (it != itBegin) { + --it; + result.append(it.value()); + } } - return contentsMap.values(); + return result; } bool QHelpCollectionHandler::removeCustomValue(const QString &key) diff --git a/tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp b/tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp index 5a39cc923..039ea2f9a 100644 --- a/tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp +++ b/tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp @@ -146,7 +146,7 @@ void tst_QHelpContentModel::contentItemAt() item = m->contentItemAt(m->index(4, 0, root)); QCOMPARE(item->title(), QString("qmake Concepts")); - item = m->contentItemAt(m->index(1, 0)); + item = m->contentItemAt(m->index(0, 0)); QCOMPARE(item->title(), QString("Fancy Manual")); w.start(); |