summaryrefslogtreecommitdiff
path: root/src/searchengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/searchengine.cpp')
-rw-r--r--src/searchengine.cpp190
1 files changed, 44 insertions, 146 deletions
diff --git a/src/searchengine.cpp b/src/searchengine.cpp
index dd01f703..342065c4 100644
--- a/src/searchengine.cpp
+++ b/src/searchengine.cpp
@@ -1,166 +1,64 @@
/* ============================================================
-*
-* This file is a part of the rekonq project
-*
-* Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com>
-* Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr>
-*
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License as
-* published by the Free Software Foundation; either version 2 of
-* the License or (at your option) version 3 or any later version
-* accepted by the membership of KDE e.V. (or its successor approved
-* by the membership of KDE e.V.), which shall act as a proxy
-* defined in Section 14 of version 3 of the license.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program. If not, see <http://www.gnu.org/licenses/>.
-*
-* ============================================================ */
-
+ * The rekonq project
+ * ============================================================
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright (C) 2008-2012 by Andrea Diamantini <adjam7 at gmail dot com>
+ * Copyright (C) 2009-2011 by Lionel Chauvin <megabigbug@yahoo.fr>
+ * SPDX-License-Identifier: GPL-3.0-only
+ * Copyright (C) 2022 aqua <aqua@iserlohn-fortress.net>
+ * ============================================================ */
// local includes
-#include "searchengine.h"
-
-//KDE includes
-#include <KConfigGroup>
-#include <KServiceTypeTrader>
-#include <KUriFilter>
-
-#include <QStringList>
-
-
-struct SearchEnginePrivate
-{
- SearchEnginePrivate() : isLoaded(false) {}
- bool isLoaded;
- bool isEnabled;
- bool usePreferredOnly;
- QString delimiter;
- KService::List favorites;
- KService::Ptr defaultEngine;
+#include "searchengine.hpp"
+
+struct SearchEnginePrivate {
+ SearchEnginePrivate() = default;
+ ~SearchEnginePrivate() noexcept
+ {
+ for (auto *i : engines) delete i;
+ }
+ bool isLoaded = false;
+ QList<SearchEngine *> engines;
+ SearchEngine *defaultEngine = nullptr;
};
+Q_GLOBAL_STATIC(SearchEnginePrivate, d)
-K_GLOBAL_STATIC(SearchEnginePrivate, d)
-
-
-
-void SearchEngine::reload()
-{
- KConfig config("kuriikwsfilterrc"); //Shared with konqueror
- KConfigGroup cg = config.group("General");
-
- d->isEnabled = cg.readEntry("EnableWebShortcuts", true);
- d->usePreferredOnly = cg.readEntry("UsePreferredWebShortcutsOnly", false);
-
- //load delimiter
- d->delimiter = cg.readEntry("KeywordDelimiter", ":");
-
- // load favorite engines
- QStringList favoriteEngines;
- favoriteEngines = cg.readEntry("PreferredWebShortcuts", favoriteEngines);
-
- KService::List favorites;
- KService::Ptr service;
- Q_FOREACH(const QString & engine, favoriteEngines)
- {
- service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(engine));
- if (service)
- {
- favorites << service;
- }
- }
- d->favorites = favorites;
-
- // load default engine
- QString dse;
- dse = cg.readEntry("DefaultWebShortcut");
-
- d->defaultEngine = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(dse));
-
- d->isLoaded = true;
-}
-
-
-QString SearchEngine::delimiter()
-{
- if (!d->isLoaded)
- reload();
-
- return d->delimiter;
-}
-
-
-KService::List SearchEngine::favorites()
+SearchEngine *SearchEngine::defaultEngine()
{
- if (!d->isLoaded)
- reload();
-
- return d->favorites;
+ Q_ASSERT(d->isLoaded);
+ return d->defaultEngine;
}
-
-KService::Ptr SearchEngine::defaultEngine()
+QList<SearchEngine *> SearchEngine::engines()
{
- if (!d->isLoaded)
- reload();
-
- return d->defaultEngine;
+ Q_ASSERT(d->isLoaded);
+ return d->engines;
}
-
-KService::Ptr SearchEngine::fromString(const QString &text)
+void SearchEngine::reload(RekonqSettings *settings)
{
- KService::Ptr service;
-
- // first, the easy part...
- if (!d->isEnabled)
- return service;
+ Q_CHECK_PTR(settings);
- KService::List providers = (d->usePreferredOnly)
- ? SearchEngine::favorites()
- : KServiceTypeTrader::self()->query("SearchProvider");
+ settings->beginGroup("SearchEngines");
+ const auto defaultId = settings->value("default").toString();
+ const auto list = settings->value("engines").toStringList();
- int i = 0;
- bool found = false;
- while (!found && i < providers.size())
- {
- QStringList list = providers.at(i)->property("Keys").toStringList();
- Q_FOREACH(const QString & key, list)
- {
- const QString searchPrefix = key + delimiter();
- if (text.startsWith(searchPrefix))
- {
- service = providers.at(i);
- found = true;
- break;
- }
- }
- i++;
- }
+ for (const auto &id : list) {
+ auto *e = new SearchEngine(id, settings);
+ d->engines.append(e);
+ if (id == defaultId) d->defaultEngine = e;
+ }
- return service;
+ settings->endGroup();
+ d->isLoaded = true;
}
-
-QString SearchEngine::buildQuery(KService::Ptr engine, const QString &text)
+SearchEngine::SearchEngine(const QString &id, RekonqSettings *settings) : m_id(id)
{
- if (!engine)
- return QString();
-
- QString shortcut = engine->property("Keys").toStringList().at(0);
- QString query = shortcut + delimiter() + text;
-
- QStringList filters;
- filters << QL1S("kurisearchfilter");
- KUriFilter::self()->filterUri(query, filters);
-
- return query;
+ settings->beginGroup("SearchEngines." + id);
+ m_name = settings->value("name").toString();
+ m_url = settings->value("url").toString();
+ m_enabled = settings->value("enabled").toBool();
+ settings->endGroup();
}