From c0dfb6370edac2eaff08511b9287e13ddeb771b7 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Sat, 24 Jan 2026 16:39:56 +0000 Subject: [PATCH] kind of working! --- lib/controllers/client_controller.dart | 12 ++++++++---- lib/helpers/extensions/gomuks_buffer.dart | 19 +++++++++--------- lib/main.dart | 24 ++++++++++++----------- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/lib/controllers/client_controller.dart b/lib/controllers/client_controller.dart index d91fd5e..0ecf2cb 100644 --- a/lib/controllers/client_controller.dart +++ b/lib/controllers/client_controller.dart @@ -37,21 +37,25 @@ class ClientController extends Notifier { GomuksStart( handle, - Pointer.fromFunction< - Void Function(Pointer, Int64, GomuksBorrowedBuffer) - >(gomuksCallback), + NativeCallable< + Void Function(Pointer, Int64, GomuksBorrowedBuffer) + >.listener(gomuksCallback) + .nativeFunction, ); return handle; } Map sendCommand(String command, Map data) { + final bufferPointer = data.toGomuksBufferPtr(); final response = GomuksSubmitCommand( state, command.toNativeUtf8().cast(), - data.toGomuksBuffer(), + bufferPointer.ref, ); + calloc.free(bufferPointer); + return response.buf.toJson(); } diff --git a/lib/helpers/extensions/gomuks_buffer.dart b/lib/helpers/extensions/gomuks_buffer.dart index 48fc5d9..bfae939 100644 --- a/lib/helpers/extensions/gomuks_buffer.dart +++ b/lib/helpers/extensions/gomuks_buffer.dart @@ -31,26 +31,27 @@ extension GomuksOwnedBufferToJson on GomuksOwnedBuffer { Map toJson() { final bytes = toBytes(); if (bytes.isEmpty) return {}; - return jsonDecode(utf8.decode(bytes)); + final json = jsonDecode(utf8.decode(bytes)); + + if (json is Map?) return json ?? {}; + throw json; } } extension JsonToGomuksBuffer on Map { - GomuksBorrowedBuffer toGomuksBuffer() { + Pointer toGomuksBufferPtr() { final jsonString = json.encode(this); final bytes = utf8.encode(jsonString); final dataPtr = calloc(bytes.length); dataPtr.asTypedList(bytes.length).setAll(0, bytes); - final bufPtr = calloc(); - bufPtr.ref.base = dataPtr; - bufPtr.ref.length = bytes.length; + final ptr = calloc(); - final bufByValue = bufPtr.ref; + ptr.ref + ..base = dataPtr + ..length = bytes.length; - calloc.free(bufPtr); - - return bufByValue; + return ptr; } } diff --git a/lib/main.dart b/lib/main.dart index d0cc6fa..eaccbfb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -97,17 +97,19 @@ class App extends ConsumerWidget { builder: (context) => ref .watch(SharedPrefsController.provider) .betterWhen( - data: (_) { - final response = ref - .watch(ClientController.provider.notifier) - .sendCommand("login", { - "homeserver_url": "federated.nexus", - "username": "quadradical", - "password": "Quadmarad1!", - }); - - return Text(response.toString()); - }, + data: (_) => ElevatedButton( + onPressed: () async { + final response = ref + .watch(ClientController.provider.notifier) + .sendCommand("login", { + "homeserver_url": "https://matrix.federated.nexus", + "username": "quadradical", + "password": "Quadfnrad1!", + }); + print(response); + }, + child: Text("foo"), + ), // .betterWhen( // data: (client) => // client.accessToken == null ? LoginPage() : ChatPage(),