summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2018-06-20 11:04:39 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2018-07-09 12:15:30 +0000
commitcffe60fdb87d39494c92500aa6f99204d20fb90a (patch)
tree2ded8c7b3351588b82abf85dd46b2fd598322258
parentb3a591884528bc2793172ad9950be60844b1ecc2 (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.cpp52
-rw-r--r--tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel.cpp2
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();