Fetch account data

This commit is contained in:
Henry Hiles 2026-03-01 13:58:24 -05:00
commit 97f4bc78f0
No known key found for this signature in database
4 changed files with 46 additions and 2 deletions

View file

@ -0,0 +1,16 @@
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/models/account_data.dart";
class AccountDataController extends Notifier<IMap<String, AccountData>> {
@override
IMap<String, AccountData> build() => const IMap.empty();
void update(IMap<String, AccountData> newData) =>
state = IMap({...state.unlock, ...newData.unlock});
static final provider =
NotifierProvider<AccountDataController, IMap<String, AccountData>>(
AccountDataController.new,
);
}

View file

@ -5,6 +5,7 @@ import "package:collection/collection.dart";
import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:ffi/ffi.dart"; import "package:ffi/ffi.dart";
import "package:flutter/foundation.dart"; import "package:flutter/foundation.dart";
import "package:nexus/controllers/account_data_controller.dart";
import "package:nexus/controllers/client_state_controller.dart"; import "package:nexus/controllers/client_state_controller.dart";
import "package:nexus/controllers/init_complete_controller.dart"; import "package:nexus/controllers/init_complete_controller.dart";
import "package:nexus/controllers/rooms_controller.dart"; import "package:nexus/controllers/rooms_controller.dart";
@ -66,16 +67,26 @@ class ClientController extends AsyncNotifier<int> {
case "sync_complete": case "sync_complete":
final syncData = SyncData.fromJson(decodedMuksEvent); final syncData = SyncData.fromJson(decodedMuksEvent);
final roomProvider = RoomsController.provider; final roomProvider = RoomsController.provider;
final accountDataProvider = AccountDataController.provider;
if (syncData.clearState) {
ref.invalidate(roomProvider);
ref.invalidate(accountDataProvider);
}
if (syncData.clearState) ref.invalidate(roomProvider);
ref ref
.watch(roomProvider.notifier) .watch(roomProvider.notifier)
.update(syncData.rooms, syncData.leftRooms); .update(syncData.rooms, syncData.leftRooms);
ref
.watch(accountDataProvider.notifier)
.update(syncData.accountData);
if (syncData.topLevelSpaces != null) { if (syncData.topLevelSpaces != null) {
ref ref
.watch(TopLevelSpacesController.provider.notifier) .watch(TopLevelSpacesController.provider.notifier)
.set(syncData.topLevelSpaces!); .set(syncData.topLevelSpaces!);
} }
if (syncData.spaceEdges != null) { if (syncData.spaceEdges != null) {
ref ref
.watch(SpaceEdgesController.provider.notifier) .watch(SpaceEdgesController.provider.notifier)

View file

@ -0,0 +1,16 @@
import "package:freezed_annotation/freezed_annotation.dart";
part "account_data.freezed.dart";
part "account_data.g.dart";
@freezed
abstract class AccountData with _$AccountData {
const factory AccountData({
required String userId,
required String? roomId,
required String type,
required dynamic content,
}) = _AccountData;
factory AccountData.fromJson(Map<String, Object?> json) =>
_$AccountDataFromJson(json);
}

View file

@ -1,5 +1,6 @@
import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:freezed_annotation/freezed_annotation.dart"; import "package:freezed_annotation/freezed_annotation.dart";
import "package:nexus/models/account_data.dart";
import "package:nexus/models/room.dart"; import "package:nexus/models/room.dart";
import "package:nexus/models/space_edge.dart"; import "package:nexus/models/space_edge.dart";
part "sync_data.freezed.dart"; part "sync_data.freezed.dart";
@ -9,7 +10,7 @@ part "sync_data.g.dart";
abstract class SyncData with _$SyncData { abstract class SyncData with _$SyncData {
const factory SyncData({ const factory SyncData({
@Default(false) bool clearState, @Default(false) bool clearState,
// required IMap<String, AccountData> accountData, @Default(IMap.empty()) IMap<String, AccountData> accountData,
@Default(IMap.empty()) IMap<String, Room> rooms, @Default(IMap.empty()) IMap<String, Room> rooms,
@Default(ISet.empty()) ISet<String> leftRooms, @Default(ISet.empty()) ISet<String> leftRooms,
// required IList<InvitedRoom> invitedRooms, // required IList<InvitedRoom> invitedRooms,