make it a little more efficient

This commit is contained in:
Henry Hiles 2026-05-21 12:26:41 -04:00
commit 13c2a4062b
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 17 additions and 14 deletions

View file

@ -88,7 +88,7 @@ class RoomChatController extends AsyncNotifier<IList<Event>> {
),
);
await ref
ref
.watch(RoomsController.provider.notifier)
.update(
IMap({

View file

@ -1,3 +1,5 @@
import "dart:isolate";
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/models/event.dart";
@ -12,7 +14,7 @@ class RoomsController extends Notifier<IMap<String, Room>> {
String roomId,
IList<Event> state, {
bool isMembers = false,
}) => update(
}) async => update(
{
roomId: Room(
events: IMap.fromEntries(
@ -20,24 +22,25 @@ class RoomsController extends Notifier<IMap<String, Room>> {
),
hasFetchedState: true,
hasFetchedMembers: isMembers,
state: state.fold(
const IMap.empty(),
state: await Isolate.run(() {
final newState = state.fold(
const IMap<String, IMap<String, int>>.empty(),
(previousValue, stateEvent) => previousValue.add(
stateEvent.type,
(previousValue[stateEvent.type] ?? const IMap.empty()).addAll(
IMap({
if (stateEvent.stateKey != null)
stateEvent.stateKey!: stateEvent.rowId,
(previousValue[stateEvent.type] ?? const IMap.empty()).add(
stateEvent.stateKey!,
stateEvent.rowId,
),
),
);
return newState;
}),
),
),
),
),
}.toIMap(),
const ISet.empty(),
);
Future<void> update(IMap<String, Room> rooms, ISet<String> leftRooms) async {
void update(IMap<String, Room> rooms, ISet<String> leftRooms) {
final merged = rooms.entries.fold(state, (acc, entry) {
final roomId = entry.key;
final incoming = entry.value;