Compare commits

..

No commits in common. "13c2a4062b8be2ec802ac5e485128cc8f3478b36" and "e00cd12bb925ab7a0294ee8b0a4289788c7184f1" have entirely different histories.

2 changed files with 14 additions and 17 deletions

View file

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

View file

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