[multimedia/kasts] src: Centralize app-wide network settings into one object

Bart De Vries <[email protected]> Tue, 4 Aug 2026 12:39:01 +0000 (UTC)
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 467ddac858d68d23201bba83a81d6ed7dcd3abda by Bart De Vries.
Committed on 04/08/2026 at 12:09.
Pushed by bdevries into branch 'master'.

Centralize app-wide network settings into one object

And then of course, use this NetworkAccessManager object everywhere
where needed.

M  +1    -0    src/CMakeLists.txt
M  +1    -16   src/main.cpp
M  +10   -11   src/utils/networkaccessmanager.cpp
M  +4    -8    src/utils/networkaccessmanager.h
A  +27   -0    src/utils/networkaccessmanagerfactory.cpp     [License: GPL(3+eV) GPL(v3.0) GPL(v2.0)]
A  +17   -0    src/utils/networkaccessmanagerfactory.h     [License: GPL(3+eV) GPL(v3.0) GPL(v2.0)]

https://invent.kde.org/multimedia/kasts/-/commit/467ddac858d68d23201bba83a81d6ed7dcd3abda

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c2f3bf20..2bc67cdc 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -23,6 +23,7 @@ add_executable(kasts
     utils/fetchfeedsjob.cpp
     utils/systrayicon.cpp
     utils/networkaccessmanager.cpp
+    utils/networkaccessmanagerfactory.cpp
     utils/networkconnectionmanager.cpp
     utils/colorschemer.cpp
     utils/utils.cpp
diff --git a/src/main.cpp b/src/main.cpp
index 6e1c7955..66a0c9ba 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -23,7 +23,6 @@
 #include <QStringList>
 #include <QSysInfo>
 #include <QVariant>
-#include <klocalizedqmlcontext.h>
 
 #ifdef Q_OS_ANDROID
 #include <QGuiApplication>
@@ -57,6 +56,7 @@
 #include "kasts-version.h"
 #include "settingsmanager.h"
 #include "utils/colorschemer.h"
+#include "utils/networkaccessmanagerfactory.h"
 
 #ifdef Q_OS_WINDOWS
 #include <windows.h>
@@ -66,21 +66,6 @@
 Q_DECL_EXPORT
 #endif
 
-class NetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory
-{
-public:
-    QNetworkAccessManager *create(QObject *parent) override
-    {
-        QNetworkAccessManager *manager = new QNetworkAccessManager(parent);
-        auto cache = new QNetworkDiskCache(manager);
-        QString directory = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1StringView("/cacheDir/");
-        cache->setCacheDirectory(directory);
-        cache->setMaximumCacheSize(500 * 1024 * 1024);
-        manager->setCache(cache);
-        return manager;
-    }
-};
-
 int main(int argc, char *argv[])
 {
     // Check if we need to force the interface to mobile or desktop, or stick
diff --git a/src/utils/networkaccessmanager.cpp b/src/utils/networkaccessmanager.cpp
index a0e03ab8..09fa577f 100644
--- a/src/utils/networkaccessmanager.cpp
+++ b/src/utils/networkaccessmanager.cpp
@@ -13,33 +13,32 @@
 #include "kasts-version.h"
 
 NetworkAccessManager::NetworkAccessManager(QObject *parent)
-    : QObject(parent)
+    : QNetworkAccessManager(parent)
 {
-    m_manager = new QNetworkAccessManager(this);
-    m_manager->setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);
-    m_manager->setStrictTransportSecurityEnabled(true);
+    this->setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);
+    this->setStrictTransportSecurityEnabled(true);
     // HACK TODO: Disable hstsstore temporarily because of malloc crash deep in
     // qt6 somewhere.  This is to be reenabled once the bug is solved upstream
-    m_manager->enableStrictTransportSecurityStore(false);
+    this->enableStrictTransportSecurityStore(false);
 }
 
-QNetworkReply *NetworkAccessManager::get(QNetworkRequest &request) const
+QNetworkReply *NetworkAccessManager::get(QNetworkRequest &request)
 {
     setHeader(request);
-    return m_manager->get(request);
+    return QNetworkAccessManager::get(request);
 }
 
