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