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 3a493229e1d813948affc80265937dd8388444af..285770d8b653caded683c1041024182c9dcc0d81 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 e0bba3d1d330b29704728987c25b9d1711e31f29..53dfd028d8c43ab58ab27f4538ff39b198be5146 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(