fix: Set read marker only on user interaction

This commit is contained in:
Krille Fear 2022-02-17 21:12:47 +01:00
commit 7f0bd867ec
2 changed files with 289 additions and 276 deletions

View file

@ -147,6 +147,7 @@ class ChatController extends State<Chat> {
if (!mounted) {
return;
}
setReadMarker();
if (scrollController.position.pixels ==
scrollController.position.maxScrollExtent &&
timeline!.events.isNotEmpty &&
@ -201,8 +202,8 @@ class ChatController extends State<Chat> {
if (timeline == null) {
timeline = await room!.getTimeline(onUpdate: updateView);
if (timeline!.events.isNotEmpty) {
// ignore: unawaited_futures
if (room!.markedUnread) room!.markUnread(false);
setReadMarker();
}
// when the scroll controller is attached we want to scroll to an event id, if specified
@ -220,15 +221,24 @@ class ChatController extends State<Chat> {
}
filteredEvents = timeline!.getFilteredEvents(unfolded: unfolded);
timeline!.requestKeys();
if ((room!.hasNewMessages || room!.notificationCount > 0) &&
return true;
}
Future<void>? _setReadMarkerFuture;
void setReadMarker([_]) {
if (_setReadMarkerFuture == null &&
(room!.hasNewMessages || room!.notificationCount > 0) &&
timeline != null &&
timeline!.events.isNotEmpty &&
Matrix.of(context).webHasFocus) {
Logs().v('Set read marker...');
// ignore: unawaited_futures
timeline!.setReadMarker();
_setReadMarkerFuture = timeline!.setReadMarker().then((_) {
_setReadMarkerFuture = null;
});
room!.client.updateIosBadge();
}
return true;
}
@override
@ -900,6 +910,7 @@ class ChatController extends State<Chat> {
}
void onInputBarChanged(String text) {
setReadMarker();
if (text.endsWith(' ') && matrix!.hasComplexBundles) {
final clients = currentRoomBundle;
for (final client in clients) {