aboutsummaryrefslogtreecommitdiff
path: root/src/webengine/filter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine/filter.cpp')
-rw-r--r--src/webengine/filter.cpp74
1 files changed, 20 insertions, 54 deletions
diff --git a/src/webengine/filter.cpp b/src/webengine/filter.cpp
index b250843..3ff6a04 100644
--- a/src/webengine/filter.cpp
+++ b/src/webengine/filter.cpp
@@ -15,53 +15,6 @@
#include <configuration/configuration.h>
#include "util.h"
-
-QHash<QString, Filter::HostRule> parseHostlist(const QString &filename)
-{
- QHash<QString, Filter::HostRule> rules;
-
- if(QFile hostfile(filename); hostfile.open(QIODevice::ReadOnly | QIODevice::Text)) {
-
- // with a QTextStream we can read lines without getting linebreaks at the end
- QTextStream hostfile_stream(&hostfile);
-
- while(!hostfile_stream.atEnd()) {
-
- // read line and remove any whitespace at the end
- const QString &line = hostfile_stream.readLine().trimmed();
-
- // skip comments and empty lines
- if(line.isEmpty() || line.startsWith('#'))
- continue;
-
- // everything else should be a rule
- // format is <redirect> <host>
- // 0.0.0.0 hostname
- const QStringList &parts = line.split(' ');
- const QString &redirect = parts.at(0);
-
- for(auto i = parts.constBegin() + 1; i != parts.constEnd(); ++i) {
- if(!rules.contains(*i)) {
- Filter::HostRule rule{};
- rule.isBlocking = (redirect == "0.0.0.0");
- rules.insert(*i, rule);
- }
- }
-
- // for(const QString &host : parts.mid(1)) {
- // if(!rules.contains(host)) {
- // UrlRequestInterceptor::HostRule rule{};
- // rule.isBlocking = redirect == "0.0.0.0";
- // rules.insert(host, rule);
- // }
- // }
- }
-
- hostfile.close();
- }
-
- return rules;
-}
/*
inline std::vector<FilterRule> parseAdBlockList(const QString &filename)
{
@@ -95,9 +48,17 @@ Filter::Filter::Filter(const std::unique_ptr<Configuration> &config, QObject* pa
}
}
- const QStringList hostfiles = Util::files(config->value<QString>("filter.path").value());
+ const QStringList hostfiles = Util::files(config->value<QString>("filter.hosts").value());
+ //qDebug("filter.path=[%s]", qUtf8Printable(config->value<QString>("filter.hosts").value()));
for(const QString &hostfile : hostfiles) {
- m_hostlist.unite(parseHostlist(hostfile));
+ QFile f(hostfile);
+ if(f.open(QIODevice::ReadOnly | QIODevice::Text)) {
+#ifdef QT_DEBUG
+ qDebug("Loading hostlist filters [%s]", qUtf8Printable(hostfile));
+#endif
+ loadHostlist(f, &filters);
+ f.close();
+ }
}
/*
@@ -107,10 +68,15 @@ Filter::Filter::Filter(const std::unique_ptr<Configuration> &config, QObject* pa
*/
}
-std::optional<Filter::HostRule> Filter::hostlistRule(const QString& url) const
+void Filter::filterRequest(QWebEngineUrlRequestInfo& info) const
{
- if(!m_hostlist.contains(url))
- return std::nullopt;
-
- return std::optional<Filter::HostRule>(m_hostlist.value(url));
+ auto matches = filters.match(info.firstPartyUrl().toString(), info.requestUrl().toString());
+ for(const auto &rule : matches) {
+ switch(rule->action()) {
+ case FilterLeaf::Block:
+ qDebug("block %s", qUtf8Printable(info.requestUrl().toString()));
+ info.block(true);
+ break;
+ }
+ }
}