-QNetworkReply *NetworkAccessManager::post(QNetworkRequest &request, const QByteArray &data) const
+QNetworkReply *NetworkAccessManager::post(QNetworkRequest &request, const QByteArray &data)
 {
     setHeader(request);
     request.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("application/json"));
-    return m_manager->post(request, data);
+    return QNetworkAccessManager::post(request, data);
 }
 
-QNetworkReply *NetworkAccessManager::head(QNetworkRequest &request) const
+QNetworkReply *NetworkAccessManager::head(QNetworkRequest &request)
 {
     setHeader(request);
-    return m_manager->head(request);
+    return QNetworkAccessManager::head(request);
 }
 
 void NetworkAccessManager::setHeader(QNetworkRequest &request) const
diff --git a/src/utils/networkaccessmanager.h b/src/utils/networkaccessmanager.h
index 5586c94b..04a4f9c0 100644
--- a/src/utils/networkaccessmanager.h
+++ b/src/utils/networkaccessmanager.h
@@ -11,21 +11,17 @@
 #include <QNetworkRequest>
 #include <QObject>
 
-class NetworkAccessManager : public QObject
+class NetworkAccessManager : public QNetworkAccessManager
 {
     Q_OBJECT
 
 public:
     NetworkAccessManager(QObject *parent = nullptr);
 
-    QNetworkReply *get(QNetworkRequest &request) const;
-    QNetworkReply *post(QNetworkRequest &request, const QByteArray &data) const;
-    QNetworkReply *head(QNetworkRequest &request) const;
-
-Q_SIGNALS:
+    QNetworkReply *get(QNetworkRequest &request);
+    QNetworkReply *post(QNetworkRequest &request, const QByteArray &data);
+    QNetworkReply *head(QNetworkRequest &request);
 
 private:
     void setHeader(QNetworkRequest &request) const;
-
-    QNetworkAccessManager *m_manager;
 };
diff --git a/src/utils/networkaccessmanagerfactory.cpp b/src/utils/networkaccessmanagerfactory.cpp
new file mode 100644
index 00000000..dcfa43e5
--- /dev/null
+++ b/src/utils/networkaccessmanagerfactory.cpp
@@ -0,0 +1,27 @@
+/**
+ * SPDX-FileCopyrightText: 2026 Tobias Fella <[email protected]>
+ * SPDX-FileCopyrightText: 2026 Bart De Vries <[email protected]>
+ *
+ * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+ */
+
+#include "utils/networkaccessmanagerfactory.h"
+
+#include <QNetworkAccessManager>
+#include <QNetworkDiskCache>
+#include <QQmlNetworkAccessManagerFactory>
+#include <QStandardPaths>
+
+#include "utils/networkaccessmanager.h"
+#include "utils/storagemanager.h"
+
+QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent)
+{
+    QNetworkAccessManager *manager = new NetworkAccessManager(parent);
+    auto cache = new QNetworkDiskCache(manager);
+    QString directory = StorageManager::instance().imageDirPath();
+    cache->setCacheDirectory(directory);
+    cache->setMaximumCacheSize(500 * 1024 * 1024);
+    manager->setCache(cache);
+    return manager;
+}
diff --git a/src/utils/networkaccessmanagerfactory.h b/src/utils/networkaccessmanagerfactory.h
new file mode 100644
index 00000000..4f1a3f9c
--- /dev/null
+++ b/src/utils/networkaccessmanagerfactory.h
@@ -0,0 +1,17 @@
+/**
+ * SPDX-FileCopyrightText: 2026 Tobias Fella <[email protected]>
+ * SPDX-FileCopyrightText: 2026 Bart De Vries <[email protected]>
+ *
+ * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+ */
+
+#pragma once
+
+#include <QNetworkAccessManager>
+#include <QQmlNetworkAccessManagerFactory>
+
+class NetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory
+{
+public:
+    QNetworkAccessManager *create(QObject *parent) override;
+};