forked from Henry-Hiles/nexus
fix bug in timeline
This commit is contained in:
parent
4f66bdc817
commit
34f45c929a
4 changed files with 36 additions and 19 deletions
|
|
@ -27,6 +27,16 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
final room = ref.read(SelectedRoomController.provider);
|
||||
if (room == null) return InMemoryChatController();
|
||||
|
||||
final messages = await room.timeline
|
||||
.map(
|
||||
(timelineRowTuple) => room.events.firstWhereOrNull(
|
||||
(event) => event.rowId == timelineRowTuple.eventRowId,
|
||||
),
|
||||
)
|
||||
.nonNulls
|
||||
.toMessages(ref);
|
||||
final controller = InMemoryChatController(messages: messages);
|
||||
|
||||
ref.onDispose(
|
||||
ref.listen(NewEventsController.provider(roomId), (_, next) async {
|
||||
for (final event in next) {
|
||||
|
|
@ -62,23 +72,17 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
),
|
||||
);
|
||||
}
|
||||
if (message != null) {
|
||||
return await insertMessage(message);
|
||||
if (message != null &&
|
||||
!controller.messages.any(
|
||||
(oldMessage) => oldMessage.id == message.id,
|
||||
)) {
|
||||
await insertMessage(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}).close,
|
||||
}, weak: true).close,
|
||||
);
|
||||
|
||||
final messages = await room.timeline
|
||||
.map(
|
||||
(timelineRowTuple) => room.events.firstWhereOrNull(
|
||||
(event) => event.rowId == timelineRowTuple.eventRowId,
|
||||
),
|
||||
)
|
||||
.nonNulls
|
||||
.toMessages(ref);
|
||||
final controller = InMemoryChatController(messages: messages);
|
||||
ref.onDispose(controller.dispose);
|
||||
|
||||
if (messages.length < 20) await loadOlder(controller);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue