diff --git a/features/messenger/src/main/kotlin/app/dapk/st/messenger/MessengerViewModel.kt b/features/messenger/src/main/kotlin/app/dapk/st/messenger/MessengerViewModel.kt index 4ba6163..95dc503 100644 --- a/features/messenger/src/main/kotlin/app/dapk/st/messenger/MessengerViewModel.kt +++ b/features/messenger/src/main/kotlin/app/dapk/st/messenger/MessengerViewModel.kt @@ -101,7 +101,7 @@ internal class MessengerViewModel( private fun CoroutineScope.updateRoomReadStateAsync(latestReadEvent: EventId, state: MessengerState): Deferred { return async { runCatching { - roomService.markFullyRead(state.roomState.roomOverview.roomId, latestReadEvent) + roomService.markFullyRead(state.roomState.roomOverview.roomId, latestReadEvent, isPrivate = true) roomStore.markRead(state.roomState.roomOverview.roomId) } } diff --git a/features/messenger/src/test/kotlin/app/dapk/st/messenger/MessengerViewModelTest.kt b/features/messenger/src/test/kotlin/app/dapk/st/messenger/MessengerViewModelTest.kt index 2ce7567..5162a2a 100644 --- a/features/messenger/src/test/kotlin/app/dapk/st/messenger/MessengerViewModelTest.kt +++ b/features/messenger/src/test/kotlin/app/dapk/st/messenger/MessengerViewModelTest.kt @@ -69,7 +69,7 @@ class MessengerViewModelTest { @Test fun `given timeline emits state, when starting, then updates state and marks room and events as read`() = runViewModelTest { fakeRoomStore.expectUnit(times = 2) { it.markRead(A_ROOM_ID) } - fakeRoomService.expectUnit { it.markFullyRead(A_ROOM_ID, AN_EVENT_ID) } + fakeRoomService.expectUnit { it.markFullyRead(A_ROOM_ID, AN_EVENT_ID, isPrivate = true) } val state = aMessengerStateWithEvent(AN_EVENT_ID, A_SELF_ID) fakeObserveTimelineUseCase.given(A_ROOM_ID, A_SELF_ID).returns(flowOf(state)) diff --git a/matrix/services/room/src/main/kotlin/app/dapk/st/matrix/room/RoomService.kt b/matrix/services/room/src/main/kotlin/app/dapk/st/matrix/room/RoomService.kt index 56ba0a1..a51817b 100644 --- a/matrix/services/room/src/main/kotlin/app/dapk/st/matrix/room/RoomService.kt +++ b/matrix/services/room/src/main/kotlin/app/dapk/st/matrix/room/RoomService.kt @@ -15,7 +15,7 @@ private val SERVICE_KEY = RoomService::class interface RoomService : MatrixService { suspend fun joinedMembers(roomId: RoomId): List - suspend fun markFullyRead(roomId: RoomId, eventId: EventId) + suspend fun markFullyRead(roomId: RoomId, eventId: EventId, isPrivate: Boolean) suspend fun findMember(roomId: RoomId, userId: UserId): RoomMember? suspend fun findMembers(roomId: RoomId, userIds: List): List diff --git a/matrix/services/room/src/main/kotlin/app/dapk/st/matrix/room/internal/DefaultRoomService.kt b/matrix/services/room/src/main/kotlin/app/dapk/st/matrix/room/internal/DefaultRoomService.kt index 2448e4c..22e1551 100644 --- a/matrix/services/room/src/main/kotlin/app/dapk/st/matrix/room/internal/DefaultRoomService.kt +++ b/matrix/services/room/src/main/kotlin/app/dapk/st/matrix/room/internal/DefaultRoomService.kt @@ -30,9 +30,9 @@ class DefaultRoomService( } } - override suspend fun markFullyRead(roomId: RoomId, eventId: EventId) { + override suspend fun markFullyRead(roomId: RoomId, eventId: EventId, isPrivate: Boolean) { logger.matrixLog(ROOM, "marking room fully read ${roomId.value}") - httpClient.execute(markFullyReadRequest(roomId, eventId)) + httpClient.execute(markFullyReadRequest(roomId, eventId, isPrivate)) } override suspend fun findMember(roomId: RoomId, userId: UserId): RoomMember? { @@ -97,10 +97,10 @@ internal fun joinedMembersRequest(roomId: RoomId) = httpRequest( +internal fun markFullyReadRequest(roomId: RoomId, eventId: EventId, isPrivate: Boolean) = httpRequest( path = "_matrix/client/r0/rooms/${roomId.value}/read_markers", method = MatrixHttpClient.Method.POST, - body = jsonBody(MarkFullyReadRequest(eventId, eventId, hidden = true)) + body = jsonBody(MarkFullyReadRequest(eventId, eventId, hidden = isPrivate)) ) internal fun createRoomRequest(invites: List, isDM: Boolean, visibility: RoomVisibility, name: String? = null) = httpRequest(