From 957d9af8cf391a4c72daf3236e6990149a1ca4a8 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Mon, 25 Sep 2023 12:37:51 +0300
Subject: [PATCH] Fix creating Circle timeline on configure workspace

---
 .../circles/core/room/CreateRoomDataSource.kt | 49 ++++++++-----------
 .../core/room/create/CreateRoomViewModel.kt   |  6 ++-
 2 files changed, 25 insertions(+), 30 deletions(-)

diff --git a/core/src/main/java/org/futo/circles/core/room/CreateRoomDataSource.kt b/core/src/main/java/org/futo/circles/core/room/CreateRoomDataSource.kt
index 3a493229e..285770d8b 100644
--- a/core/src/main/java/org/futo/circles/core/room/CreateRoomDataSource.kt
+++ b/core/src/main/java/org/futo/circles/core/room/CreateRoomDataSource.kt
@@ -28,18 +28,29 @@ class CreateRoomDataSource @Inject constructor(
     private val roomRelationsBuilder: RoomRelationsBuilder
 ) {
 
-    private val session by lazy { MatrixSessionProvider.currentSession }
+    private val session by lazy { MatrixSessionProvider.getSessionOrThrow() }
 
-    suspend fun createCircleWithTimeline(
+    suspend fun createRoom(
+        circlesRoom: CirclesRoom,
         name: String? = null,
+        topic: String? = null,
         iconUri: Uri? = null,
         inviteIds: List<String>? = null,
-        isPublicCircle: Boolean
+        isPublicCircle: Boolean = false
     ): String {
-        val circleId = createRoom(Circle(), name, null, iconUri)
-        val timelineId = createCircleTimeline(circleId, name, iconUri, inviteIds)
-        if (isPublicCircle) addToSharedCircles(timelineId)
-        return circleId
+        val id = session.roomService().createRoom(
+            getParams(circlesRoom, name, topic, iconUri, inviteIds)
+        )
+        circlesRoom.tag?.let { session.getRoom(id)?.tagsService()?.addTag(it, null) }
+        circlesRoom.parentTag?.let { tag ->
+            roomRelationsBuilder.findRoomByTag(tag)
+                ?.let { room -> roomRelationsBuilder.setRelations(id, room) }
+        }
+        if (circlesRoom is Circle) {
+            val timelineId = createCircleTimeline(id, name, iconUri, inviteIds)
+            if (isPublicCircle) addToSharedCircles(timelineId)
+        }
+        return id
     }
 
     suspend fun createCircleTimeline(
@@ -48,29 +59,11 @@ class CreateRoomDataSource @Inject constructor(
         inviteIds: List<String>? = null
     ): String {
         val timelineId = createRoom(Timeline(), name, null, iconUri, inviteIds)
-        session?.getRoom(circleId)
+        session.getRoom(circleId)
             ?.let { circle -> roomRelationsBuilder.setRelations(timelineId, circle) }
         return timelineId
     }
 
-    suspend fun createRoom(
-        circlesRoom: CirclesRoom,
-        name: String? = null,
-        topic: String? = null,
-        iconUri: Uri? = null,
-        inviteIds: List<String>? = null
-    ): String {
-        val id = session?.roomService()?.createRoom(
-            getParams(circlesRoom, name, topic, iconUri, inviteIds)
-        ) ?: throw Exception("Can not create room")
-        circlesRoom.tag?.let { session?.getRoom(id)?.tagsService()?.addTag(it, null) }
-        circlesRoom.parentTag?.let { tag ->
-            roomRelationsBuilder.findRoomByTag(tag)
-                ?.let { room -> roomRelationsBuilder.setRelations(id, room) }
-        }
-        return id
-    }
-
     private fun getParams(
         circlesRoom: CirclesRoom,
         name: String? = null,
@@ -114,14 +107,14 @@ class CreateRoomDataSource @Inject constructor(
     }
 
     suspend fun addToSharedCircles(timelineId: String) {
-        session?.getRoom(getSharedCirclesSpaceId() ?: "")
+        session.getRoom(getSharedCirclesSpaceId() ?: "")
             ?.let { sharedCirclesSpace ->
                 roomRelationsBuilder.setRelations(timelineId, sharedCirclesSpace)
             }
     }
 
     suspend fun removeFromSharedCircles(timelineId: String) {
-        session?.getRoom(getSharedCirclesSpaceId() ?: "")
+        session.getRoom(getSharedCirclesSpaceId() ?: "")
             ?.let { sharedCirclesSpace ->
                 roomRelationsBuilder.removeRelations(timelineId, sharedCirclesSpace.roomId)
             }
diff --git a/core/src/main/java/org/futo/circles/core/room/create/CreateRoomViewModel.kt b/core/src/main/java/org/futo/circles/core/room/create/CreateRoomViewModel.kt
index e0bba3d1d..53dfd028d 100644
--- a/core/src/main/java/org/futo/circles/core/room/create/CreateRoomViewModel.kt
+++ b/core/src/main/java/org/futo/circles/core/room/create/CreateRoomViewModel.kt
@@ -8,6 +8,7 @@ import org.futo.circles.core.SingleEventLiveData
 import org.futo.circles.core.extensions.Response
 import org.futo.circles.core.extensions.createResult
 import org.futo.circles.core.extensions.launchBg
+import org.futo.circles.core.model.Circle
 import org.futo.circles.core.model.CircleRoomTypeArg
 import org.futo.circles.core.model.Gallery
 import org.futo.circles.core.model.Group
@@ -59,11 +60,12 @@ class CreateRoomViewModel @Inject constructor(
         inviteIds: List<String>?,
         isPublicCircle: Boolean
     ) =
-        dataSource.createCircleWithTimeline(
+        dataSource.createRoom(
+            circlesRoom = Circle(),
             name = name,
             iconUri = selectedImageLiveData.value,
             inviteIds = inviteIds,
-            isPublicCircle
+            isPublicCircle = isPublicCircle
         )
 
     private suspend fun createGallery(name: String) = dataSource.createRoom(
-- 
GitLab