KIO

kuriikwsfilter.cpp
1/*
2 This file is part of the KDE project
3 SPDX-FileCopyrightText: 1999 Simon Hausmann <hausmann@kde.org>
4 SPDX-FileCopyrightText: 2000 Yves Arrouye <yves@realnames.com>
5 SPDX-FileCopyrightText: 2002, 2003 Dawit Alemayehu <adawit@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9
10#include "kuriikwsfilter.h"
11#include "kuriikwsfiltereng_p.h"
12#include "searchprovider.h"
13
14#include <KLocalizedString>
15#include <KPluginFactory>
16
17#include <QDBusConnection>
18#include <QLoggingCategory>
19
20using namespace KIO;
21namespace
22{
23Q_LOGGING_CATEGORY(category, "kf.kio.urifilters.ikws", QtWarningMsg)
24}
25
26K_PLUGIN_CLASS_WITH_JSON(KAutoWebSearch, "kuriikwsfilter.json")
27
28void KAutoWebSearch::populateProvidersList(QList<KUriFilterSearchProvider *> &searchProviders, const KUriFilterData &data, bool allproviders) const
29{
31 KURISearchFilterEngine *filter = KURISearchFilterEngine::self();
32
33 if (allproviders) {
34 providers = filter->registry()->findAll();
35 } else {
36 // Start with the search engines marked as preferred...
37 QStringList favEngines = filter->favoriteEngineList();
38 if (favEngines.isEmpty()) {
39 favEngines = data.alternateSearchProviders();
40 }
41
42 // Get rid of duplicates...
43 favEngines.removeDuplicates();
44
45 // Sort the items...
46 std::stable_sort(favEngines.begin(), favEngines.end());
47
48 // Add the search engine set as the default provider...
49 const QString defaultEngine = filter->defaultSearchEngine();
50 if (!defaultEngine.isEmpty()) {
51 favEngines.removeAll(defaultEngine);
52 favEngines.insert(0, defaultEngine);
53 }
54
55 QStringListIterator it(favEngines);
56 while (it.hasNext()) {
57 SearchProvider *favProvider = filter->registry()->findByDesktopName(it.next());
58 if (favProvider) {
59 providers << favProvider;
60 }
61 }
62 }
63
64 for (SearchProvider *p : std::as_const(providers)) {
65 searchProviders << p;
66 }
67}
68
69bool KAutoWebSearch::filterUri(KUriFilterData &data) const
70{
71 qCDebug(category) << data.typedString();
72
74
75 // Handle the flag to retrieve only preferred providers, no filtering...
76 if (option & KUriFilterData::RetrievePreferredSearchProvidersOnly) {
78 populateProvidersList(searchProviders, data);
79 if (searchProviders.isEmpty()) {
80 if (!(option & KUriFilterData::RetrieveSearchProvidersOnly)) {
81 setUriType(data, KUriFilterData::Error);
82 setErrorMsg(data, i18n("No preferred search providers were found."));
83 return false;
84 }
85 } else {
86 setSearchProvider(data, nullptr, data.typedString(), QLatin1Char(KURISearchFilterEngine::self()->keywordDelimiter()));
87 setSearchProviders(data, searchProviders);
88 return true;
89 }
90 }
91
92 if (option & KUriFilterData::RetrieveSearchProvidersOnly) {
94 populateProvidersList(searchProviders, data, true);
95 if (searchProviders.isEmpty()) {
96 setUriType(data, KUriFilterData::Error);
97 setErrorMsg(data, i18n("No search providers were found."));
98 return false;
99 }
100
101 setSearchProvider(data, nullptr, data.typedString(), QLatin1Char(KURISearchFilterEngine::self()->keywordDelimiter()));
102 setSearchProviders(data, searchProviders);
103 return true;
104 }
105
106 if (data.uriType() == KUriFilterData::Unknown && data.uri().password().isEmpty()) {
107 KURISearchFilterEngine *filter = KURISearchFilterEngine::self();
108 SearchProvider *provider = filter->autoWebSearchQuery(data.typedString(), data.alternateDefaultSearchProvider());
109 if (provider) {
110 const QUrl result = filter->formatResult(provider->query(), provider->charset(), QString(), data.typedString(), true);
111 setFilteredUri(data, result);
112 setUriType(data, KUriFilterData::NetProtocol);
113 setSearchProvider(data, provider, data.typedString(), QLatin1Char(filter->keywordDelimiter()));
114
115 QList<KUriFilterSearchProvider *> searchProviders;
116 populateProvidersList(searchProviders, data);
117 setSearchProviders(data, searchProviders);
118 return true;
119 }
120 }
121 return false;
122}
123
124#include "kuriikwsfilter.moc"
125#include "moc_kuriikwsfilter.cpp"
#define K_PLUGIN_CLASS_WITH_JSON(classname, jsonFile)
This class is a basic messaging class used to exchange filtering information between the filter plugi...
Definition kurifilter.h:153
QUrl uri() const
Returns the filtered or the original URL.
SearchFilterOptions searchFilteringOptions() const
Returns the specified search filter options.
QString typedString() const
The string as typed by the user, before any URL processing is done.
@ Error
An incorrect URI (ex: "~johndoe" when user johndoe does not exist in that system)
Definition kurifilter.h:166
@ NetProtocol
Any network protocol: http, ftp, nttp, pop3, etc...
Definition kurifilter.h:159
@ Unknown
A URI that is not identified. Default value when a KUriFilterData is first created.
Definition kurifilter.h:167
UriTypes uriType() const
Returns the URI type.
QString alternateDefaultSearchProvider() const
Returns the search provider to use when a default provider is not available.
Class that holds information about a search provider.
Definition kurifilter.h:39
QString i18n(const char *text, const TYPE &arg...)
A namespace for KIO globals.
QCA_EXPORT ProviderList providers()
iterator begin()
iterator end()
iterator insert(const_iterator before, parameter_type value)
bool isEmpty() const const
qsizetype removeAll(const AT &t)
bool isEmpty() const const
qsizetype removeDuplicates()
QFuture< void > filter(QThreadPool *pool, Sequence &sequence, KeepFunctor &&filterFunction)
QString password(ComponentFormattingOptions options) const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:18:52 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.