diff --git a/lib/controllers/room_chat.dart b/lib/controllers/room_chat.dart index 773f30d..fd6c12a 100644 --- a/lib/controllers/room_chat.dart +++ b/lib/controllers/room_chat.dart @@ -3,6 +3,7 @@ import "dart:math"; import "package:collection/collection.dart"; import "package:fast_immutable_collections/fast_immutable_collections.dart"; +import "package:flutter/foundation.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:fluttertagger/fluttertagger.dart"; import "package:nexus/controllers/attachment.dart"; @@ -83,6 +84,14 @@ class RoomChatController(final ChatParams info) .where((rowId) => room.events[rowId]?.threadRoot == null) .toIList(); + // TODO: remove, debugging replies not showing + debugPrint( + "[timeline] build ${info.roomId}: " + "syncedTail=${room.timeline.entries.sortedBy((entry) => entry.key).reversed.take(5).map((entry) => "${entry.key}:${entry.value}").toList()} " + "clientSticky=${room.clientSticky.toList()} " + "chatTail=${timeline.reversed.take(5).toList()}", + ); + if (info.contextualEvent == null || timeline.contains(info.contextualEvent)) { ref.watch( @@ -456,6 +465,11 @@ class RoomChatController(final ChatParams info) /// Shows [event], which was just sent, until it comes down sync. void addSent(Event? event) { + // TODO: remove, debugging replies not showing + debugPrint( + "[timeline] addSent: rowId=${event?.rowId} eventId=${event?.eventId} " + "alreadySynced=${ref.read(RoomsController.provider)[info.roomId]?.timeline.values.contains(event?.rowId)}", + ); if (event case final event?) { ref .read(RoomsController.provider.notifier) diff --git a/lib/helpers/hooks/chat_scroll.dart b/lib/helpers/hooks/chat_scroll.dart index 611c85a..189b5ed 100644 --- a/lib/helpers/hooks/chat_scroll.dart +++ b/lib/helpers/hooks/chat_scroll.dart @@ -101,6 +101,13 @@ final class ChatScroll({ final anchorIndex = items.indexOf(anchor); final historyLength = anchorIndex == -1 ? items.length : anchorIndex + 1; + // TODO: remove, debugging replies not showing + debugPrint( + "[timeline] split: anchor=$anchor anchorIndex=$anchorIndex " + "length=${items.length} " + "historyTail=${items.take(historyLength).toList().reversed.take(3).toList()} " + "live=${items.skip(historyLength).toList()}", + ); return ( history: items.take(historyLength).toIList().reversed.toIList(), live: items.skip(historyLength).toIList(), @@ -113,6 +120,11 @@ final class ChatScroll({ useEffect(() { final previous = previousLastRowId.value; previousLastRowId.value = lastRowId; + // TODO: remove, debugging replies not showing + debugPrint( + "[timeline] lastRowId: previous=$previous last=$lastRowId " + "atBottom=${atBottom.value} contextualEvent=${contextualEvent.value}", + ); if (previous == null || lastRowId == null || previous == lastRowId) { return null; @@ -120,6 +132,11 @@ final class ChatScroll({ if (!atBottom.value || contextualEvent.value != null) return null; WidgetsBinding.instance.addPostFrameCallback((_) { + // TODO: remove, debugging replies not showing + debugPrint( + "[timeline] re-anchoring to $lastRowId " + "hasClients=${scrollController.hasClients}", + ); if (!scrollController.hasClients) return; anchorId.value = lastRowId;