/** LICENSE ******************************************************************** ** ** smolbote: yet another qute browser ** Copyright (C) 2017 Xian Nox ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . ** ******************************************************************************/ #include "blockerrule.h" /* AdBlock filter reference * https://adblockplus.org/en/filters * https://adblockplus.org/en/filter-cheatsheet */ BlockerRule::BlockerRule(QString rule, QObject *parent) : QObject(parent) { QString pattern = rule; // Empty rule or comment if(pattern.trimmed().isEmpty() || pattern.startsWith("!")) { m_type = RuleType::Invalid; return; } // Exception if(pattern.startsWith("@@")) { m_exception = true; pattern = pattern.remove(0, 2); } // Domain if(pattern.startsWith("||")) { m_type = RuleType::DomainMatch; m_domain = pattern.mid(2, pattern.indexOf("^")-2); return; } // Regular expression if(rule.startsWith("/") && rule.endsWith("/")) { m_type = RuleType::RegularExpressionMatch; ruleExpression.setPattern(pattern); return; } // Regular rule ruleExpression.setPattern(fromWildcardMatch(pattern)); m_type = RuleType::WildcardMatch; } QString BlockerRule::pattern() const { return ruleExpression.pattern(); } QString BlockerRule::domain() const { return m_domain; } bool BlockerRule::match(const QUrl &url) { return ruleExpression.match(url.toString()).hasMatch(); } bool BlockerRule::isValid() { if(m_type == RuleType::Invalid) { return false; } else { return true; } } bool BlockerRule::isException() { return m_exception; } QString BlockerRule::fromWildcardMatch(const QString &pattern) { QString parsed; for(int i=0; i