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 /src/assistant/help/qhelpcollectionhandler.cpp | |
parent | b3a591884528bc2793172ad9950be60844b1ecc2 (diff) | |
download | qttools-cffe60fdb87d39494c92500aa6f99204d20fb90a.tar.gz |
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>
Diffstat (limited to 'src/assistant/help/qhelpcollectionhandler.cpp')
-rw-r--r-- | src/assistant/help/qhelpcollectionhandler.cpp | 52 |
1 files changed, 45 insertions, 7 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) |