From d1c4a69b40f5feca71b95c5ff4472a429c8cbacb Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Sat, 24 Jan 2026 14:50:07 +0000 Subject: [PATCH] working build --- .gitignore | 2 +- flake.nix | 2 +- hook/build.dart | 23 +++++----- lib/controllers/client_controller.dart | 15 +++---- lib/helpers/extensions/gomuks_buffer.dart | 53 +++++++++++++++-------- lib/main.dart | 3 +- scripts/generate.dart | 2 +- 7 files changed, 60 insertions(+), 40 deletions(-) diff --git a/.gitignore b/.gitignore index 747b159..757aeea 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,7 @@ key.properties # Generated Files *.g.dart *.freezed.dart -/rust/ +/src/ # Devel Password password.txt \ No newline at end of file diff --git a/flake.nix b/flake.nix index a79d6b8..7424c83 100644 --- a/flake.nix +++ b/flake.nix @@ -62,7 +62,7 @@ pkgs.lib.makeLibraryPath ([ pkgs.sqlite ]) - }:./.dart_tool/hooks_runner/shared/nexus/build/gomuks"; + }:./build/native_assets/linux"; CPATH = lib.makeSearchPath "include" [ pkgs.glibc.dev ]; # ANDROID_HOME = "${android.androidsdk}/libexec/android-sdk"; diff --git a/hook/build.dart b/hook/build.dart index 88e8fb2..6ebc80e 100644 --- a/hook/build.dart +++ b/hook/build.dart @@ -3,7 +3,7 @@ import "package:hooks/hooks.dart"; import "package:code_assets/code_assets.dart"; Future main(List args) => build(args, (input, output) async { - final buildDir = input.packageRoot.resolve("build/"); + final buildDir = input.packageRoot.resolve("src/"); if (await File(buildDir.resolve("lock").toFilePath()).exists()) return; final targetOS = input.config.code.targetOS; @@ -38,13 +38,16 @@ Future main(List args) => build(args, (input, output) async { } final generatedFile = "src/third_party/gomuks.g.dart"; - output.assets.code.add( - CodeAsset( - package: "nexus", - name: generatedFile, - linkMode: DynamicLoadingBundled(), - file: libFile, - ), - ); - output.dependencies.add(input.packageRoot.resolve("lib/$generatedFile")); + print("Adding $libFileName as asset..."); + output + ..assets.code.add( + CodeAsset( + package: "nexus", + name: generatedFile, + linkMode: DynamicLoadingBundled(), + file: libFile, + ), + ) + ..dependencies.add(libFile); + print("Done!"); }); diff --git a/lib/controllers/client_controller.dart b/lib/controllers/client_controller.dart index 78d2058..d91fd5e 100644 --- a/lib/controllers/client_controller.dart +++ b/lib/controllers/client_controller.dart @@ -1,4 +1,3 @@ -import "dart:convert"; import "dart:ffi"; import "package:ffi/ffi.dart"; import "package:flutter/foundation.dart"; @@ -46,14 +45,14 @@ class ClientController extends Notifier { return handle; } - void sendCommand(String command, Map data) { - // final response = GomuksSubmitCommand( - // state, - // command.toNativeUtf8().cast(), - // data.toGomuksBuffer(), - // ); + Map sendCommand(String command, Map data) { + final response = GomuksSubmitCommand( + state, + command.toNativeUtf8().cast(), + data.toGomuksBuffer(), + ); - // return response.buf; TODO + return response.buf.toJson(); } static final provider = NotifierProvider( diff --git a/lib/helpers/extensions/gomuks_buffer.dart b/lib/helpers/extensions/gomuks_buffer.dart index c4c97f5..48fc5d9 100644 --- a/lib/helpers/extensions/gomuks_buffer.dart +++ b/lib/helpers/extensions/gomuks_buffer.dart @@ -5,7 +5,7 @@ import "dart:typed_data"; import "package:ffi/ffi.dart"; import "package:nexus/src/third_party/gomuks.g.dart"; -extension GomuksBufferToJson on GomuksBorrowedBuffer { +extension GomuksBorrowedBufferToJson on GomuksBorrowedBuffer { Uint8List toBytes() { if (base == nullptr || length <= 0) return Uint8List(0); return base.asTypedList(length); @@ -18,22 +18,39 @@ extension GomuksBufferToJson on GomuksBorrowedBuffer { } } -extension JsonToGomuksBuffer on Map { - // GomuksBorrowedBuffer toGomuksBuffer() { - // final jsonString = json.encode(this); - // final bytes = utf8.encode(jsonString); +extension GomuksOwnedBufferToJson on GomuksOwnedBuffer { + Uint8List toBytes() { + try { + if (base == nullptr || length <= 0) return Uint8List(0); + return Uint8List.fromList(base.asTypedList(length)); + } finally { + calloc.free(base); + } + } - // 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 bufByValue = bufPtr.ref; - - // calloc.free(bufPtr); - - // return bufByValue; - // } + Map toJson() { + final bytes = toBytes(); + if (bytes.isEmpty) return {}; + return jsonDecode(utf8.decode(bytes)); + } +} + +extension JsonToGomuksBuffer on Map { + GomuksBorrowedBuffer toGomuksBuffer() { + 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 bufByValue = bufPtr.ref; + + calloc.free(bufPtr); + + return bufByValue; + } } diff --git a/lib/main.dart b/lib/main.dart index c97ef3e..d0cc6fa 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -105,7 +105,8 @@ class App extends ConsumerWidget { "username": "quadradical", "password": "Quadmarad1!", }); - return Placeholder(); + + return Text(response.toString()); }, // .betterWhen( // data: (client) => diff --git a/scripts/generate.dart b/scripts/generate.dart index 04b7c4d..c332b2e 100644 --- a/scripts/generate.dart +++ b/scripts/generate.dart @@ -4,7 +4,7 @@ import "package:path/path.dart"; void main(List args) async { final repoDir = Directory.fromUri( - Platform.script.resolve("../build/gomuks/source"), + Platform.script.resolve("../src/gomuks/source"), ); if (await repoDir.exists()) await repoDir.delete(recursive: true); await repoDir.create(recursive: true);