From 5145c8582ae5ca5c8291c014143b804ae1be226e Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Tue, 19 Dec 2023 15:48:10 +0200 Subject: [PATCH] Add migration for shared circles --- .../ConfigureWorkspaceDataSource.kt | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) 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 64699409e..c4c012b86 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 } -- GitLab