From b091eab32952450744a21109a924cfdb5c504c82 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Mon, 22 Oct 2018 20:39:21 +0200 Subject: AdblockRule constructor --- lib/urlfilter/formats/adblockrule.cpp | 38 ++++++++++++++++++++++++++++++++--- lib/urlfilter/formats/adblockrule.h | 7 ++++--- 2 files changed, 39 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/urlfilter/formats/adblockrule.cpp b/lib/urlfilter/formats/adblockrule.cpp index 79a6dc8..6b97d5d 100644 --- a/lib/urlfilter/formats/adblockrule.cpp +++ b/lib/urlfilter/formats/adblockrule.cpp @@ -31,9 +31,11 @@ AdBlockRule *loadRule(const QString &filter) } // exception rules - const bool isBlocking = parsedLine.startsWith(QLatin1Literal("@@")); - if(isBlocking) + FilterLeaf::Action action = FilterLeaf::Block; + if(parsedLine.startsWith(QLatin1Literal("@@"))) { + action = FilterLeaf::Allow; parsedLine.remove(0, 2); + } // parse options QStringList enabledOn, disabledOn; @@ -105,7 +107,10 @@ AdBlockRule *loadRule(const QString &filter) pattern = parsedLine; } } - return nullptr; + + auto *rule = new AdBlockRule(matchType, pattern, action); + rule->mergeOptions(optionsHash); + return rule; } std::optional> parseOption(const QString &option) @@ -162,3 +167,30 @@ std::optional> parseOption(c return std::nullopt; } + +AdBlockRule::AdBlockRule(FilterLeaf::UrlMatchType matchType, const QString& filter, FilterLeaf::Action action) +{ + this->matchType = matchType; + this->m_request = filter; + this->m_isBlocking = (action == FilterLeaf::Block) ? true : false; +} + +void AdBlockRule::mergeOptions(const QHash &options) +{ + this->resourceTypeOptions.unite(options); +} + +bool AdBlockRule::match(const QUrl& requestUrl) const +{ + switch(matchType) { + case FilterLeaf::StringContains: + return requestUrl.toString().contains(m_request); + default: + return false; + } +} + +FilterLeaf::Action AdBlockRule::action() const +{ + return m_isBlocking ? FilterLeaf::Block : FilterLeaf::Allow; +} diff --git a/lib/urlfilter/formats/adblockrule.h b/lib/urlfilter/formats/adblockrule.h index 0f0873c..da7e4fc 100644 --- a/lib/urlfilter/formats/adblockrule.h +++ b/lib/urlfilter/formats/adblockrule.h @@ -15,10 +15,11 @@ class AdBlockRule : public FilterLeaf { public: -// explicit AdBlockRule(const QString &filter); + explicit AdBlockRule(FilterLeaf::UrlMatchType matchType, const QString &filter, FilterLeaf::Action action); + void mergeOptions(const QHash &options); -// bool match(const QUrl &requestUrl) const override; -// FilterLeaf::Action action() const override; + bool match(const QUrl &requestUrl) const override; + FilterLeaf::Action action() const override; }; std::optional> parseOption(const QString &option); -- cgit v1.2.1