aboutsummaryrefslogtreecommitdiff
path: root/staging/smolblok/filtermanager.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'staging/smolblok/filtermanager.hpp')
-rw-r--r--staging/smolblok/filtermanager.hpp55
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;
+};