Compare commits
No commits in common. "13c2a4062b8be2ec802ac5e485128cc8f3478b36" and "e00cd12bb925ab7a0294ee8b0a4289788c7184f1" have entirely different histories.
13c2a4062b
...
e00cd12bb9
2 changed files with 14 additions and 17 deletions
|
|
@ -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({
|
||||||
|
|
|
||||||
|
|
@ -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()).add(
|
(previousValue[stateEvent.type] ?? const IMap.empty()).addAll(
|
||||||
stateEvent.stateKey!,
|
IMap({
|
||||||
stateEvent.rowId,
|
if (stateEvent.stateKey != null)
|
||||||
),
|
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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue