diff --git a/auth/src/main/java/org/futo/circles/auth/feature/workspace/data_source/ConfigureWorkspaceDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/workspace/data_source/ConfigureWorkspaceDataSource.kt index 64699409eb49fea3f91c5d3f7c84155184173bcc..c4c012b8686dd8b1943b54ceba1b1f2cb46aecda 100644 --- a/auth/src/main/java/org/futo/circles/auth/feature/workspace/data_source/ConfigureWorkspaceDataSource.kt +++ b/auth/src/main/java/org/futo/circles/auth/feature/workspace/data_source/ConfigureWorkspaceDataSource.kt @@ -1,10 +1,12 @@ package org.futo.circles.auth.feature.workspace.data_source import kotlinx.coroutines.delay -import org.futo.circles.core.feature.room.create.CreateRoomDataSource import org.futo.circles.core.feature.room.RoomRelationsBuilder +import org.futo.circles.core.feature.room.create.CreateRoomDataSource import org.futo.circles.core.feature.workspace.SpacesTreeAccountDataSource +import org.futo.circles.core.model.CIRCLES_SPACE_ACCOUNT_DATA_KEY import org.futo.circles.core.model.CirclesRoom +import org.futo.circles.core.model.SharedCirclesSpace import org.futo.circles.core.provider.MatrixSessionProvider import org.futo.circles.core.utils.getJoinedRoomById import org.matrix.android.sdk.api.session.room.Room @@ -22,14 +24,17 @@ class ConfigureWorkspaceDataSource @Inject constructor( var roomId = addIdToAccountDataIfRoomExistWithTag(room) if (roomId == null) roomId = getJoinedRoomIdFromAccountData(room) if (roomId == null) createRoomWithAccountDataRecordIfNeed(room) - else { - try { - getJoinedRoomById(roomId)?.let { validateRelations(room.parentAccountDataKey, it) } - } catch (_: Exception) { - val parentRoomId = - room.parentAccountDataKey?.let { spacesTreeAccountDataSource.getRoomIdByKey(it) } - parentRoomId?.let { roomRelationsBuilder.setRelations(roomId, parentRoomId) } - } + else validateAndFixRelationInNeeded(roomId, room) + } + + private suspend fun validateAndFixRelationInNeeded(roomId: String, room: CirclesRoom) { + try { + getJoinedRoomById(roomId)?.let { validateRelations(room.parentAccountDataKey, it) } + } catch (_: Exception) { + val parentRoomId = + room.parentAccountDataKey?.let { spacesTreeAccountDataSource.getRoomIdByKey(it) } + parentRoomId?.let { roomRelationsBuilder.setRelations(roomId, parentRoomId) } + removeSharedCirclesToMyCirclesRelationIfNeeded(room, roomId) } } @@ -98,6 +103,18 @@ class ConfigureWorkspaceDataSource @Inject constructor( return roomId } + //part of Shared Circles from My Circles to Root migration + private suspend fun removeSharedCirclesToMyCirclesRelationIfNeeded( + circlesRoom: CirclesRoom, + roomId: String + ) { + if (circlesRoom !is SharedCirclesSpace) return + val myCirclesSpaceId = + spacesTreeAccountDataSource.getRoomIdByKey(CIRCLES_SPACE_ACCOUNT_DATA_KEY) ?: return + roomRelationsBuilder.removeRelations(roomId, myCirclesSpaceId) + + } + private companion object { private const val CREATE_ROOM_DELAY = 1000L }