Skip to content
Snippets Groups Projects
Commit 04c52c5a authored by Taras's avatar Taras
Browse files

Set power level on create room

parent c0e0483c
No related branches found
No related tags found
No related merge requests found
......@@ -6,6 +6,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import org.futo.circles.core.feature.room.RoomRelationsBuilder
import org.futo.circles.core.feature.workspace.SharedCircleDataSource
import org.futo.circles.core.feature.workspace.SpacesTreeAccountDataSource
import org.futo.circles.core.model.AccessLevel
import org.futo.circles.core.model.Circle
import org.futo.circles.core.model.CirclesRoom
import org.futo.circles.core.model.Timeline
......@@ -39,18 +40,23 @@ class CreateRoomDataSource @Inject constructor(
topic: String? = null,
iconUri: Uri? = null,
inviteIds: List<String>? = null,
isPublicCircle: Boolean = false
isPublicCircle: Boolean = false,
defaultUserPowerLevel: Int = AccessLevel.User.levelValue
): String {
val id = session.roomService().createRoom(
getParams(circlesRoom, name, topic, iconUri, inviteIds)
getParams(circlesRoom, name, topic, iconUri, inviteIds, defaultUserPowerLevel)
)
circlesRoom.parentAccountDataKey?.let { key ->
val parentId = spacesTreeAccountDataSource.getRoomIdByKey(key)
parentId?.let { roomRelationsBuilder.setRelations(id, it) }
}
if (circlesRoom is Circle) {
val timelineId = createCircleTimeline(id,
name ?: circlesRoom.nameId?.let { context.getString(it) }, iconUri, inviteIds
val timelineId = createCircleTimeline(
id,
name ?: circlesRoom.nameId?.let { context.getString(it) },
iconUri,
inviteIds,
defaultUserPowerLevel
)
if (isPublicCircle) sharedCircleDataSource.addToSharedCircles(timelineId)
}
......@@ -61,9 +67,11 @@ class CreateRoomDataSource @Inject constructor(
circleId: String,
name: String? = null,
iconUri: Uri? = null,
inviteIds: List<String>? = null
inviteIds: List<String>? = null,
defaultUserPowerLevel: Int = AccessLevel.User.levelValue
): String {
val timelineId = createRoom(Timeline(), name, null, iconUri, inviteIds)
val timelineId =
createRoom(Timeline(), name, null, iconUri, inviteIds, false, defaultUserPowerLevel)
roomRelationsBuilder.setRelations(timelineId, circleId)
return timelineId
}
......@@ -73,7 +81,8 @@ class CreateRoomDataSource @Inject constructor(
name: String? = null,
topic: String? = null,
iconUri: Uri? = null,
inviteIds: List<String>? = null
inviteIds: List<String>? = null,
defaultUserPowerLevel: Int = AccessLevel.User.levelValue
): CreateRoomParams {
val params = if (circlesRoom.isSpace()) {
CreateSpaceParams()
......@@ -81,7 +90,10 @@ class CreateRoomDataSource @Inject constructor(
CreateRoomParams().apply {
visibility = RoomDirectoryVisibility.PRIVATE
historyVisibility = RoomHistoryVisibility.SHARED
powerLevelContentOverride = PowerLevelsContent(invite = Role.Moderator.value)
powerLevelContentOverride = PowerLevelsContent(
invite = Role.Moderator.value,
usersDefault = defaultUserPowerLevel
)
enableEncryption()
}
}
......
......@@ -118,7 +118,9 @@ class CreateRoomDialogFragment :
binding.tilTopic.getText(),
selectedUsersFragment?.getSelectedUsersIds(),
roomType,
binding.btnPublic.isChecked
binding.btnPublic.isChecked,
AccessLevel.entries.getOrNull(binding.spUserRole.selectedItemPosition)
?: AccessLevel.User
)
}
......
......@@ -8,6 +8,7 @@ import org.futo.circles.core.base.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.AccessLevel
import org.futo.circles.core.model.Circle
import org.futo.circles.core.model.CircleRoomTypeArg
import org.futo.circles.core.model.Gallery
......@@ -31,44 +32,74 @@ class CreateRoomViewModel @Inject constructor(
topic: String,
inviteIds: List<String>?,
roomType: CircleRoomTypeArg,
isPublicCircle: Boolean
isPublicCircle: Boolean,
defaultUserAccessLevel: AccessLevel
) {
launchBg {
val result = createResult {
when (roomType) {
CircleRoomTypeArg.Circle -> createCircle(name, inviteIds, isPublicCircle)
CircleRoomTypeArg.Group -> createGroup(name, topic, inviteIds)
CircleRoomTypeArg.Photo -> createGallery(name)
CircleRoomTypeArg.Circle -> createCircle(
name,
inviteIds,
isPublicCircle,
defaultUserAccessLevel
)
CircleRoomTypeArg.Group -> createGroup(
name,
topic,
inviteIds,
defaultUserAccessLevel
)
CircleRoomTypeArg.Photo -> createGallery(
name,
inviteIds,
defaultUserAccessLevel
)
}
}
createRoomResponseLiveData.postValue(result)
}
}
private suspend fun createGroup(name: String, topic: String, inviteIds: List<String>?) =
dataSource.createRoom(
circlesRoom = Group(),
iconUri = selectedImageLiveData.value,
name = name,
topic = topic,
inviteIds = inviteIds
)
private suspend fun createGroup(
name: String, topic: String,
inviteIds: List<String>?,
defaultUserAccessLevel: AccessLevel
) = dataSource.createRoom(
circlesRoom = Group(),
iconUri = selectedImageLiveData.value,
name = name,
topic = topic,
inviteIds = inviteIds,
defaultUserPowerLevel = defaultUserAccessLevel.levelValue
)
private suspend fun createCircle(
name: String,
inviteIds: List<String>?,
isPublicCircle: Boolean
isPublicCircle: Boolean,
defaultUserAccessLevel: AccessLevel
) = dataSource.createRoom(
circlesRoom = Circle(),
name = name,
iconUri = selectedImageLiveData.value,
inviteIds = inviteIds,
isPublicCircle = isPublicCircle
isPublicCircle = isPublicCircle,
defaultUserPowerLevel = defaultUserAccessLevel.levelValue
)
private suspend fun createGallery(name: String) = dataSource.createRoom(
circlesRoom = Gallery(),
name = name,
iconUri = selectedImageLiveData.value
)
private suspend fun createGallery(
name: String,
inviteIds: List<String>?,
defaultUserAccessLevel: AccessLevel
) =
dataSource.createRoom(
circlesRoom = Gallery(),
name = name,
iconUri = selectedImageLiveData.value,
inviteIds = inviteIds,
defaultUserPowerLevel = defaultUserAccessLevel.levelValue
)
}
\ No newline at end of file
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