add fetched individual events to RoomsController

This commit is contained in:
Henry Hiles 2026-09-29 17:00:17 -04:00
commit b4d5aaadaf
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
5 changed files with 26 additions and 13 deletions

View file

@ -16,11 +16,28 @@ class EventController(final GetEventRequest request)
(event) => event.eventId == request.eventId, (event) => event.eventId == request.eventId,
); );
return event ?? if (event != null) return event;
await ref
.watch(ClientController.provider.notifier) final fetchedEvent = await ref
.getEvent(request) .watch(ClientController.provider.notifier)
.onError((_, _) => null); .getEvent(request)
.onError((_, _) => null);
if (fetchedEvent != null) {
ref
.watch(RoomsController.provider.notifier)
.update(
.new({
request.roomId: .new(
events: .new({fetchedEvent.rowId: fetchedEvent}),
),
}),
);
return fetchedEvent;
}
return null;
} }
static final provider = AsyncNotifierProvider.family static final provider = AsyncNotifierProvider.family

View file

@ -59,7 +59,6 @@ class GomuksListenerController extends AsyncNotifier<void> {
.new({ .new({
event.roomId: .new(events: .new({event.rowId: event})), event.roomId: .new(events: .new({event.rowId: event})),
}), }),
.new(),
); );
break; break;

View file

@ -35,7 +35,6 @@ class NotificationsController([final NotificationsRequest? request])
), ),
), ),
}), }),
.new(),
); );
return .new(mentions.map((event) => (event.rowId, event.roomId))); return .new(mentions.map((event) => (event.rowId, event.roomId)));
@ -79,7 +78,6 @@ class NotificationsController([final NotificationsRequest? request])
), ),
), ),
}), }),
.new(),
); );
return currentNotifications.addAll( return currentNotifications.addAll(

View file

@ -77,7 +77,6 @@ class RoomChatController(final ChatParams info)
), ),
), ),
}), }),
.new(),
); );
return .new( return .new(
timeline: .new(events.map((element) => element.rowId)), timeline: .new(events.map((element) => element.rowId)),
@ -149,7 +148,6 @@ class RoomChatController(final ChatParams info)
), ),
), ),
}), }),
.new(),
); );
} else { } else {
final paginationResponse = await client.paginateManual( final paginationResponse = await client.paginateManual(
@ -173,7 +171,6 @@ class RoomChatController(final ChatParams info)
), ),
), ),
}), }),
.new(),
); );
final eventRowIds = paginationResponse.events final eventRowIds = paginationResponse.events
@ -274,7 +271,6 @@ class RoomChatController(final ChatParams info)
clientSticky: .new({event.rowId}), clientSticky: .new({event.rowId}),
), ),
}), }),
.new(),
); );
} }

View file

@ -33,7 +33,10 @@ class RoomsController extends Notifier<IMap<String, Room>> {
.new(), .new(),
); );
void update(IMap<String, Room> rooms, ISet<String> leftRooms) { void update(
IMap<String, Room> rooms, [
ISet<String> leftRooms = const ISet.empty(),
]) {
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;