working login

This commit is contained in:
Henry Hiles 2026-01-25 14:32:20 +00:00
commit e447540062
No known key found for this signature in database
7 changed files with 162 additions and 32 deletions

View file

@ -2,6 +2,7 @@ import "dart:ffi";
import "dart:isolate";
import "package:ffi/ffi.dart";
import "package:flutter/foundation.dart";
import "package:nexus/controllers/client_state_controller.dart";
import "package:nexus/controllers/sync_status_controller.dart";
import "package:nexus/helpers/extensions/gomuks_buffer.dart";
import "package:nexus/models/client_state.dart";
@ -31,18 +32,22 @@ class ClientController extends AsyncNotifier<int> {
switch (muksEventType) {
case "client_state":
final clientState = ClientState.fromJson(decodedMuksEvent);
debugPrint("Received event: $clientState");
ref
.watch(ClientStateController.provider.notifier)
.set(ClientState.fromJson(decodedMuksEvent));
break;
case "sync_status":
ref
.watch(SyncStatusController.provider.notifier)
.set(SyncStatus.fromJson(decodedMuksEvent));
break;
case "sync_complete":
// ref
// .watch(SyncStatusController.provider.notifier)
// .set(SyncStatus.fromJson(decodedMuksEvent));
break;
default:
debugPrint(
"Unhandled event: $muksEventType: $decodedMuksEvent",
);
debugPrint("Unhandled event: $muksEventType");
}
} catch (error, stackTrace) {
debugPrintStack(stackTrace: stackTrace, label: error.toString());
@ -73,6 +78,15 @@ class ClientController extends AsyncNotifier<int> {
return response.buf.toJson();
}
Future<bool> verify(String recoveryKey) async {
try {
await sendCommand("verify", {"recovery_key": recoveryKey});
return true;
} catch (_) {
return false;
}
}
Future<bool> login(Login login) async {
try {
await sendCommand("login", login.toJson());

View file

@ -0,0 +1,15 @@
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/models/client_state.dart";
class ClientStateController extends Notifier<ClientState?> {
@override
Null build() => null;
void set(ClientState newState) {
state = newState;
}
static final provider = NotifierProvider<ClientStateController, ClientState?>(
ClientStateController.new,
);
}

View file

@ -0,0 +1,20 @@
import "dart:async";
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
class MultiProviderController extends AsyncNotifier<void> {
MultiProviderController(this.providers);
final IList<AsyncNotifierProvider> providers;
@override
FutureOr<void> build() async => await Future.wait(
providers.map((provider) => ref.watch(provider.future)),
);
static final provider =
AsyncNotifierProvider.family<
MultiProviderController,
void,
IList<AsyncNotifierProvider>
>(MultiProviderController.new);
}