Revision control

Copy as Markdown

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
// Qt-Security score:significant reason:header-decls-only
#ifndef QHELPCOLLECTIONHANDLER_H
#define QHELPCOLLECTIONHANDLER_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
// of the help generator tools. This header file may change from version
// to version without notice, or even be removed.
//
// We mean it.
//
#include "qhelpdbreader_p.h"
#include "qhelplink.h"
#include <QtCore/qdatetime.h>
#include <QtCore/qlist.h>
#include <QtCore/qmap.h>
#include <QtCore/qobject.h>
#include <QtCore/qstringlist.h>
#include <memory>
QT_BEGIN_NAMESPACE
class QHelpFilterData;
class QSqlQuery;
class QVariant;
class QVersionNumber;
class QHelpCollectionHandler : public QObject
{
Q_OBJECT
public:
struct FileInfo
{
QString fileName;
QString folderName;
QString namespaceName;
};
typedef QList<FileInfo> FileInfoList;
struct TimeStamp
{
int namespaceId = -1;
int folderId = -1;
QString fileName;
qint64 size = 0;
QDateTime timeStamp;
};
struct ContentsData
{
QString namespaceName;
QString folderName;
QList<QByteArray> contentsList;
};
explicit QHelpCollectionHandler(const QString &collectionFile, QObject *parent = nullptr);
~QHelpCollectionHandler();
QString collectionFile() const { return m_collectionFile; }
bool openCollectionFile();
bool copyCollectionFile(const QString &fileName);
// *** Legacy block start ***
// legacy API since Qt 5.13
// use filters() instead
QStringList customFilters() const;
// use QHelpFilterEngine::removeFilter() instead
bool removeCustomFilter(const QString &filterName);
// use QHelpFilterEngine::setFilterData() instead
bool addCustomFilter(const QString &filterName, const QStringList &attributes);
// use files(const QString &, const QString &, const QString &) instead
QStringList files(const QString &namespaceName,
const QStringList &filterAttributes,
const QString &extensionFilter) const;
// use namespaceForFile(const QUrl &, const QString &) instead
QString namespaceForFile(const QUrl &url, const QStringList &filterAttributes) const;
// use findFile(const QUrl &, const QString &) instead
QUrl findFile(const QUrl &url, const QStringList &filterAttributes) const;
// use indicesForFilter(const QString &) instead
QStringList indicesForFilter(const QStringList &filterAttributes) const;
// use contentsForFilter(const QString &) instead
QList<ContentsData> contentsForFilter(const QStringList &filterAttributes) const;
// use QHelpFilterEngine::activeFilter() and filterData(const QString &) instead;
QStringList filterAttributes() const;
// use filterData(const QString &) instead
QStringList filterAttributes(const QString &filterName) const;
// use filterData(const QString &) instead
QList<QStringList> filterAttributeSets(const QString &namespaceName) const;
// *** Legacy block end ***
QStringList filters() const;
QStringList availableComponents() const;
QList<QVersionNumber> availableVersions() const;
QMap<QString, QString> namespaceToComponent() const;
QMap<QString, QVersionNumber> namespaceToVersion() const;
QHelpFilterData filterData(const QString &filterName) const;
bool setFilterData(const QString &filterName, const QHelpFilterData &filterData);
bool removeFilter(const QString &filterName);
FileInfo registeredDocumentation(const QString &namespaceName) const;
FileInfoList registeredDocumentations() const;
bool registerDocumentation(const QString &fileName);
bool unregisterDocumentation(const QString &namespaceName);
bool fileExists(const QUrl &url) const;
QStringList files(const QString &namespaceName,
const QString &filterName,
const QString &extensionFilter) const;
QString namespaceForFile(const QUrl &url, const QString &filterName) const;
QUrl findFile(const QUrl &url, const QString &filterName) const;
QByteArray fileData(const QUrl &url) const;
QStringList indicesForFilter(const QString &filterName) const;
QList<ContentsData> contentsForFilter(const QString &filterName) const;
bool removeCustomValue(const QString &key);
QVariant customValue(const QString &key, const QVariant &defaultValue) const;
bool setCustomValue(const QString &key, const QVariant &value);
int registerNamespace(const QString &nspace, const QString &fileName);
int registerVirtualFolder(const QString &folderName, int namespaceId);
int registerComponent(const QString &componentName, int namespaceId);
bool registerVersion(const QString &version, int namespaceId);
QList<QHelpLink> documentsForIdentifier(const QString &id, const QString &filterName) const;
QList<QHelpLink> documentsForKeyword(const QString &keyword, const QString &filterName) const;
QList<QHelpLink> documentsForIdentifier(const QString &id,
const QStringList &filterAttributes) const;
QList<QHelpLink> documentsForKeyword(const QString &keyword,
const QStringList &filterAttributes) const;
QStringList namespacesForFilter(const QString &filterName) const;
void setReadOnly(bool readOnly) { m_readOnly = readOnly; }
static QUrl buildQUrl(const QString &ns, const QString &folder,
const QString &relFileName, const QString &anchor);
signals:
void error(const QString &msg);
private:
// legacy stuff
QList<QHelpLink> documentsForField(const QString &fieldName,
const QString &fieldValue,
const QStringList &filterAttributes) const;
QString namespaceVersion(const QString &namespaceName) const;
QMultiMap<QString, QUrl> linksForField(const QString &fieldName, const QString &fieldValue,
const QString &filterName) const;
QList<QHelpLink> documentsForField(const QString &fieldName,
const QString &fieldValue,
const QString &filterName) const;
bool isDBOpened() const;
bool createTables(QSqlQuery *query);
void closeDB();
bool recreateIndexAndNamespaceFilterTables(QSqlQuery *query);
bool registerIndexAndNamespaceFilterTables(const QString &nameSpace,
bool createDefaultVersionFilter = false);
void createVersionFilter(const QString &version);
bool registerFilterAttributes(const QList<QStringList> &attributeSets, int nsId);
bool registerFileAttributeSets(const QList<QStringList> &attributeSets, int nsId);
bool registerIndexTable(const QHelpDBReader::IndexTable &indexTable,
int nsId, int vfId, const QString &fileName);
bool unregisterIndexTable(int nsId, int vfId);
QString absoluteDocPath(const QString &fileName) const;
bool isTimeStampCorrect(const TimeStamp &timeStamp) const;
bool hasTimeStampInfo(const QString &nameSpace) const;
void scheduleVacuum();
void execVacuum();
QString m_collectionFile;
QString m_connectionName;
std::unique_ptr<QSqlQuery> m_query;
bool m_vacuumScheduled = false;
bool m_readOnly = true;
};
QT_END_NAMESPACE
#endif // QHELPCOLLECTIONHANDLER_H