1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
/*
This file is part of the KDE project
SPDX-FileCopyrightText: 2017 David Faure <faure@kde.org>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#include "searchproviderregistry.h"
#include "searchprovider.h"
#include <QDir>
#include <QStandardPaths>
SearchProviderRegistry::SearchProviderRegistry()
{
reload();
}
SearchProviderRegistry::~SearchProviderRegistry()
{
qDeleteAll(m_searchProviders);
}
QStringList SearchProviderRegistry::directories() const
{
const QString testDir = QFile::decodeName(qgetenv("KIO_SEARCHPROVIDERS_DIR")); // for unittests
if (!testDir.isEmpty()) {
return {testDir};
}
return QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kf6/searchproviders/"), QStandardPaths::LocateDirectory);
}
void SearchProviderRegistry::reload()
{
m_searchProvidersByKey.clear();
m_searchProvidersByDesktopName.clear();
qDeleteAll(m_searchProviders);
m_searchProviders.clear();
const QStringList servicesDirs = directories();
for (const QString &dirPath : servicesDirs) {
QDir dir(dirPath);
const auto files = dir.entryList({QStringLiteral("*.desktop")}, QDir::Files);
for (const QString &file : files) {
if (!m_searchProvidersByDesktopName.contains(file)) {
const QString filePath = dir.path() + QLatin1Char('/') + file;
auto *provider = new SearchProvider(filePath);
m_searchProvidersByDesktopName.insert(file, provider);
m_searchProviders.append(provider);
const auto keys = provider->keys();
for (const QString &key : keys) {
m_searchProvidersByKey.insert(key, provider);
}
}
}
}
}
QList<SearchProvider *> SearchProviderRegistry::findAll()
{
return m_searchProviders;
}
SearchProvider *SearchProviderRegistry::findByKey(const QString &key) const
{
return m_searchProvidersByKey.value(key);
}
SearchProvider *SearchProviderRegistry::findByDesktopName(const QString &name) const
{
return m_searchProvidersByDesktopName.value(name + QLatin1String(".desktop"));
}
|