mirror of
https://github.com/element-hq/element-android
synced 2024-11-28 05:31:21 +03:00
Benoit Review: avoid duplicate (again) class PowerLevelsContent
This commit is contained in:
parent
46290f1ed4
commit
2cccbb3fce
11 changed files with 77 additions and 122 deletions
|
@ -28,43 +28,43 @@ data class PowerLevelsContent(
|
||||||
/**
|
/**
|
||||||
* The level required to ban a user. Defaults to 50 if unspecified.
|
* The level required to ban a user. Defaults to 50 if unspecified.
|
||||||
*/
|
*/
|
||||||
@Json(name = "ban") val ban: Int = Role.Moderator.value,
|
@Json(name = "ban") val ban: Int? = null,
|
||||||
/**
|
/**
|
||||||
* The level required to kick a user. Defaults to 50 if unspecified.
|
* The level required to kick a user. Defaults to 50 if unspecified.
|
||||||
*/
|
*/
|
||||||
@Json(name = "kick") val kick: Int = Role.Moderator.value,
|
@Json(name = "kick") val kick: Int? = null,
|
||||||
/**
|
/**
|
||||||
* The level required to invite a user. Defaults to 50 if unspecified.
|
* The level required to invite a user. Defaults to 50 if unspecified.
|
||||||
*/
|
*/
|
||||||
@Json(name = "invite") val invite: Int = Role.Moderator.value,
|
@Json(name = "invite") val invite: Int? = null,
|
||||||
/**
|
/**
|
||||||
* The level required to redact an event. Defaults to 50 if unspecified.
|
* The level required to redact an event. Defaults to 50 if unspecified.
|
||||||
*/
|
*/
|
||||||
@Json(name = "redact") val redact: Int = Role.Moderator.value,
|
@Json(name = "redact") val redact: Int? = null,
|
||||||
/**
|
/**
|
||||||
* The default level required to send message events. Can be overridden by the events key. Defaults to 0 if unspecified.
|
* The default level required to send message events. Can be overridden by the events key. Defaults to 0 if unspecified.
|
||||||
*/
|
*/
|
||||||
@Json(name = "events_default") val eventsDefault: Int = Role.Default.value,
|
@Json(name = "events_default") val eventsDefault: Int? = null,
|
||||||
/**
|
/**
|
||||||
* The level required to send specific event types. This is a mapping from event type to power level required.
|
* The level required to send specific event types. This is a mapping from event type to power level required.
|
||||||
*/
|
*/
|
||||||
@Json(name = "events") val events: Map<String, Int> = emptyMap(),
|
@Json(name = "events") val events: Map<String, Int>? = null,
|
||||||
/**
|
/**
|
||||||
* The default power level for every user in the room, unless their user_id is mentioned in the users key. Defaults to 0 if unspecified.
|
* The default power level for every user in the room, unless their user_id is mentioned in the users key. Defaults to 0 if unspecified.
|
||||||
*/
|
*/
|
||||||
@Json(name = "users_default") val usersDefault: Int = Role.Default.value,
|
@Json(name = "users_default") val usersDefault: Int? = null,
|
||||||
/**
|
/**
|
||||||
* The power levels for specific users. This is a mapping from user_id to power level for that user.
|
* The power levels for specific users. This is a mapping from user_id to power level for that user.
|
||||||
*/
|
*/
|
||||||
@Json(name = "users") val users: Map<String, Int> = emptyMap(),
|
@Json(name = "users") val users: Map<String, Int>? = null,
|
||||||
/**
|
/**
|
||||||
* The default level required to send state events. Can be overridden by the events key. Defaults to 50 if unspecified.
|
* The default level required to send state events. Can be overridden by the events key. Defaults to 50 if unspecified.
|
||||||
*/
|
*/
|
||||||
@Json(name = "state_default") val stateDefault: Int = Role.Moderator.value,
|
@Json(name = "state_default") val stateDefault: Int? = null,
|
||||||
/**
|
/**
|
||||||
* The power level requirements for specific notification types. This is a mapping from key to power level for that notifications key.
|
* The power level requirements for specific notification types. This is a mapping from key to power level for that notifications key.
|
||||||
*/
|
*/
|
||||||
@Json(name = "notifications") val notifications: Map<String, Any> = emptyMap()
|
@Json(name = "notifications") val notifications: Map<String, Any>? = null
|
||||||
) {
|
) {
|
||||||
/**
|
/**
|
||||||
* Return a copy of this content with a new power level for the specified user
|
* Return a copy of this content with a new power level for the specified user
|
||||||
|
@ -74,7 +74,7 @@ data class PowerLevelsContent(
|
||||||
*/
|
*/
|
||||||
fun setUserPowerLevel(userId: String, powerLevel: Int?): PowerLevelsContent {
|
fun setUserPowerLevel(userId: String, powerLevel: Int?): PowerLevelsContent {
|
||||||
return copy(
|
return copy(
|
||||||
users = users.toMutableMap().apply {
|
users = users.orEmpty().toMutableMap().apply {
|
||||||
if (powerLevel == null || powerLevel == usersDefault) {
|
if (powerLevel == null || powerLevel == usersDefault) {
|
||||||
remove(userId)
|
remove(userId)
|
||||||
} else {
|
} else {
|
||||||
|
@ -91,7 +91,7 @@ data class PowerLevelsContent(
|
||||||
* @return the level, default to Moderator if the key is not found
|
* @return the level, default to Moderator if the key is not found
|
||||||
*/
|
*/
|
||||||
fun notificationLevel(key: String): Int {
|
fun notificationLevel(key: String): Int {
|
||||||
return when (val value = notifications[key]) {
|
return when (val value = notifications.orEmpty()[key]) {
|
||||||
// the first implementation was a string value
|
// the first implementation was a string value
|
||||||
is String -> value.toInt()
|
is String -> value.toInt()
|
||||||
is Double -> value.toInt()
|
is Double -> value.toInt()
|
||||||
|
@ -107,3 +107,12 @@ data class PowerLevelsContent(
|
||||||
const val NOTIFICATIONS_ROOM_KEY = "room"
|
const val NOTIFICATIONS_ROOM_KEY = "room"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fallback to default value, defined in the Matrix specification
|
||||||
|
fun PowerLevelsContent.banOrDefault() = ban ?: Role.Moderator.value
|
||||||
|
fun PowerLevelsContent.kickOrDefault() = kick ?: Role.Moderator.value
|
||||||
|
fun PowerLevelsContent.inviteOrDefault() = invite ?: Role.Moderator.value
|
||||||
|
fun PowerLevelsContent.redactOrDefault() = redact ?: Role.Moderator.value
|
||||||
|
fun PowerLevelsContent.eventsDefaultOrDefault() = eventsDefault ?: Role.Default.value
|
||||||
|
fun PowerLevelsContent.usersDefaultOrDefault() = usersDefault ?: Role.Default.value
|
||||||
|
fun PowerLevelsContent.stateDefaultOrDefault() = stateDefault ?: Role.Moderator.value
|
||||||
|
|
|
@ -1,67 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.matrix.android.sdk.api.session.room.model
|
|
||||||
|
|
||||||
import com.squareup.moshi.Json
|
|
||||||
import com.squareup.moshi.JsonClass
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class representing the EventType.EVENT_TYPE_STATE_ROOM_POWER_LEVELS state event content.
|
|
||||||
*/
|
|
||||||
@JsonClass(generateAdapter = true)
|
|
||||||
data class PowerLevelsContentOverride(
|
|
||||||
/**
|
|
||||||
* The level required to ban a user. Defaults to 50 if unspecified.
|
|
||||||
*/
|
|
||||||
@Json(name = "ban") val ban: Int? = null,
|
|
||||||
/**
|
|
||||||
* The level required to kick a user. Defaults to 50 if unspecified.
|
|
||||||
*/
|
|
||||||
@Json(name = "kick") val kick: Int? = null,
|
|
||||||
/**
|
|
||||||
* The level required to invite a user. Defaults to 50 if unspecified.
|
|
||||||
*/
|
|
||||||
@Json(name = "invite") val invite: Int? = null,
|
|
||||||
/**
|
|
||||||
* The level required to redact an event. Defaults to 50 if unspecified.
|
|
||||||
*/
|
|
||||||
@Json(name = "redact") val redact: Int? = null,
|
|
||||||
/**
|
|
||||||
* The default level required to send message events. Can be overridden by the events key. Defaults to 0 if unspecified.
|
|
||||||
*/
|
|
||||||
@Json(name = "events_default") val eventsDefault: Int? = null,
|
|
||||||
/**
|
|
||||||
* The level required to send specific event types. This is a mapping from event type to power level required.
|
|
||||||
*/
|
|
||||||
@Json(name = "events") val events: Map<String, Int>? = null,
|
|
||||||
/**
|
|
||||||
* The default power level for every user in the room, unless their user_id is mentioned in the users key. Defaults to 0 if unspecified.
|
|
||||||
*/
|
|
||||||
@Json(name = "users_default") val usersDefault: Int? = null,
|
|
||||||
/**
|
|
||||||
* The power levels for specific users. This is a mapping from user_id to power level for that user.
|
|
||||||
*/
|
|
||||||
@Json(name = "users") val users: Map<String, Int>? = null,
|
|
||||||
/**
|
|
||||||
* The default level required to send state events. Can be overridden by the events key. Defaults to 50 if unspecified.
|
|
||||||
*/
|
|
||||||
@Json(name = "state_default") val stateDefault: Int? = null,
|
|
||||||
/**
|
|
||||||
* The power level requirements for specific notification types. This is a mapping from key to power level for that notifications key.
|
|
||||||
*/
|
|
||||||
@Json(name = "notifications") val notifications: Map<String, Any>? = null
|
|
||||||
)
|
|
|
@ -19,7 +19,7 @@ package org.matrix.android.sdk.api.session.room.model.create
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import org.matrix.android.sdk.api.session.identity.ThreePid
|
import org.matrix.android.sdk.api.session.identity.ThreePid
|
||||||
import org.matrix.android.sdk.api.session.room.model.GuestAccess
|
import org.matrix.android.sdk.api.session.room.model.GuestAccess
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContentOverride
|
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility
|
import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
|
import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
|
||||||
import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM
|
import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM
|
||||||
|
@ -128,7 +128,7 @@ open class CreateRoomParams {
|
||||||
/**
|
/**
|
||||||
* The power level content to override in the default power level event
|
* The power level content to override in the default power level event
|
||||||
*/
|
*/
|
||||||
var powerLevelContentOverride: PowerLevelsContentOverride? = null
|
var powerLevelContentOverride: PowerLevelsContent? = null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark as a direct message room.
|
* Mark as a direct message room.
|
||||||
|
|
|
@ -18,6 +18,13 @@
|
||||||
package org.matrix.android.sdk.api.session.room.powerlevels
|
package org.matrix.android.sdk.api.session.room.powerlevels
|
||||||
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.banOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.eventsDefaultOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.inviteOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.kickOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.redactOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.stateDefaultOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.usersDefaultOrDefault
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is an helper around PowerLevelsContent.
|
* This class is an helper around PowerLevelsContent.
|
||||||
|
@ -31,8 +38,9 @@ class PowerLevelsHelper(private val powerLevelsContent: PowerLevelsContent) {
|
||||||
* @return the power level
|
* @return the power level
|
||||||
*/
|
*/
|
||||||
fun getUserPowerLevelValue(userId: String): Int {
|
fun getUserPowerLevelValue(userId: String): Int {
|
||||||
return powerLevelsContent.users.get(userId)
|
return powerLevelsContent.users
|
||||||
?: powerLevelsContent.usersDefault
|
?.get(userId)
|
||||||
|
?: powerLevelsContent.usersDefaultOrDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,7 +52,7 @@ class PowerLevelsHelper(private val powerLevelsContent: PowerLevelsContent) {
|
||||||
fun getUserRole(userId: String): Role {
|
fun getUserRole(userId: String): Role {
|
||||||
val value = getUserPowerLevelValue(userId)
|
val value = getUserPowerLevelValue(userId)
|
||||||
// I think we should use powerLevelsContent.usersDefault, but Ganfra told me that it was like that on riot-Web
|
// I think we should use powerLevelsContent.usersDefault, but Ganfra told me that it was like that on riot-Web
|
||||||
return Role.fromValue(value, powerLevelsContent.eventsDefault)
|
return Role.fromValue(value, powerLevelsContent.eventsDefaultOrDefault())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -58,11 +66,11 @@ class PowerLevelsHelper(private val powerLevelsContent: PowerLevelsContent) {
|
||||||
fun isUserAllowedToSend(userId: String, isState: Boolean, eventType: String?): Boolean {
|
fun isUserAllowedToSend(userId: String, isState: Boolean, eventType: String?): Boolean {
|
||||||
return if (userId.isNotEmpty()) {
|
return if (userId.isNotEmpty()) {
|
||||||
val powerLevel = getUserPowerLevelValue(userId)
|
val powerLevel = getUserPowerLevelValue(userId)
|
||||||
val minimumPowerLevel = powerLevelsContent.events[eventType]
|
val minimumPowerLevel = powerLevelsContent.events?.get(eventType)
|
||||||
?: if (isState) {
|
?: if (isState) {
|
||||||
powerLevelsContent.stateDefault
|
powerLevelsContent.stateDefaultOrDefault()
|
||||||
} else {
|
} else {
|
||||||
powerLevelsContent.eventsDefault
|
powerLevelsContent.eventsDefaultOrDefault()
|
||||||
}
|
}
|
||||||
powerLevel >= minimumPowerLevel
|
powerLevel >= minimumPowerLevel
|
||||||
} else false
|
} else false
|
||||||
|
@ -75,7 +83,7 @@ class PowerLevelsHelper(private val powerLevelsContent: PowerLevelsContent) {
|
||||||
*/
|
*/
|
||||||
fun isUserAbleToInvite(userId: String): Boolean {
|
fun isUserAbleToInvite(userId: String): Boolean {
|
||||||
val powerLevel = getUserPowerLevelValue(userId)
|
val powerLevel = getUserPowerLevelValue(userId)
|
||||||
return powerLevel >= powerLevelsContent.invite
|
return powerLevel >= powerLevelsContent.inviteOrDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -85,7 +93,7 @@ class PowerLevelsHelper(private val powerLevelsContent: PowerLevelsContent) {
|
||||||
*/
|
*/
|
||||||
fun isUserAbleToBan(userId: String): Boolean {
|
fun isUserAbleToBan(userId: String): Boolean {
|
||||||
val powerLevel = getUserPowerLevelValue(userId)
|
val powerLevel = getUserPowerLevelValue(userId)
|
||||||
return powerLevel >= powerLevelsContent.ban
|
return powerLevel >= powerLevelsContent.banOrDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,7 +103,7 @@ class PowerLevelsHelper(private val powerLevelsContent: PowerLevelsContent) {
|
||||||
*/
|
*/
|
||||||
fun isUserAbleToKick(userId: String): Boolean {
|
fun isUserAbleToKick(userId: String): Boolean {
|
||||||
val powerLevel = getUserPowerLevelValue(userId)
|
val powerLevel = getUserPowerLevelValue(userId)
|
||||||
return powerLevel >= powerLevelsContent.kick
|
return powerLevel >= powerLevelsContent.kickOrDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -105,6 +113,6 @@ class PowerLevelsHelper(private val powerLevelsContent: PowerLevelsContent) {
|
||||||
*/
|
*/
|
||||||
fun isUserAbleToRedact(userId: String): Boolean {
|
fun isUserAbleToRedact(userId: String): Boolean {
|
||||||
val powerLevel = getUserPowerLevelValue(userId)
|
val powerLevel = getUserPowerLevelValue(userId)
|
||||||
return powerLevel >= powerLevelsContent.redact
|
return powerLevel >= powerLevelsContent.redactOrDefault()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
package org.matrix.android.sdk.api.session.space
|
package org.matrix.android.sdk.api.session.space
|
||||||
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContentOverride
|
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomType
|
import org.matrix.android.sdk.api.session.room.model.RoomType
|
||||||
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
|
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ class CreateSpaceParams : CreateRoomParams() {
|
||||||
|
|
||||||
// Space-rooms should be created with a power level for events_default of 100,
|
// Space-rooms should be created with a power level for events_default of 100,
|
||||||
// to prevent the rooms accidentally/maliciously clogging up with messages from random members of the space.
|
// to prevent the rooms accidentally/maliciously clogging up with messages from random members of the space.
|
||||||
powerLevelContentOverride = PowerLevelsContentOverride(
|
powerLevelContentOverride = PowerLevelsContent(
|
||||||
eventsDefault = 100
|
eventsDefault = 100
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ package org.matrix.android.sdk.internal.session.room.create
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
import org.matrix.android.sdk.api.session.events.model.Event
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContentOverride
|
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility
|
import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility
|
||||||
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset
|
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset
|
||||||
import org.matrix.android.sdk.internal.session.room.membership.threepid.ThreePidInviteBody
|
import org.matrix.android.sdk.internal.session.room.membership.threepid.ThreePidInviteBody
|
||||||
|
@ -111,5 +111,5 @@ internal data class CreateRoomBody(
|
||||||
* The power level content to override in the default power level event
|
* The power level content to override in the default power level event
|
||||||
*/
|
*/
|
||||||
@Json(name = "power_level_content_override")
|
@Json(name = "power_level_content_override")
|
||||||
val powerLevelContentOverride: PowerLevelsContentOverride?
|
val powerLevelContentOverride: PowerLevelsContent?
|
||||||
)
|
)
|
||||||
|
|
|
@ -21,22 +21,21 @@ import com.squareup.moshi.JsonClass
|
||||||
import org.matrix.android.sdk.api.session.events.model.toContent
|
import org.matrix.android.sdk.api.session.events.model.toContent
|
||||||
import org.matrix.android.sdk.api.session.events.model.toModel
|
import org.matrix.android.sdk.api.session.events.model.toModel
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
||||||
import org.matrix.android.sdk.api.session.room.powerlevels.Role
|
|
||||||
import org.matrix.android.sdk.api.util.JsonDict
|
import org.matrix.android.sdk.api.util.JsonDict
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
internal data class SerializablePowerLevelsContent(
|
internal data class SerializablePowerLevelsContent(
|
||||||
@Json(name = "ban") val ban: Int = Role.Moderator.value,
|
@Json(name = "ban") val ban: Int?,
|
||||||
@Json(name = "kick") val kick: Int = Role.Moderator.value,
|
@Json(name = "kick") val kick: Int?,
|
||||||
@Json(name = "invite") val invite: Int = Role.Moderator.value,
|
@Json(name = "invite") val invite: Int?,
|
||||||
@Json(name = "redact") val redact: Int = Role.Moderator.value,
|
@Json(name = "redact") val redact: Int?,
|
||||||
@Json(name = "events_default") val eventsDefault: Int = Role.Default.value,
|
@Json(name = "events_default") val eventsDefault: Int?,
|
||||||
@Json(name = "events") val events: Map<String, Int> = emptyMap(),
|
@Json(name = "events") val events: Map<String, Int>?,
|
||||||
@Json(name = "users_default") val usersDefault: Int = Role.Default.value,
|
@Json(name = "users_default") val usersDefault: Int?,
|
||||||
@Json(name = "users") val users: Map<String, Int> = emptyMap(),
|
@Json(name = "users") val users: Map<String, Int>?,
|
||||||
@Json(name = "state_default") val stateDefault: Int = Role.Moderator.value,
|
@Json(name = "state_default") val stateDefault: Int?,
|
||||||
// `Int` is the diff here (instead of `Any`)
|
// `Int` is the diff here (instead of `Any`)
|
||||||
@Json(name = "notifications") val notifications: Map<String, Int> = emptyMap()
|
@Json(name = "notifications") val notifications: Map<String, Int>?
|
||||||
)
|
)
|
||||||
|
|
||||||
internal fun JsonDict.toSafePowerLevelsContentDict(): JsonDict {
|
internal fun JsonDict.toSafePowerLevelsContentDict(): JsonDict {
|
||||||
|
@ -52,7 +51,7 @@ internal fun JsonDict.toSafePowerLevelsContentDict(): JsonDict {
|
||||||
usersDefault = content.usersDefault,
|
usersDefault = content.usersDefault,
|
||||||
users = content.users,
|
users = content.users,
|
||||||
stateDefault = content.stateDefault,
|
stateDefault = content.stateDefault,
|
||||||
notifications = content.notifications.mapValues { content.notificationLevel(it.key) }
|
notifications = content.notifications?.mapValues { content.notificationLevel(it.key) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
?.toContent()
|
?.toContent()
|
||||||
|
|
|
@ -26,7 +26,6 @@ import org.matrix.android.sdk.api.session.events.model.toModel
|
||||||
import org.matrix.android.sdk.api.session.room.model.GuestAccess
|
import org.matrix.android.sdk.api.session.room.model.GuestAccess
|
||||||
import org.matrix.android.sdk.api.session.room.model.Membership
|
import org.matrix.android.sdk.api.session.room.model.Membership
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContentOverride
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
|
import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||||
import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
||||||
|
@ -74,7 +73,7 @@ internal class DefaultSpaceService @Inject constructor(
|
||||||
this.preset = if (isPublic) CreateRoomPreset.PRESET_PUBLIC_CHAT else CreateRoomPreset.PRESET_PRIVATE_CHAT
|
this.preset = if (isPublic) CreateRoomPreset.PRESET_PUBLIC_CHAT else CreateRoomPreset.PRESET_PRIVATE_CHAT
|
||||||
this.avatarUri = avatarUri
|
this.avatarUri = avatarUri
|
||||||
if (isPublic) {
|
if (isPublic) {
|
||||||
this.powerLevelContentOverride = (powerLevelContentOverride ?: PowerLevelsContentOverride()).copy(
|
this.powerLevelContentOverride = (powerLevelContentOverride ?: PowerLevelsContent()).copy(
|
||||||
invite = 0
|
invite = 0
|
||||||
)
|
)
|
||||||
this.historyVisibility = RoomHistoryVisibility.WORLD_READABLE
|
this.historyVisibility = RoomHistoryVisibility.WORLD_READABLE
|
||||||
|
|
|
@ -121,8 +121,8 @@ class NoticeEventFormatter @Inject constructor(
|
||||||
val powerLevelsContent: PowerLevelsContent = event.getClearContent().toModel() ?: return null
|
val powerLevelsContent: PowerLevelsContent = event.getClearContent().toModel() ?: return null
|
||||||
val previousPowerLevelsContent: PowerLevelsContent = event.resolvedPrevContent().toModel() ?: return null
|
val previousPowerLevelsContent: PowerLevelsContent = event.resolvedPrevContent().toModel() ?: return null
|
||||||
val userIds = HashSet<String>()
|
val userIds = HashSet<String>()
|
||||||
userIds.addAll(powerLevelsContent.users.keys)
|
userIds.addAll(powerLevelsContent.users.orEmpty().keys)
|
||||||
userIds.addAll(previousPowerLevelsContent.users.keys)
|
userIds.addAll(previousPowerLevelsContent.users.orEmpty().keys)
|
||||||
val diffs = ArrayList<String>()
|
val diffs = ArrayList<String>()
|
||||||
userIds.forEach { userId ->
|
userIds.forEach { userId ->
|
||||||
val from = PowerLevelsHelper(previousPowerLevelsContent).getUserRole(userId)
|
val from = PowerLevelsHelper(previousPowerLevelsContent).getUserRole(userId)
|
||||||
|
|
|
@ -27,6 +27,13 @@ import im.vector.app.core.resources.StringProvider
|
||||||
import im.vector.app.features.discovery.settingsInfoItem
|
import im.vector.app.features.discovery.settingsInfoItem
|
||||||
import im.vector.app.features.form.formAdvancedToggleItem
|
import im.vector.app.features.form.formAdvancedToggleItem
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.banOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.eventsDefaultOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.inviteOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.kickOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.redactOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.stateDefaultOrDefault
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.usersDefaultOrDefault
|
||||||
import org.matrix.android.sdk.api.session.room.powerlevels.Role
|
import org.matrix.android.sdk.api.session.room.powerlevels.Role
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@ -139,21 +146,21 @@ class RoomPermissionsController @Inject constructor(
|
||||||
|
|
||||||
private fun getCurrentRole(editablePermission: EditablePermission, content: PowerLevelsContent): Role {
|
private fun getCurrentRole(editablePermission: EditablePermission, content: PowerLevelsContent): Role {
|
||||||
val value = when (editablePermission) {
|
val value = when (editablePermission) {
|
||||||
is EditablePermission.EventTypeEditablePermission -> content.events[editablePermission.eventType] ?: content.stateDefault
|
is EditablePermission.EventTypeEditablePermission -> content.events?.get(editablePermission.eventType) ?: content.stateDefaultOrDefault()
|
||||||
is EditablePermission.DefaultRole -> content.usersDefault
|
is EditablePermission.DefaultRole -> content.usersDefaultOrDefault()
|
||||||
is EditablePermission.SendMessages -> content.eventsDefault
|
is EditablePermission.SendMessages -> content.eventsDefaultOrDefault()
|
||||||
is EditablePermission.InviteUsers -> content.invite
|
is EditablePermission.InviteUsers -> content.inviteOrDefault()
|
||||||
is EditablePermission.ChangeSettings -> content.stateDefault
|
is EditablePermission.ChangeSettings -> content.stateDefaultOrDefault()
|
||||||
is EditablePermission.KickUsers -> content.kick
|
is EditablePermission.KickUsers -> content.kickOrDefault()
|
||||||
is EditablePermission.BanUsers -> content.ban
|
is EditablePermission.BanUsers -> content.banOrDefault()
|
||||||
is EditablePermission.RemoveMessagesSentByOthers -> content.redact
|
is EditablePermission.RemoveMessagesSentByOthers -> content.redactOrDefault()
|
||||||
is EditablePermission.NotifyEveryone -> content.notificationLevel(PowerLevelsContent.NOTIFICATIONS_ROOM_KEY)
|
is EditablePermission.NotifyEveryone -> content.notificationLevel(PowerLevelsContent.NOTIFICATIONS_ROOM_KEY)
|
||||||
}
|
}
|
||||||
|
|
||||||
return Role.fromValue(
|
return Role.fromValue(
|
||||||
value,
|
value,
|
||||||
when (editablePermission) {
|
when (editablePermission) {
|
||||||
is EditablePermission.EventTypeEditablePermission -> content.stateDefault
|
is EditablePermission.EventTypeEditablePermission -> content.stateDefaultOrDefault()
|
||||||
is EditablePermission.DefaultRole -> Role.Default.value
|
is EditablePermission.DefaultRole -> Role.Default.value
|
||||||
is EditablePermission.SendMessages -> Role.Default.value
|
is EditablePermission.SendMessages -> Role.Default.value
|
||||||
is EditablePermission.InviteUsers -> Role.Moderator.value
|
is EditablePermission.InviteUsers -> Role.Moderator.value
|
||||||
|
|
|
@ -114,7 +114,7 @@ class RoomPermissionsViewModel @AssistedInject constructor(@Assisted initialStat
|
||||||
try {
|
try {
|
||||||
val newPowerLevelsContent = when (action.editablePermission) {
|
val newPowerLevelsContent = when (action.editablePermission) {
|
||||||
is EditablePermission.EventTypeEditablePermission -> currentPowerLevel.copy(
|
is EditablePermission.EventTypeEditablePermission -> currentPowerLevel.copy(
|
||||||
events = currentPowerLevel.events.toMutableMap().apply {
|
events = currentPowerLevel.events.orEmpty().toMutableMap().apply {
|
||||||
put(action.editablePermission.eventType, action.powerLevel)
|
put(action.editablePermission.eventType, action.powerLevel)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -126,7 +126,7 @@ class RoomPermissionsViewModel @AssistedInject constructor(@Assisted initialStat
|
||||||
is EditablePermission.BanUsers -> currentPowerLevel.copy(ban = action.powerLevel)
|
is EditablePermission.BanUsers -> currentPowerLevel.copy(ban = action.powerLevel)
|
||||||
is EditablePermission.RemoveMessagesSentByOthers -> currentPowerLevel.copy(redact = action.powerLevel)
|
is EditablePermission.RemoveMessagesSentByOthers -> currentPowerLevel.copy(redact = action.powerLevel)
|
||||||
is EditablePermission.NotifyEveryone -> currentPowerLevel.copy(
|
is EditablePermission.NotifyEveryone -> currentPowerLevel.copy(
|
||||||
notifications = currentPowerLevel.notifications.toMutableMap().apply {
|
notifications = currentPowerLevel.notifications.orEmpty().toMutableMap().apply {
|
||||||
put(PowerLevelsContent.NOTIFICATIONS_ROOM_KEY, action.powerLevel)
|
put(PowerLevelsContent.NOTIFICATIONS_ROOM_KEY, action.powerLevel)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue