Add read all messages feature (#7049)

* Add read all messages feature: read all messages using Client.markAllRoomsAsRead() method

* Move the 'mark all rooms as read' footer as part of the list item

* Replace `showMarkAllRoomsAsReadConfirmation` and its associated event with `MarkAllRoomsAsRead(val needsConfirmation: Boolean)` and a `AsyncAction.Confirming` state

---------

Co-authored-by: Jorge Martín <jorgem@element.io>
This commit is contained in:
Aliaksandr Daroshchanka
2026-06-30 12:43:27 +03:00
committed by GitHub
parent c4f32db4be
commit b8752152cf
20 changed files with 433 additions and 24 deletions
@@ -203,6 +203,12 @@ interface MatrixClient {
*/
suspend fun markRoomAsFullyRead(roomId: RoomId, eventId: EventId): Result<Unit>
/**
* Mark all joined rooms as read by sending public, private and fully-read receipts
* on each room's latest event. Per-room errors are logged and skipped by the SDK.
*/
suspend fun markAllRoomsAsRead(): Result<Unit>
/**
* Check if linking a new device using QrCode is supported by the server.
*/
@@ -800,6 +800,12 @@ class RustMatrixClient(
}
}
override suspend fun markAllRoomsAsRead(): Result<Unit> = withContext(sessionDispatcher) {
runCatchingExceptions {
innerClient.markAllRoomsAsRead()
}
}
override suspend fun performDatabaseVacuum(): Result<Unit> = withContext(sessionDispatcher) {
runCatchingExceptions {
Timber.d("Performing database vacuuming for session $sessionId...")
@@ -117,6 +117,7 @@ class FakeMatrixClient(
private val getRecentEmojisLambda: () -> Result<List<String>> = { Result.success(emptyList()) },
private val addRecentEmojiLambda: (String) -> Result<Unit> = { Result.success(Unit) },
private val markRoomAsFullyReadResult: (RoomId, EventId) -> Result<Unit> = { _, _ -> lambdaError() },
private val markAllRoomsAsReadResult: () -> Result<Unit> = { Result.success(Unit) },
private val performDatabaseVacuumLambda: () -> Result<Unit> = { lambdaError() },
private val getMapStyleUrlResult: () -> Result<String?> = { lambdaError() },
private val getDatabaseSizesLambda: () -> Result<SdkStoreSizes> = { lambdaError() },
@@ -373,6 +374,10 @@ class FakeMatrixClient(
return markRoomAsFullyReadResult(roomId, eventId)
}
override suspend fun markAllRoomsAsRead(): Result<Unit> {
return markAllRoomsAsReadResult()
}
override suspend fun performDatabaseVacuum(): Result<Unit> {
return performDatabaseVacuumLambda()
}