fix: Set read marker only on user interaction
This commit is contained in:
parent
6acf6f373d
commit
7f0bd867ec
2 changed files with 289 additions and 276 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue