Continuously load more messages until there are 20 or no more

This commit is contained in:
Henry Hiles 2026-04-05 13:32:59 -04:00
commit aac843d793
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 43 additions and 35 deletions

View file

@ -123,9 +123,9 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
ref.onDispose(controller.dispose); ref.onDispose(controller.dispose);
// While there are under 20 messages, try up to two times to load more messages. // While there are under 20 messages, try up to load more messages until theres no more or we have 20 messages.
for (var i = 0; i < 2 && messages.length < 20; i++) { for (var more = true; more == true && controller.messages.length < 20;) {
await loadOlder(controller); more = await loadOlder(controller);
} }
return controller; return controller;
@ -151,7 +151,7 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
RedactEventRequest(eventId: message.id, roomId: roomId, reason: reason), RedactEventRequest(eventId: message.id, roomId: roomId, reason: reason),
); );
Future<void> loadOlder([InMemoryChatController? chatController]) async { Future<bool> loadOlder([InMemoryChatController? chatController]) async {
final response = await ref final response = await ref
.watch(ClientController.provider.notifier) .watch(ClientController.provider.notifier)
.paginate( .paginate(
@ -183,11 +183,11 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
), ),
}), }),
const ISet.empty(), const ISet.empty(),
addToNewEvents: false,
); );
final room = ref.read(RoomsController.provider)[roomId]; final room = ref.read(RoomsController.provider)[roomId];
if (room == null) return; if (room != null) {
final messages = await ref.watch( final messages = await ref.watch(
MessagesController.provider( MessagesController.provider(
MessagesConfig(room: room, events: response.events.reversed), MessagesConfig(room: room, events: response.events.reversed),
@ -206,6 +206,8 @@ class RoomChatController extends AsyncNotifier<InMemoryChatController> {
index: 0, index: 0,
); );
} }
return response.hasMore;
}
Future<void> send( Future<void> send(
String text, { String text, {

View file

@ -11,7 +11,11 @@ class RoomsController extends Notifier<IMap<String, Room>> {
@override @override
IMap<String, Room> build() => const IMap.empty(); IMap<String, Room> build() => const IMap.empty();
void update(IMap<String, Room> rooms, ISet<String> leftRooms) { void update(
IMap<String, Room> rooms,
ISet<String> leftRooms, {
bool addToNewEvents = true,
}) {
final homeserver = final homeserver =
ref.watch( ref.watch(
ClientStateController.provider.select( ClientStateController.provider.select(
@ -29,6 +33,7 @@ class RoomsController extends Notifier<IMap<String, Room>> {
(item) => item.eventId, (item) => item.eventId,
); );
if (addToNewEvents) {
ref ref
.watch(NewEventsController.provider(roomId).notifier) .watch(NewEventsController.provider(roomId).notifier)
.add( .add(
@ -41,6 +46,7 @@ class RoomsController extends Notifier<IMap<String, Room>> {
.nonNulls .nonNulls
.toIList(), .toIList(),
); );
}
return acc.add( return acc.add(
roomId, roomId,