From d3cbb3ca1b7e7a34d82d733a65bb0c1b94bb7b33 Mon Sep 17 00:00:00 2001 From: cach30verfl0w Date: Mon, 30 Jun 2025 14:15:42 +0200 Subject: [PATCH] Add force parameter to forgetRoom --- CHANGELOG.md | 1 + .../trixnity/client/room/ForgetRoomService.kt | 8 ++++---- .../trixnity/client/room/RoomListHandler.kt | 2 +- .../trixnity/client/room/RoomService.kt | 4 ++-- .../trixnity/client/mocks/RoomServiceMock.kt | 2 +- .../trixnity/client/room/ForgetRoomsTest.kt | 19 ++++++++++++------- .../client/room/RoomListHandlerTest.kt | 2 +- .../trixnity/client/room/RoomServiceTest.kt | 2 +- .../room/RoomServiceTimelineUtilsTest.kt | 2 +- .../room/TimelineEventAggregationTest.kt | 2 +- 10 files changed, 25 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08bbdd714..95fd99bf6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Downgrade Kotlin and Ktor +- Add force argument to `ForgetRoomService` and optional argument to forgetRoom in `RoomService` ### Deprecated diff --git a/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/ForgetRoomService.kt b/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/ForgetRoomService.kt index 7c4d6f4c8..783717b1a 100644 --- a/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/ForgetRoomService.kt +++ b/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/ForgetRoomService.kt @@ -6,7 +6,7 @@ import net.folivo.trixnity.core.model.RoomId import net.folivo.trixnity.core.model.events.m.room.Membership fun interface ForgetRoomService { - suspend operator fun invoke(roomId: RoomId) + suspend operator fun invoke(roomId: RoomId, force: Boolean) } class ForgetRoomServiceImpl( @@ -17,8 +17,8 @@ class ForgetRoomServiceImpl( private val roomTimelineStore: RoomTimelineStore, private val roomOutboxMessageStore: RoomOutboxMessageStore, ) : ForgetRoomService { - override suspend fun invoke(roomId: RoomId) { - if (roomStore.get(roomId).first()?.membership == Membership.LEAVE) { + override suspend fun invoke(roomId: RoomId, force: Boolean) { + if (force || roomStore.get(roomId).first()?.membership == Membership.LEAVE) { roomStore.delete(roomId) roomTimelineStore.deleteByRoomId(roomId) roomStateStore.deleteByRoomId(roomId) @@ -28,4 +28,4 @@ class ForgetRoomServiceImpl( } } -} \ No newline at end of file +} diff --git a/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/RoomListHandler.kt b/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/RoomListHandler.kt index b76864d2a..32a31f82b 100644 --- a/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/RoomListHandler.kt +++ b/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/RoomListHandler.kt @@ -391,7 +391,7 @@ class RoomListHandler( log.debug { "forget rooms: $forgetRooms" } tm.writeTransaction { forgetRooms.forEach { roomId -> - forgetRoomService(roomId) + forgetRoomService(roomId, false) } } } diff --git a/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/RoomService.kt b/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/RoomService.kt index bdf21eeb7..c27f82078 100644 --- a/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/RoomService.kt +++ b/trixnity-client/src/commonMain/kotlin/net/folivo/trixnity/client/room/RoomService.kt @@ -177,7 +177,7 @@ interface RoomService { /** * If the room has [Membership.LEAVE], you can delete it locally. */ - suspend fun forgetRoom(roomId: RoomId) + suspend fun forgetRoom(roomId: RoomId, force: Boolean = false) fun getAccountData( roomId: RoomId, @@ -671,7 +671,7 @@ class RoomServiceImpl( return roomStore.get(roomId) } - override suspend fun forgetRoom(roomId: RoomId) = forgetRoomService(roomId) + override suspend fun forgetRoom(roomId: RoomId, force: Boolean) = forgetRoomService(roomId, force) override fun getAccountData( roomId: RoomId, diff --git a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/mocks/RoomServiceMock.kt b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/mocks/RoomServiceMock.kt index dfc9eb55b..6aa7d04e9 100644 --- a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/mocks/RoomServiceMock.kt +++ b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/mocks/RoomServiceMock.kt @@ -145,7 +145,7 @@ class RoomServiceMock : RoomService { } val forgetRooms = MutableStateFlow(listOf()) - override suspend fun forgetRoom(roomId: RoomId) { + override suspend fun forgetRoom(roomId: RoomId, force: Boolean) { forgetRooms.update { it + roomId } } diff --git a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/ForgetRoomsTest.kt b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/ForgetRoomsTest.kt index ed6c4b125..57f93eeab 100644 --- a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/ForgetRoomsTest.kt +++ b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/ForgetRoomsTest.kt @@ -105,7 +105,7 @@ class ForgetRoomsTest : TrixnityBaseTest() { roomStore.getAll().first { it.size == 1 } - cut(room) + cut(room, false) roomStore.get(room).first() shouldBe null @@ -130,14 +130,19 @@ class ForgetRoomsTest : TrixnityBaseTest() { } @Test - fun `invoke » not forget rooms when membershipt is not leave`() = runTest { + fun `invoke » not forget rooms when membership is not leave`() = runTest { roomStore.update(room) { simpleRoom.copy(room) } - roomStore.getAll().first { it.size == 1 } - - cut(room) - + cut(room, false) roomStore.get(room).first() shouldNotBe null } -} \ No newline at end of file + @Test + fun `invoke » forget rooms when membership is not leave if forced`() = runTest { + roomStore.update(room) { simpleRoom.copy(room) } + roomStore.getAll().first { it.size == 1 } + cut(room, true) + roomStore.get(room).first() shouldBe null + } + +} diff --git a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomListHandlerTest.kt b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomListHandlerTest.kt index 218e2f250..7289c8bfc 100644 --- a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomListHandlerTest.kt +++ b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomListHandlerTest.kt @@ -58,7 +58,7 @@ class RoomListHandlerTest : TrixnityBaseTest() { roomStateStore = roomStateStore, globalAccountDataStore = globalAccountDataStore, roomAccountDataStore = roomAccountDataStore, - forgetRoomService = { forgetRooms.add(it) }, + forgetRoomService = { roomId, _ -> forgetRooms.add(roomId) }, roomService = roomServiceMock, userInfo = simpleUserInfo, tm = TransactionManagerMock(), diff --git a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomServiceTest.kt b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomServiceTest.kt index cb5c55985..2daed0c77 100644 --- a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomServiceTest.kt +++ b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomServiceTest.kt @@ -66,7 +66,7 @@ class RoomServiceTest : TrixnityBaseTest() { roomOutboxMessageStore = roomOutboxMessageStore, roomEventEncryptionServices = listOf(roomEventDecryptionServiceMock), mediaService = mediaServiceMock, - forgetRoomService = {}, + forgetRoomService = { _, _ -> }, userInfo = simpleUserInfo, timelineEventHandler = TimelineEventHandlerMock(), clock = testScope.testClock, diff --git a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomServiceTimelineUtilsTest.kt b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomServiceTimelineUtilsTest.kt index eed5b228f..9f470c41d 100644 --- a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomServiceTimelineUtilsTest.kt +++ b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/RoomServiceTimelineUtilsTest.kt @@ -71,7 +71,7 @@ class RoomServiceTimelineUtilsTest : TrixnityBaseTest() { roomOutboxMessageStore = getInMemoryRoomOutboxMessageStore(), roomEventEncryptionServices = listOf(roomEventDecryptionServiceMock), mediaService = mediaServiceMock, - forgetRoomService = { }, + forgetRoomService = { _, _ -> }, userInfo = simpleUserInfo, timelineEventHandler = timelineEventHandlerMock, clock = testScope.testClock, diff --git a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/TimelineEventAggregationTest.kt b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/TimelineEventAggregationTest.kt index 35d45b0e0..2285f8e51 100644 --- a/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/TimelineEventAggregationTest.kt +++ b/trixnity-client/src/commonTest/kotlin/net/folivo/trixnity/client/room/TimelineEventAggregationTest.kt @@ -46,7 +46,7 @@ class TimelineEventAggregationTest : TrixnityBaseTest() { roomOutboxMessageStore = getInMemoryRoomOutboxMessageStore(), roomEventEncryptionServices = listOf(roomEventDecryptionServiceMock), mediaService = mediaServiceMock, - forgetRoomService = {}, + forgetRoomService = { _, _ -> }, userInfo = simpleUserInfo, timelineEventHandler = TimelineEventHandlerMock(), clock = testScope.testClock, -- GitLab