diff --git a/src/nimqml.nim b/src/nimqml.nim index d936b16..52eb06d 100644 --- a/src/nimqml.nim +++ b/src/nimqml.nim @@ -36,7 +36,7 @@ include "nimqml/private/nimqmlmacros.nim" include "nimqml/private/singleinstance.nim" include "nimqml/private/status/statusevent.nim" include "nimqml/private/status/statusosnotification.nim" - +include "nimqml/private/status/statuskeychainmanager.nim" proc signal_handler*(receiver: pointer, signal: cstring, slot: cstring) = var dosqobj = cast[DosQObject](receiver) diff --git a/src/nimqml/private/dotherside.nim b/src/nimqml/private/dotherside.nim index aa611c3..099d1cb 100644 --- a/src/nimqml/private/dotherside.nim +++ b/src/nimqml/private/dotherside.nim @@ -35,6 +35,7 @@ type DosStatusEvent = distinct pointer DosStatusOSNotification = DosQObject DosQSettings = DosQObject + DosStatusKeychainManager = DosQObject DosParameterDefinition = object name: cstring @@ -371,6 +372,21 @@ proc dos_qsettings_remove(vptr: DosQSettings, key: cstring) proc dos_qsettings_delete(vptr: DosQSettings) {.cdecl, dynlib: dynLibName, importc.} +# DosStatusKeychainManager +proc dos_keychainmanager_create(service: cstring, authenticationReason: cstring): + DosStatusKeychainManager + {.cdecl, dynlib: dynLibName, importc.} +proc dos_keychainmanager_read_data_sync(vptr: DosStatusKeychainManager, + key: cstring): string {.cdecl, dynlib: dynLibName, importc.} +proc dos_keychainmanager_read_data_async(vptr: DosStatusKeychainManager, + key: cstring) {.cdecl, dynlib: dynLibName, importc.} +proc dos_keychainmanager_store_data_async(vptr: DosStatusKeychainManager, + key: cstring, data: cstring) {.cdecl, dynlib: dynLibName, importc.} +proc dos_keychainmanager_delete_data_async(vptr: DosStatusKeychainManager, + key: cstring) {.cdecl, dynlib: dynLibName, importc.} +proc dos_keychainmanager_delete(vptr: DosStatusKeychainManager) + {.cdecl, dynlib: dynLibName, importc.} + proc dos_to_local_file(fileUrl: cstring): cstring {.cdecl, dynlib: dynLibName, importc.} diff --git a/src/nimqml/private/nimqmltypes.nim b/src/nimqml/private/nimqmltypes.nim index ef03fae..8b0036c 100644 --- a/src/nimqml/private/nimqmltypes.nim +++ b/src/nimqml/private/nimqmltypes.nim @@ -140,7 +140,7 @@ type StatusOSNotification* = ref object of QObject - StatusOSNotificationObject* = ref object of QObject + StatusKeychainManager* = ref object of QObject const UserRole* = 0x100 diff --git a/src/nimqml/private/status/statuskeychainmanager.nim b/src/nimqml/private/status/statuskeychainmanager.nim new file mode 100644 index 0000000..fb57ad3 --- /dev/null +++ b/src/nimqml/private/status/statuskeychainmanager.nim @@ -0,0 +1,24 @@ +proc setup(self: StatusKeychainManager, service: string, + authenticationReason: string) = + self.vptr = dos_keychainmanager_create(service, authenticationReason) + +proc delete*(self: StatusKeychainManager) = + dos_keychainmanager_delete(self.vptr) + self.vptr.resetToNil + +proc newStatusKeychainManager*(service: string, + authenticationReason: string): StatusKeychainManager = + new(result, delete) + result.setup(service, authenticationReason) + +proc readDataSync*(self: StatusKeychainManager, key: string): string = + return dos_keychainmanager_read_data_sync(self.vptr, key) + +proc readDataAsync*(self: StatusKeychainManager, key: string) = + dos_keychainmanager_read_data_async(self.vptr, key) + +proc storeDataAsync*(self: StatusKeychainManager, key: string, data: string) = + dos_keychainmanager_store_data_async(self.vptr, key, data) + +proc deleteDataAsync*(self: StatusKeychainManager, key: string) = + dos_keychainmanager_delete_data_async(self.vptr, key) \ No newline at end of file