diff options
Diffstat (limited to 'staging/smolblok/filtermanager.hpp')
-rw-r--r-- | staging/smolblok/filtermanager.hpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/staging/smolblok/filtermanager.hpp b/staging/smolblok/filtermanager.hpp new file mode 100644 index 0000000..2003d76 --- /dev/null +++ b/staging/smolblok/filtermanager.hpp @@ -0,0 +1,55 @@ +#pragma once + +#include <QSettings> +#include <QWebEngineUrlRequestInterceptor> +#include <smolbote/filterinterface.hpp> + +class FilterManager : public QWebEngineUrlRequestInterceptor +{ +public: + FilterManager(QObject *parent = nullptr) + : QWebEngineUrlRequestInterceptor(parent) + { + } + ~FilterManager() + { + qDeleteAll(filters); + } + + auto installSubscriptions(const QString &filename) + { + struct { + bool success = true; + } ret; + + QSettings listconf(filename, QSettings::IniFormat); + + for(const auto &group : listconf.childGroups()) { + listconf.beginGroup(group); + auto *r = addSubscription(listconf.value("File").toString(), listconf.value("Href").toString()); + if(r != nullptr) { + filters.append(r); + } else { + ret.success = false; + } + listconf.endGroup(); + } + + return ret; + } + + void interceptRequest(QWebEngineUrlRequestInfo &info) override + { + for(const auto *filter : filters) { + if(filter->filter(info)) { + return; + } + } + } + +protected: + static Filter *addSubscription(const QString &filename, const QUrl &url); + +private: + QList<Filter *> filters; +}; |