some small read receipt fixes
This commit is contained in:
parent
545fdd1f6b
commit
a701bc6413
2 changed files with 16 additions and 10 deletions
|
|
@ -1,7 +1,6 @@
|
||||||
import "dart:async";
|
import "dart:async";
|
||||||
import "dart:ffi";
|
import "dart:ffi";
|
||||||
import "dart:io";
|
import "dart:io";
|
||||||
import "dart:math";
|
|
||||||
|
|
||||||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||||
import "package:ffi/ffi.dart";
|
import "package:ffi/ffi.dart";
|
||||||
|
|
@ -12,6 +11,7 @@ import "package:nexus/controllers/active_account.dart";
|
||||||
import "package:nexus/controllers/client_state.dart";
|
import "package:nexus/controllers/client_state.dart";
|
||||||
import "package:nexus/controllers/settings.dart";
|
import "package:nexus/controllers/settings.dart";
|
||||||
import "package:nexus/helpers/extensions/gomuks_buffer.dart";
|
import "package:nexus/helpers/extensions/gomuks_buffer.dart";
|
||||||
|
import "package:nexus/helpers/extensions/event_id_is_fake.dart";
|
||||||
import "package:nexus/helpers/extensions/thread_events.dart";
|
import "package:nexus/helpers/extensions/thread_events.dart";
|
||||||
import "package:nexus/main.dart";
|
import "package:nexus/main.dart";
|
||||||
import "package:nexus/models/content/bot_command_description.dart";
|
import "package:nexus/models/content/bot_command_description.dart";
|
||||||
|
|
@ -441,13 +441,19 @@ class ClientController(final String? accountId) extends AsyncNotifier<int> {
|
||||||
Future<void> markRead(Room room, {String? threadRoot}) async {
|
Future<void> markRead(Room room, {String? threadRoot}) async {
|
||||||
if (room.metadata == null) return;
|
if (room.metadata == null) return;
|
||||||
final event = switch (threadRoot) {
|
final event = switch (threadRoot) {
|
||||||
final threadRoot? => room.latestThreadEvent(threadRoot),
|
final threadRoot? => [
|
||||||
null when room.timeline.isEmpty => null,
|
?room.latestThreadEvent(threadRoot),
|
||||||
null => switch (room.timeline[room.timeline.keys.reduce(max)]) {
|
...room.threadEvents(threadRoot).reversed,
|
||||||
final rowId? => room.events[rowId],
|
],
|
||||||
null => null,
|
null =>
|
||||||
},
|
room.timeline.entries
|
||||||
};
|
.toIList()
|
||||||
|
.sort((a, b) => b.key.compareTo(a.key))
|
||||||
|
.map((entry) => entry.value)
|
||||||
|
.nonNulls
|
||||||
|
.map((rowId) => room.events[rowId])
|
||||||
|
.nonNulls,
|
||||||
|
}.where((event) => !event.eventId.isFake).firstOrNull;
|
||||||
|
|
||||||
if (event == null) return;
|
if (event == null) return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -150,10 +150,10 @@ final class ChatScroll({
|
||||||
await paginate(.backward);
|
await paginate(.backward);
|
||||||
} else if (isHistorical && position.extentBefore <= loadThreshold) {
|
} else if (isHistorical && position.extentBefore <= loadThreshold) {
|
||||||
await paginate(.forward);
|
await paginate(.forward);
|
||||||
} else if (position.extentBefore <= 0) {
|
|
||||||
await markRead();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isHistorical && position.extentBefore <= 0) await markRead();
|
||||||
|
|
||||||
if (controllerData.isLoading == false &&
|
if (controllerData.isLoading == false &&
|
||||||
position.extentBefore <= 0 &&
|
position.extentBefore <= 0 &&
|
||||||
controllerData.value?.hasMoreForward == false &&
|
controllerData.value?.hasMoreForward == false &&
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue