aboutsummaryrefslogtreecommitdiff
path: root/src/filter/filtercollection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/filter/filtercollection.cpp')
-rw-r--r--src/filter/filtercollection.cpp44
1 files changed, 21 insertions, 23 deletions
diff --git a/src/filter/filtercollection.cpp b/src/filter/filtercollection.cpp
index 7b07606..4c2bfce 100644
--- a/src/filter/filtercollection.cpp
+++ b/src/filter/filtercollection.cpp
@@ -74,27 +74,21 @@ QString FilterCollection::name() const
* @param info
* @return true if it should be blocked; false otherwise
*/
-FilterCollection::MatchResult FilterCollection::match(QWebEngineUrlRequestInfo &info)
+bool FilterCollection::match(QWebEngineUrlRequestInfo &info)
{
- MatchResult result;
-
- for(Filter *rule : m_filters->filters(info.firstPartyUrl().toString())) {
- if(rule->isValid()) {
- result.match = rule->hasMatch(info);
- if(result.match) {
- result.block = rule->shouldBlock(info);
- } else {
- result.block = false;
+ for(QString domain : m_filterlist.keys()) {
+ if(domain.isEmpty() || info.firstPartyUrl().toString().contains(domain)) {
+ // domain matched
+
+ for(QString rule : m_filterlist.value(domain).keys()) {
+ if(rule.isEmpty() || info.requestUrl().toString().contains(rule)) {
+ return m_filterlist.value(domain).value(rule);
+ }
}
- result.pattern = rule->domain() + " | " + rule->request();
- return result;
}
}
- // request matches neither whitelist nor blacklist
- result.match = false;
- result.block = false;
- return result;
+ return false;
}
/**
@@ -108,18 +102,22 @@ int FilterCollection::load(const QJsonObject &json)
ui->title->setText(json["name"].toString());
ui->homepage->setText(json["url"].toString());
- for(QJsonValue v : json["rules"].toArray()) {
+ QJsonObject rules = json["rules"].toObject();
+ for(QString key : rules.keys()) {
++number;
+ qDebug("+ '%s'", qUtf8Printable(key));
- QJsonObject obj = v.toObject();
+ QJsonObject domain = rules.value(key).toObject();
+ QHash<QString, bool> d;
- Filter::ResourceRules r;
- r.allowed = parseJsonRules(obj["allowTypes"]);
- r.blocked = parseJsonRules(obj["blockTypes"]);
+ for(QString r : domain.keys()) {
+ d.insert(r, domain.value(r).toBool());
+ qDebug("|-'%s': %i", qUtf8Printable(r), domain.value(r).toBool());
+ }
- m_filters->addFilter(obj["firstPartyUrl"].toString(), obj["requestUrl"].toString(), r, obj["shouldBlock"].toBool());
- }
+ m_filterlist.insert(key, d);
+ }
return number;
}