From dbe178044b591490cb98c071da8b91342129e030 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 31 Aug 2020 10:33:58 +0200 Subject: QtHelp: Fix documentsFor() when not using filter engine Fixes: QTBUG-84727 Pick-to: 5.15 Change-Id: Id66cc071a24cc761dc63d044b7f74d0e1959cd22 Reviewed-by: Edward Welbourne Reviewed-by: Kai Koehne --- src/assistant/help/qhelpcollectionhandler.cpp | 92 +++++++++++++++++++-------- src/assistant/help/qhelpcollectionhandler_p.h | 10 ++- src/assistant/help/qhelpenginecore.cpp | 14 ++-- 3 files changed, 83 insertions(+), 33 deletions(-) diff --git a/src/assistant/help/qhelpcollectionhandler.cpp b/src/assistant/help/qhelpcollectionhandler.cpp index b59975808..57ab8e329 100644 --- a/src/assistant/help/qhelpcollectionhandler.cpp +++ b/src/assistant/help/qhelpcollectionhandler.cpp @@ -2301,28 +2301,56 @@ static QUrl buildQUrl(const QString &ns, const QString &folder, return url; } -QMultiMap -QHelpCollectionHandler::linksForIdentifier(const QString &id, - const QStringList &filterAttributes) const +QMultiMap QHelpCollectionHandler::linksForIdentifier( + const QString &id, + const QStringList &filterAttributes) const { return linksForField(QLatin1String("Identifier"), id, filterAttributes); } -QMultiMap -QHelpCollectionHandler::linksForKeyword(const QString &keyword, - const QStringList &filterAttributes) const +QMultiMap QHelpCollectionHandler::linksForKeyword( + const QString &keyword, + const QStringList &filterAttributes) const { return linksForField(QLatin1String("Name"), keyword, filterAttributes); } -QMultiMap -QHelpCollectionHandler::linksForField(const QString &fieldName, const QString &fieldValue, - const QStringList &filterAttributes) const +QList QHelpCollectionHandler::documentsForIdentifier( + const QString &id, + const QStringList &filterAttributes) const +{ + return documentsForField(QLatin1String("Identifier"), id, filterAttributes); +} + +QList QHelpCollectionHandler::documentsForKeyword( + const QString &keyword, + const QStringList &filterAttributes) const +{ + return documentsForField(QLatin1String("Name"), keyword, filterAttributes); +} + +QMultiMap QHelpCollectionHandler::linksForField( + const QString &fieldName, + const QString &fieldValue, + const QStringList &filterAttributes) const { QMultiMap linkMap; + const auto documents = documentsForField(fieldName, fieldValue, filterAttributes); + for (const auto &document : documents) + linkMap.insert(document.title, document.url); + + return linkMap; +} + +QList QHelpCollectionHandler::documentsForField( + const QString &fieldName, + const QString &fieldValue, + const QStringList &filterAttributes) const +{ + QList docList; if (!isDBOpened()) - return linkMap; + return docList; const QString filterlessQuery = QString::fromLatin1( "SELECT " @@ -2359,40 +2387,47 @@ QHelpCollectionHandler::linksForField(const QString &fieldName, const QString &f if (title.isEmpty()) // generate a title + corresponding path title = fieldValue + QLatin1String(" : ") + m_query->value(3).toString(); - linkMap.insert(title, - buildQUrl(m_query->value(1).toString(), m_query->value(2).toString(), - m_query->value(3).toString(), m_query->value(4).toString())); + const QUrl url = buildQUrl(m_query->value(1).toString(), + m_query->value(2).toString(), + m_query->value(3).toString(), + m_query->value(4).toString()); + docList.append(QHelpLink {url, title}); } - return linkMap; + return docList; } -QMultiMap QHelpCollectionHandler::linksForIdentifier(const QString &id, - const QString &filterName) const +QMultiMap QHelpCollectionHandler::linksForIdentifier( + const QString &id, + const QString &filterName) const { return linksForField(QLatin1String("Identifier"), id, filterName); } -QMultiMap QHelpCollectionHandler::linksForKeyword(const QString &keyword, - const QString &filterName) const +QMultiMap QHelpCollectionHandler::linksForKeyword( + const QString &keyword, + const QString &filterName) const { return linksForField(QLatin1String("Name"), keyword, filterName); } -QList QHelpCollectionHandler::documentsForIdentifier(const QString &id, - const QString &filterName) const +QList QHelpCollectionHandler::documentsForIdentifier( + const QString &id, + const QString &filterName) const { return documentsForField(QLatin1String("Identifier"), id, filterName); } -QList QHelpCollectionHandler::documentsForKeyword(const QString &keyword, - const QString &filterName) const +QList QHelpCollectionHandler::documentsForKeyword( + const QString &keyword, + const QString &filterName) const { return documentsForField(QLatin1String("Name"), keyword, filterName); } -QMultiMap QHelpCollectionHandler::linksForField(const QString &fieldName, - const QString &fieldValue, - const QString &filterName) const +QMultiMap QHelpCollectionHandler::linksForField( + const QString &fieldName, + const QString &fieldValue, + const QString &filterName) const { QMultiMap linkMap; const auto documents = documentsForField(fieldName, fieldValue, filterName); @@ -2402,9 +2437,10 @@ QMultiMap QHelpCollectionHandler::linksForField(const QString &fi return linkMap; } -QList QHelpCollectionHandler::documentsForField(const QString &fieldName, - const QString &fieldValue, - const QString &filterName) const +QList QHelpCollectionHandler::documentsForField( + const QString &fieldName, + const QString &fieldValue, + const QString &filterName) const { QList docList; diff --git a/src/assistant/help/qhelpcollectionhandler_p.h b/src/assistant/help/qhelpcollectionhandler_p.h index d00699366..9a8cb1e9c 100644 --- a/src/assistant/help/qhelpcollectionhandler_p.h +++ b/src/assistant/help/qhelpcollectionhandler_p.h @@ -207,6 +207,10 @@ public: const QString &filterName) const; QList documentsForKeyword(const QString &keyword, const QString &filterName) const; + QList documentsForIdentifier(const QString &id, + const QStringList &filterAttributes) const; + QList documentsForKeyword(const QString &keyword, + const QStringList &filterAttributes) const; QStringList namespacesForFilter(const QString &filterName) const; @@ -217,8 +221,12 @@ signals: private: // legacy stuff - QMultiMap linksForField(const QString &fieldName, const QString &fieldValue, + QMultiMap linksForField(const QString &fieldName, + const QString &fieldValue, const QStringList &filterAttributes) const; + QList documentsForField(const QString &fieldName, + const QString &fieldValue, + const QStringList &filterAttributes) const; QString namespaceVersion(const QString &namespaceName) const; QMultiMap linksForField(const QString &fieldName, const QString &fieldValue, diff --git a/src/assistant/help/qhelpenginecore.cpp b/src/assistant/help/qhelpenginecore.cpp index 81e224b37..56137d124 100644 --- a/src/assistant/help/qhelpenginecore.cpp +++ b/src/assistant/help/qhelpenginecore.cpp @@ -635,10 +635,13 @@ QList QHelpEngineCore::documentsForIdentifier(const QString &id) cons */ QList QHelpEngineCore::documentsForIdentifier(const QString &id, const QString &filterName) const { - if (!d->setup() || !d->usesFilterEngine) + if (!d->setup()) return QList(); - return d->collectionHandler->documentsForIdentifier(id, filterName); + if (d->usesFilterEngine) + return d->collectionHandler->documentsForIdentifier(id, filterName); + + return d->collectionHandler->documentsForIdentifier(id, filterAttributes(filterName)); } /*! @@ -665,10 +668,13 @@ QList QHelpEngineCore::documentsForKeyword(const QString &keyword) co */ QList QHelpEngineCore::documentsForKeyword(const QString &keyword, const QString &filterName) const { - if (!d->setup() || !d->usesFilterEngine) + if (!d->setup()) return QList(); - return d->collectionHandler->documentsForKeyword(keyword, filterName); + if (d->usesFilterEngine) + return d->collectionHandler->documentsForKeyword(keyword, filterName); + + return d->collectionHandler->documentsForKeyword(keyword, filterAttributes(filterName)); } /*! -- cgit v1.2.3