temp isolate

This commit is contained in:
Henry Hiles 2026-05-21 12:16:01 -04:00
commit 34e6c07d8d
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs

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";
@ -38,7 +40,11 @@ class RoomsController extends Notifier<IMap<String, Room>> {
);
Future<void> update(IMap<String, Room> rooms, ISet<String> leftRooms) async {
final merged = rooms.entries.fold(state, (acc, entry) {
final merged = await rooms.entries.fold(Future.sync(() => state), (
accF,
entry,
) async {
final acc = await accF;
final roomId = entry.key;
final incoming = entry.value;
final existing = acc[roomId];
@ -51,7 +57,8 @@ class RoomsController extends Notifier<IMap<String, Room>> {
events: incoming.events.isEmpty
? existing.events
: existing.events.addAll(incoming.events),
state: incoming.state.entries.fold(
state: await Isolate.run(() {
final state = incoming.state.entries.fold(
existing.state,
(previousValue, event) => previousValue.add(
event.key,
@ -59,7 +66,9 @@ class RoomsController extends Notifier<IMap<String, Room>> {
event.value,
),
),
),
);
return state;
}),
reset: false,
hasFetchedMembers:
incoming.hasFetchedMembers || existing.hasFetchedMembers,
@ -86,7 +95,6 @@ class RoomsController extends Notifier<IMap<String, Room>> {
merged,
(acc, roomId) => acc.remove(roomId),
);
state = prunedList;
}