From 6776fed33f64e3c2464cef4b9af0f7a868e89257 Mon Sep 17 00:00:00 2001 From: emizzle Date: Wed, 16 Dec 2020 21:49:27 +1100 Subject: [PATCH] feat: add QNetworkAccessManager and clearConnectionCache feat: change QNetworkAccessManager to DosQObject --- src/nimqml/private/dotherside.nim | 7 +++++++ src/nimqml/private/nimqmltypes.nim | 7 +++++++ .../private/qnetworkconfigurationmanager.nim | 19 +++++++++++++++++++ src/nimqml/private/qqmlapplicationengine.nim | 3 +++ 4 files changed, 36 insertions(+) diff --git a/src/nimqml/private/dotherside.nim b/src/nimqml/private/dotherside.nim index b19dcc0..98eae66 100644 --- a/src/nimqml/private/dotherside.nim +++ b/src/nimqml/private/dotherside.nim @@ -17,6 +17,7 @@ type DosQMetaObject = distinct pointer DosQObject = distinct pointer DosQQNetworkAccessManagerFactory = pointer + DosQQNetworkAccessManager = distinct DosQObject DosQObjectWrapper = distinct pointer DosQVariant = distinct pointer DosQQmlContext = distinct pointer @@ -146,6 +147,7 @@ proc dos_qqmlcontext_setcontextproperty(context: DosQQmlContext, propertyName: c # QQmlApplicationEngine proc dos_qqmlapplicationengine_create(): DosQQmlApplicationEngine {.cdecl, dynlib: dynLibName, importc.} +proc dos_qqmlapplicationengine_getNetworkAccessManager(engine: DosQQmlApplicationEngine): DosQQNetworkAccessManager {.cdecl, dynlib: dynLibName, importc.} proc dos_qqmlapplicationengine_setNetworkAccessManagerFactory(engine: DosQQmlApplicationEngine, factory: DosQQNetworkAccessManagerFactory) {.cdecl, dynlib: dynLibName, importc.} proc dos_qqmlapplicationengine_load(engine: DosQQmlApplicationEngine, filename: cstring) {.cdecl, dynlib: dynLibName, importc.} proc dos_qqmlapplicationengine_load_url(engine: DosQQmlApplicationEngine, url: DosQUrl) {.cdecl, dynlib: dynLibName, importc.} @@ -211,8 +213,13 @@ proc dos_qurl_to_string(vptr: DosQUrl): cstring {.cdecl, dynlib: dynLibName, imp proc dos_qncm_create(): DosQObject {.cdecl, dynlib: dynLibName, importc.} proc dos_qncm_delete(vptr: DosQObject) {.cdecl, dynlib: dynLibName, importc.} +# QNetworkAccessManagerFactory proc dos_qqmlnetworkaccessmanagerfactory_create(tmpPath: cstring): DosQQNetworkAccessManagerFactory {.cdecl, dynlib: dynLibName, importc.} +# QNetworkAccessManager +proc dos_qqmlnetworkaccessmanager_clearconnectioncache(vptr: DosQQNetworkAccessManager) {.cdecl, dynlib: dynLibName, importc.} +proc dos_qqmlnetworkaccessmanager_setnetworkaccessible(vptr: DosQQNetworkAccessManager, accessible: cint) {.cdecl, dynlib: dynLibName, importc.} + # QQuickView proc dos_qquickview_create(): DosQQuickView {.cdecl, dynlib: dynLibName, importc.} proc dos_qquickview_delete(view: DosQQuickView) {.cdecl, dynlib: dynLibName, importc.} diff --git a/src/nimqml/private/nimqmltypes.nim b/src/nimqml/private/nimqmltypes.nim index 1c0dec5..5950a7c 100644 --- a/src/nimqml/private/nimqmltypes.nim +++ b/src/nimqml/private/nimqmltypes.nim @@ -114,6 +114,13 @@ type QNetworkAccessManagerFactory* = ref object of RootObj ## \ vptr: DosQQNetworkAccessManagerFactory + QNetworkAccessManager* = ref object of QObject ## \ + + NetworkAccessibility*{.pure, size: sizeof(cint).} = enum ## \ + UnknownAccessibility = -1.cint, + NotAccessible = 0.cint, + Accessible = 1.cint + QUrlParsingMode*{.pure, size: sizeof(cint).} = enum Tolerant = 0.cint Strict = 1.cint diff --git a/src/nimqml/private/qnetworkconfigurationmanager.nim b/src/nimqml/private/qnetworkconfigurationmanager.nim index b260707..33d0c04 100644 --- a/src/nimqml/private/qnetworkconfigurationmanager.nim +++ b/src/nimqml/private/qnetworkconfigurationmanager.nim @@ -26,3 +26,22 @@ proc newQNetworkAccessManagerFactory*(tmpPath: string): QNetworkAccessManagerFac new(result, delete) result.setup(tmpPath) +proc setup*(self: QNetworkAccessManager, vptr: DosQQNetworkAccessManager) = + self.vptr = DosQObject(vptr) + +proc delete*(self: QNetworkAccessManager) = + if self.vptr.isNil: + return + self.vptr.resetToNil + +proc newQNetworkAccessManager*(vptr: DosQQNetworkAccessManager): QNetworkAccessManager = + new(result, delete) + result.setup(vptr) + +proc clearConnectionCache*(self: QNetworkAccessManager) = + dos_qqmlnetworkaccessmanager_clearconnectioncache(DosQQNetworkAccessManager(self.vptr)) + +proc setNetworkAccessible*(self: QNetworkAccessManager, accessibility: NetworkAccessibility) = + debugEcho ">>> [nimqml/private/qnetworkconfigurationmanager.setNetworkAccessible] manually setting network accessibility to: ", $accessibility + dos_qqmlnetworkaccessmanager_setnetworkaccessible(DosQQNetworkAccessManager(self.vptr), accessibility.cint) + diff --git a/src/nimqml/private/qqmlapplicationengine.nim b/src/nimqml/private/qqmlapplicationengine.nim index 1f35cae..3247a78 100644 --- a/src/nimqml/private/qqmlapplicationengine.nim +++ b/src/nimqml/private/qqmlapplicationengine.nim @@ -14,6 +14,9 @@ proc load*(self: QQmlApplicationEngine, url: QUrl) = ## Load the given Qml file dos_qqmlapplicationengine_load_url(self.vptr, url.vptr) +proc getNetworkAccessManager*(self: QQmlApplicationEngine): DosQQNetworkAccessManager = + dos_qqmlapplicationengine_getNetworkAccessManager(self.vptr) + proc setNetworkAccessManagerFactory*(self: QQmlApplicationEngine, factory: QNetworkAccessManagerFactory) = dos_qqmlapplicationengine_setNetworkAccessManagerFactory(self.vptr, factory.vptr)