Core: modernize HelpManager

Change-Id: Ia5468ee5113f85206d1a714f4580297d166fbafd
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
David Schulz
2018-01-24 10:20:59 +01:00
parent 9e066c7b17
commit 193e3de80a
2 changed files with 31 additions and 26 deletions

View File

@@ -53,10 +53,12 @@ namespace Core {
struct HelpManagerPrivate struct HelpManagerPrivate
{ {
HelpManagerPrivate() : HelpManagerPrivate() :
m_needsSetup(true), m_helpEngine(0), m_collectionWatcher(0) m_needsSetup(true), m_helpEngine(nullptr), m_collectionWatcher(nullptr)
{} {}
QStringList documentationFromInstaller(); ~HelpManagerPrivate();
const QStringList documentationFromInstaller();
void readSettings(); void readSettings();
void writeSettings(); void writeSettings();
void cleanUpDocumentation(); void cleanUpDocumentation();
@@ -73,8 +75,8 @@ struct HelpManagerPrivate
QSet<QString> m_userRegisteredFiles; QSet<QString> m_userRegisteredFiles;
}; };
static HelpManager *m_instance = 0; static HelpManager *m_instance = nullptr;
static HelpManagerPrivate *d; static HelpManagerPrivate *d = nullptr;
static const char linksForKeyQuery[] = "SELECT d.Title, f.Name, e.Name, " static const char linksForKeyQuery[] = "SELECT d.Title, f.Name, e.Name, "
"d.Name, a.Anchor FROM IndexTable a, FileNameTable d, FolderTable e, " "d.Name, a.Anchor FROM IndexTable a, FileNameTable d, FolderTable e, "
@@ -102,11 +104,8 @@ HelpManager::HelpManager(QObject *parent) :
HelpManager::~HelpManager() HelpManager::~HelpManager()
{ {
d->writeSettings();
delete d->m_helpEngine;
d->m_helpEngine = 0;
m_instance = 0;
delete d; delete d;
m_instance = nullptr;
} }
HelpManager *HelpManager::instance() HelpManager *HelpManager::instance()
@@ -124,13 +123,13 @@ QString HelpManager::collectionFilePath()
void HelpManager::registerDocumentation(const QStringList &files) void HelpManager::registerDocumentation(const QStringList &files)
{ {
if (d->m_needsSetup) { if (d->m_needsSetup) {
foreach (const QString &filePath, files) for (const QString &filePath : files)
d->m_filesToRegister.insert(filePath); d->m_filesToRegister.insert(filePath);
return; return;
} }
bool docsChanged = false; bool docsChanged = false;
foreach (const QString &file, files) { for (const QString &file : files) {
const QString &nameSpace = d->m_helpEngine->namespaceName(file); const QString &nameSpace = d->m_helpEngine->namespaceName(file);
if (nameSpace.isEmpty()) if (nameSpace.isEmpty())
continue; continue;
@@ -162,13 +161,13 @@ void HelpManager::registerDocumentation(const QStringList &files)
void HelpManager::unregisterDocumentation(const QStringList &nameSpaces) void HelpManager::unregisterDocumentation(const QStringList &nameSpaces)
{ {
if (d->m_needsSetup) { if (d->m_needsSetup) {
foreach (const QString &name, nameSpaces) for (const QString &name : nameSpaces)
d->m_nameSpacesToUnregister.insert(name); d->m_nameSpacesToUnregister.insert(name);
return; return;
} }
bool docsChanged = false; bool docsChanged = false;
foreach (const QString &nameSpace, nameSpaces) { for (const QString &nameSpace : nameSpaces) {
const QString filePath = d->m_helpEngine->documentationFileName(nameSpace); const QString filePath = d->m_helpEngine->documentationFileName(nameSpace);
if (d->m_helpEngine->unregisterDocumentation(nameSpace)) { if (d->m_helpEngine->unregisterDocumentation(nameSpace)) {
docsChanged = true; docsChanged = true;
@@ -185,7 +184,7 @@ void HelpManager::unregisterDocumentation(const QStringList &nameSpaces)
void HelpManager::registerUserDocumentation(const QStringList &filePaths) void HelpManager::registerUserDocumentation(const QStringList &filePaths)
{ {
foreach (const QString &filePath, filePaths) for (const QString &filePath : filePaths)
d->m_userRegisteredFiles.insert(filePath); d->m_userRegisteredFiles.insert(filePath);
registerDocumentation(filePaths); registerDocumentation(filePaths);
} }
@@ -219,7 +218,7 @@ QMap<QString, QUrl> HelpManager::linksForKeyword(const QString &key)
QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name); QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name);
if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) { if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) {
const QStringList &registeredDocs = d->m_helpEngine->registeredDocumentations(); const QStringList &registeredDocs = d->m_helpEngine->registeredDocumentations();
foreach (const QString &nameSpace, registeredDocs) { for (const QString &nameSpace : registeredDocs) {
db.setDatabaseName(d->m_helpEngine->documentationFileName(nameSpace)); db.setDatabaseName(d->m_helpEngine->documentationFileName(nameSpace));
if (db.open()) { if (db.open()) {
QSqlQuery query = QSqlQuery(db); QSqlQuery query = QSqlQuery(db);
@@ -308,7 +307,7 @@ HelpManager::Filters HelpManager::filters()
Filters filters; Filters filters;
const QStringList &customFilters = d->m_helpEngine->customFilters(); const QStringList &customFilters = d->m_helpEngine->customFilters();
foreach (const QString &filter, customFilters) for (const QString &filter : customFilters)
filters.insert(filter, d->m_helpEngine->filterAttributes(filter)); filters.insert(filter, d->m_helpEngine->filterAttributes(filter));
return filters; return filters;
} }
@@ -325,7 +324,7 @@ HelpManager::Filters HelpManager::fixedFilters()
QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name); QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name);
if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) { if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) {
const QStringList &registeredDocs = d->m_helpEngine->registeredDocumentations(); const QStringList &registeredDocs = d->m_helpEngine->registeredDocumentations();
foreach (const QString &nameSpace, registeredDocs) { for (const QString &nameSpace : registeredDocs) {
db.setDatabaseName(d->m_helpEngine->documentationFileName(nameSpace)); db.setDatabaseName(d->m_helpEngine->documentationFileName(nameSpace));
if (db.open()) { if (db.open()) {
QSqlQuery query = QSqlQuery(db); QSqlQuery query = QSqlQuery(db);
@@ -382,7 +381,7 @@ void HelpManager::setupHelpManager()
d->m_helpEngine = new QHelpEngineCore(collectionFilePath(), m_instance); d->m_helpEngine = new QHelpEngineCore(collectionFilePath(), m_instance);
d->m_helpEngine->setupData(); d->m_helpEngine->setupData();
foreach (const QString &filePath, d->documentationFromInstaller()) for (const QString &filePath : d->documentationFromInstaller())
d->m_filesToRegister.insert(filePath); d->m_filesToRegister.insert(filePath);
d->cleanUpDocumentation(); d->cleanUpDocumentation();
@@ -409,7 +408,7 @@ void HelpManagerPrivate::cleanUpDocumentation()
// mark documentation for removal for which there is no documentation file anymore // mark documentation for removal for which there is no documentation file anymore
// mark documentation for removal that is neither user registered, nor marked for registration // mark documentation for removal that is neither user registered, nor marked for registration
const QStringList &registeredDocs = m_helpEngine->registeredDocumentations(); const QStringList &registeredDocs = m_helpEngine->registeredDocumentations();
foreach (const QString &nameSpace, registeredDocs) { for (const QString &nameSpace : registeredDocs) {
const QString filePath = m_helpEngine->documentationFileName(nameSpace); const QString filePath = m_helpEngine->documentationFileName(nameSpace);
if (!QFileInfo::exists(filePath) if (!QFileInfo::exists(filePath)
|| (!m_filesToRegister.contains(filePath) || (!m_filesToRegister.contains(filePath)
@@ -419,24 +418,30 @@ void HelpManagerPrivate::cleanUpDocumentation()
} }
} }
QStringList HelpManagerPrivate::documentationFromInstaller() HelpManagerPrivate::~HelpManagerPrivate()
{
writeSettings();
delete m_helpEngine;
m_helpEngine = nullptr;
}
const QStringList HelpManagerPrivate::documentationFromInstaller()
{ {
QSettings *installSettings = ICore::settings(); QSettings *installSettings = ICore::settings();
QStringList documentationPaths = installSettings->value(QLatin1String("Help/InstalledDocumentation")) const QStringList documentationPaths = installSettings->value(QLatin1String("Help/InstalledDocumentation"))
.toStringList(); .toStringList();
QStringList documentationFiles; QStringList documentationFiles;
foreach (const QString &path, documentationPaths) { for (const QString &path : documentationPaths) {
QFileInfo pathInfo(path); QFileInfo pathInfo(path);
if (pathInfo.isFile() && pathInfo.isReadable()) { if (pathInfo.isFile() && pathInfo.isReadable()) {
documentationFiles << pathInfo.absoluteFilePath(); documentationFiles << pathInfo.absoluteFilePath();
} else if (pathInfo.isDir()) { } else if (pathInfo.isDir()) {
QDir dir(path); const QFileInfoList files(QDir(path).entryInfoList(QStringList(QLatin1String("*.qch")),
foreach (const QFileInfo &fileInfo, dir.entryInfoList(QStringList(QLatin1String("*.qch")), QDir::Files | QDir::Readable));
QDir::Files | QDir::Readable)) { for (const QFileInfo &fileInfo : files)
documentationFiles << fileInfo.absoluteFilePath(); documentationFiles << fileInfo.absoluteFilePath();
} }
} }
}
return documentationFiles; return documentationFiles;
} }

View File

@@ -99,7 +99,7 @@ signals:
void helpRequested(const QUrl &url, Core::HelpManager::HelpViewerLocation location); void helpRequested(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
private: private:
explicit HelpManager(QObject *parent = 0); explicit HelpManager(QObject *parent = nullptr);
~HelpManager(); ~HelpManager();
static void setupHelpManager(); static void setupHelpManager();