set network access manager factory for qml

pull/271/head
larteyoh 2 weeks ago
parent 198f86cae9
commit 633fc9fba8

@ -122,6 +122,7 @@ int main(int argc, char *argv[])
engine.rootContext()->setContextProperty("DaemonManager", daemonManager);
ProxyManager * proxyManager = new ProxyManager(&engine);
engine.rootContext()->setContextProperty("ProxyManager", proxyManager);
engine.setNetworkAccessManagerFactory(proxyManager);
// we can also register an instance of a class instead of the class itself
WalletController *wallet = new WalletController(&engine);
engine.rootContext()->setContextProperty("Wallet", wallet);//new WalletController());//qmlRegisterUncreatableType<WalletProxy>("neroshop.Wallet", 1, 0, "Wallet", "Wallet cannot be instantiated directly.");//qmlRegisterType<WalletProxy>("neroshop.Wallet", 1, 0, "Wallet"); // Usage: import neroshop.Wallet ... Wallet { id: wallet }

@ -1,6 +1,7 @@
#include "proxy_manager.hpp"
#include <QFile>
#include <QNetworkDiskCache>
#include <QNetworkProxy>
#include <QNetworkProxyFactory>
#include <QNetworkProxyQuery>
@ -37,6 +38,24 @@ neroshop::ProxyManager::ProxyManager(QObject* parent) : QObject(parent), m_torEn
neroshop::ProxyManager::~ProxyManager() {}
QNetworkAccessManager * neroshop::ProxyManager::create(QObject *parent) {
QNetworkAccessManager *networkAccessManager = new QNetworkAccessManager(parent);
QNetworkDiskCache *diskCache = new QNetworkDiskCache(parent);
diskCache->setCacheDirectory("requestCache");
networkAccessManager->setCache(diskCache);
if(hasTor() || isTorRunning()) {
QNetworkProxy torProxy;
torProxy.setType(QNetworkProxy::Socks5Proxy);
torProxy.setHostName("127.0.0.1");
torProxy.setPort(9050);
networkAccessManager->setProxy(torProxy);
// Standard QML components like Image or XmlHttpRequest can now make network requests over Tor
}
return networkAccessManager;
}
void neroshop::ProxyManager::useDefaultProxy() {
QNetworkProxy::setApplicationProxy(QNetworkProxy());
@ -330,6 +349,8 @@ void neroshop::ProxyManager::onReplyFinished(QNetworkReply * reply) {
// Reply received successfully
QByteArray data = reply->readAll();
////qDebug() << "Data received:" << data;
QVariant fromCache = reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute);
qDebug() << "page from cache?" << fromCache.toBool();
} else {
// Error occurred
qDebug() << "Network error: " << reply->errorString();

@ -5,12 +5,13 @@
#include <QObject>
#include <QNetworkAccessManager>
#include <QQmlNetworkAccessManagerFactory>
#include <QNetworkReply>
#include <QProcess>
namespace neroshop {
class ProxyManager : public QObject {
class ProxyManager : public QObject, public QQmlNetworkAccessManagerFactory {
Q_OBJECT
Q_PROPERTY(bool torEnabled READ isTorEnabled NOTIFY networkProxyChanged)
Q_PROPERTY(QString torOutput READ getTorOutput NOTIFY torOutputChanged)
@ -18,6 +19,8 @@ public:
ProxyManager(QObject *parent = nullptr);
~ProxyManager();
QNetworkAccessManager * create(QObject *parent) override;
Q_INVOKABLE void useDefaultProxy();
Q_INVOKABLE void useTorProxy();
Q_INVOKABLE void useI2PProxy();

Loading…
Cancel
Save