diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-12-11 18:16:50 +0100 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-12-11 18:16:50 +0100 |
commit | e25c011d5db32104ccdb3e8949082345efdba805 (patch) | |
tree | fb1892f8ae292a088638abaf158d086216106ad2 /src/filter/filter.cpp | |
parent | Fixed new window action (diff) | |
download | smolbote-e25c011d5db32104ccdb3e8949082345efdba805.tar.xz |
Simple filterlist
Diffstat (limited to 'src/filter/filter.cpp')
-rw-r--r-- | src/filter/filter.cpp | 212 |
1 files changed, 10 insertions, 202 deletions
diff --git a/src/filter/filter.cpp b/src/filter/filter.cpp index fcba05c..1d14f9d 100644 --- a/src/filter/filter.cpp +++ b/src/filter/filter.cpp @@ -19,220 +19,28 @@ ******************************************************************************/ #include "filter.h" +#include <QUrl> -Filter::Filter(const QString &domain, const QString &request, ResourceRules rules, bool shouldBlock, Filter *parentItem) +FilterRule::FilterRule(const QString &line) { - m_parentItem = parentItem; - - m_domainUrl.setPattern(domain); - m_requestUrl.setPattern(request); - m_rules = rules; - m_shouldBlock = shouldBlock; - - m_valid = false; -} - -Filter::~Filter() -{ - qDeleteAll(m_children); + parse(line); } -void Filter::enable() +FilterRule::~FilterRule() { - m_valid = true; -} - -Filter *Filter::parentItem() -{ - return m_parentItem; -} - -void Filter::appendChild(Filter *child) -{ - m_children.append(child); -} - -Filter *Filter::child(int row) -{ - return m_children.value(row); -} - -int Filter::childCount() const -{ - return m_children.count(); -} - -QString Filter::domain() const -{ - return m_domainUrl.pattern(); -} - -QString Filter::request() const -{ - return m_requestUrl.pattern(); -} - -bool Filter::isBlocking() -{ - return m_shouldBlock; -} - -QString Filter::allowedTypes() const -{ - return flags(m_rules.allowed); -} - -QString Filter::blockedTypes() const -{ - return flags(m_rules.blocked); -} - -int Filter::row() const -{ - if(m_parentItem) { - return m_parentItem->m_children.indexOf(const_cast<Filter*>(this)); - } - - return 0; } -bool Filter::hasDomainMatch(const QString &string) +bool FilterRule::shouldBlock(const QUrl &requestUrl) const { - return m_domainUrl.hasMatch(string); -} - -bool Filter::hasRuleMatch(const QString &string) -{ - return m_requestUrl.hasMatch(string); -} - -bool Filter::shouldBlock(const QWebEngineUrlRequestInfo &info) -{ - if(!m_valid) { + if(matcher.indexIn(requestUrl.toString()) == -1) { + // pattern not found in url return false; } - // Check options - switch (info.resourceType()) { - case QWebEngineUrlRequestInfo::ResourceTypeMainFrame: - return testFlag(MainFrame); - case QWebEngineUrlRequestInfo::ResourceTypeSubFrame: - return testFlag(SubFrame); - case QWebEngineUrlRequestInfo::ResourceTypeStylesheet: - return testFlag(Stylesheet); - case QWebEngineUrlRequestInfo::ResourceTypeScript: - return testFlag(Script); - case QWebEngineUrlRequestInfo::ResourceTypeImage: - return testFlag(Image); - case QWebEngineUrlRequestInfo::ResourceTypeFontResource: - return testFlag(Font); - case QWebEngineUrlRequestInfo::ResourceTypeSubResource: - return testFlag(SubResource); - case QWebEngineUrlRequestInfo::ResourceTypeObject: - return testFlag(Object); - case QWebEngineUrlRequestInfo::ResourceTypeMedia: - return testFlag(Media); - case QWebEngineUrlRequestInfo::ResourceTypeWorker: - return testFlag(Worker); - case QWebEngineUrlRequestInfo::ResourceTypeSharedWorker: - return testFlag(SharedWorker); - case QWebEngineUrlRequestInfo::ResourceTypePrefetch: - return testFlag(Prefetch); - case QWebEngineUrlRequestInfo::ResourceTypeFavicon: - return testFlag(Favicon); - case QWebEngineUrlRequestInfo::ResourceTypeXhr: - return testFlag(Xhr); - case QWebEngineUrlRequestInfo::ResourceTypePing: - return testFlag(Ping); - case QWebEngineUrlRequestInfo::ResourceTypeServiceWorker: - return testFlag(ServiceWorker); - case QWebEngineUrlRequestInfo::ResourceTypeCspReport: - return testFlag(CspReport); - case QWebEngineUrlRequestInfo::ResourceTypePluginResource: - return testFlag(PluginResource); - case QWebEngineUrlRequestInfo::ResourceTypeUnknown: - break; - } - - return m_shouldBlock; - + return true; } -bool Filter::isValid() +void FilterRule::parse(const QString &line) { - return m_valid; -} - -bool Filter::testFlag(ResourceType flag) -{ - if(m_rules.allowed.testFlag(flag)) { - return false; - } else if(m_rules.blocked.testFlag(flag)) { - return true; - } else { - return m_shouldBlock; - } -} - -QString Filter::flags(Resources f) const -{ - QStringList r; - if(f.testFlag(MainFrame)) { - r << QObject::tr("Main Frame"); - } - if(f.testFlag(SubFrame)) { - r << QObject::tr("Sub Frame"); - } - if(f.testFlag(Stylesheet)) { - r << QObject::tr("Stylesheet"); - } - if(f.testFlag(Script)) { - r << QObject::tr("Script"); - } - if(f.testFlag(Image)) { - r << QObject::tr("Image"); - } - if(f.testFlag(Font)) { - r << QObject::tr("Font"); - } - if(f.testFlag(SubResource)) { - r << QObject::tr("Sub Resource"); - } - if(f.testFlag(Object)) { - r << QObject::tr("Object"); - } - if(f.testFlag(Media)) { - r << QObject::tr("Media"); - } - if(f.testFlag(Worker)) { - r << QObject::tr("Worker"); - } - if(f.testFlag(SharedWorker)) { - r << QObject::tr("Shared Worker"); - } - if(f.testFlag(Prefetch)) { - r << QObject::tr("Prefetch"); - } - if(f.testFlag(Favicon)) { - r << QObject::tr("Favicon"); - } - if(f.testFlag(Xhr)) { - r << QObject::tr("Xhr"); - } - if(f.testFlag(Ping)) { - r << QObject::tr("Ping"); - } - if(f.testFlag(ServiceWorker)) { - r << QObject::tr("Service Worker"); - } - if(f.testFlag(CspReport)) { - r << QObject::tr("Csp Report"); - } - if(f.testFlag(PluginResource)) { - r << QObject::tr("Plugin Resource"); - } - if(f.testFlag(Unknown)) { - r << QObject::tr("Unknown"); - } - return r.join(','); + matcher.setPattern(line); } |