From 611a1cc5cd78c595129900f7a56dd5b653cfed29 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Thu, 7 Mar 2024 17:47:40 +0200
Subject: [PATCH] Remove child to parent relations for shared circles space

---
 .../data_source/ConfigureWorkspaceDataSource.kt  | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 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 aa1eb5d13..a46ca8731 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
@@ -5,6 +5,7 @@ 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.PROFILE_SPACE_ACCOUNT_DATA_KEY
 import org.futo.circles.core.model.SharedCirclesSpace
 import org.futo.circles.core.provider.MatrixSessionProvider
 import org.futo.circles.core.utils.getAllJoinedCirclesRoomsAndSpaces
@@ -27,7 +28,9 @@ class ConfigureWorkspaceDataSource @Inject constructor(
 
     private suspend fun validateAndFixRelationInNeeded(roomId: String, room: CirclesRoom) {
         try {
-            getJoinedRoomById(roomId)?.let { validateRelations(room.parentAccountDataKey, it) }
+            getJoinedRoomById(roomId)?.let {
+                validateRelations(room.parentAccountDataKey, it, room.accountDataKey)
+            }
         } catch (_: Exception) {
             val parentRoomId =
                 room.parentAccountDataKey?.let { spacesTreeAccountDataSource.getRoomIdByKey(it) }
@@ -42,10 +45,14 @@ class ConfigureWorkspaceDataSource @Inject constructor(
             ?: throw IllegalArgumentException("No account data record for key $accountDataKey")
         val joinedRoom = getJoinedRoomById(roomId)
             ?: throw IllegalArgumentException("No joined room for id $roomId found")
-        validateRelations(room.parentAccountDataKey, joinedRoom)
+        validateRelations(room.parentAccountDataKey, joinedRoom, accountDataKey)
     }
 
-    private fun validateRelations(parentAccountDataKey: String?, joinedRoom: Room) {
+    private fun validateRelations(
+        parentAccountDataKey: String?,
+        joinedRoom: Room,
+        accountDataKey: String?
+    ) {
         val parentKey = parentAccountDataKey ?: return
         val parentRoomId =
             spacesTreeAccountDataSource.getRoomIdByKey(parentKey) ?: throw IllegalArgumentException(
@@ -58,7 +65,8 @@ class ConfigureWorkspaceDataSource @Inject constructor(
             ?.spaceSummary()?.spaceParents?.mapNotNull { it.parentId }
             ?.contains(parentRoomId) == true
 
-        if (!childHasRelationToParent)
+        //iOS app do not set this relation
+        if (!childHasRelationToParent && accountDataKey != PROFILE_SPACE_ACCOUNT_DATA_KEY)
             throw IllegalArgumentException("Missing child to parent relations")
 
         val parentHasRelationToChild = joinedParentRoom.asSpace()
-- 
GitLab