diff options
Diffstat (limited to 'src/filter/filtercollection.cpp')
-rw-r--r-- | src/filter/filtercollection.cpp | 44 |
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; } |