Skip to content
Snippets Groups Projects
Commit 5145c858 authored by Taras's avatar Taras
Browse files

Add migration for shared circles

parent ea3964d7
No related branches found
No related tags found
No related merge requests found
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
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment