commit
e599abc6ba
@ -7,6 +7,7 @@ Features ✨:
|
|||||||
|
|
||||||
Improvements 🙌:
|
Improvements 🙌:
|
||||||
- "Add Matrix app" menu is now always visible (#1495)
|
- "Add Matrix app" menu is now always visible (#1495)
|
||||||
|
- Handle `/op`, `/deop`, and `/nick` commands (#12)
|
||||||
|
|
||||||
Bugfix 🐛:
|
Bugfix 🐛:
|
||||||
- Fix dark theme issue on login screen (#1097)
|
- Fix dark theme issue on login screen (#1097)
|
||||||
|
@ -35,4 +35,18 @@ data class PowerLevelsContent(
|
|||||||
@Json(name = "users") val users: MutableMap<String, Int> = HashMap(),
|
@Json(name = "users") val users: MutableMap<String, Int> = HashMap(),
|
||||||
@Json(name = "state_default") val stateDefault: Int = Role.Moderator.value,
|
@Json(name = "state_default") val stateDefault: Int = Role.Moderator.value,
|
||||||
@Json(name = "notifications") val notifications: Map<String, Any> = HashMap()
|
@Json(name = "notifications") val notifications: Map<String, Any> = HashMap()
|
||||||
)
|
) {
|
||||||
|
/**
|
||||||
|
* Alter this content with a new power level for the specified user
|
||||||
|
*
|
||||||
|
* @param userId the userId to alter the power level of
|
||||||
|
* @param powerLevel the new power level, or null to set the default value.
|
||||||
|
*/
|
||||||
|
fun setUserPowerLevel(userId: String, powerLevel: Int?) {
|
||||||
|
if (powerLevel == null || powerLevel == usersDefault) {
|
||||||
|
users.remove(userId)
|
||||||
|
} else {
|
||||||
|
users[userId] = powerLevel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -44,6 +44,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
|
||||||
return Role.fromValue(value, powerLevelsContent.eventsDefault)
|
return Role.fromValue(value, powerLevelsContent.eventsDefault)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ object CommandParser {
|
|||||||
val userId = messageParts[1]
|
val userId = messageParts[1]
|
||||||
|
|
||||||
if (MatrixPatterns.isUserId(userId)) {
|
if (MatrixPatterns.isUserId(userId)) {
|
||||||
ParsedCommand.SetUserPowerLevel(userId, 0)
|
ParsedCommand.SetUserPowerLevel(userId, null)
|
||||||
} else {
|
} else {
|
||||||
ParsedCommand.ErrorSyntax(Command.SET_USER_POWER_LEVEL)
|
ParsedCommand.ErrorSyntax(Command.SET_USER_POWER_LEVEL)
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ sealed class ParsedCommand {
|
|||||||
class SendRainbowEmote(val message: CharSequence) : ParsedCommand()
|
class SendRainbowEmote(val message: CharSequence) : ParsedCommand()
|
||||||
class BanUser(val userId: String, val reason: String?) : ParsedCommand()
|
class BanUser(val userId: String, val reason: String?) : ParsedCommand()
|
||||||
class UnbanUser(val userId: String, val reason: String?) : ParsedCommand()
|
class UnbanUser(val userId: String, val reason: String?) : ParsedCommand()
|
||||||
class SetUserPowerLevel(val userId: String, val powerLevel: Int) : ParsedCommand()
|
class SetUserPowerLevel(val userId: String, val powerLevel: Int?) : ParsedCommand()
|
||||||
class Invite(val userId: String, val reason: String?) : ParsedCommand()
|
class Invite(val userId: String, val reason: String?) : ParsedCommand()
|
||||||
class JoinRoom(val roomAlias: String, val reason: String?) : ParsedCommand()
|
class JoinRoom(val roomAlias: String, val reason: String?) : ParsedCommand()
|
||||||
class PartRoom(val roomAlias: String, val reason: String?) : ParsedCommand()
|
class PartRoom(val roomAlias: String, val reason: String?) : ParsedCommand()
|
||||||
|
@ -41,6 +41,7 @@ import im.vector.matrix.android.api.session.file.FileService
|
|||||||
import im.vector.matrix.android.api.session.homeserver.HomeServerCapabilities
|
import im.vector.matrix.android.api.session.homeserver.HomeServerCapabilities
|
||||||
import im.vector.matrix.android.api.session.room.members.roomMemberQueryParams
|
import im.vector.matrix.android.api.session.room.members.roomMemberQueryParams
|
||||||
import im.vector.matrix.android.api.session.room.model.Membership
|
import im.vector.matrix.android.api.session.room.model.Membership
|
||||||
|
import im.vector.matrix.android.api.session.room.model.PowerLevelsContent
|
||||||
import im.vector.matrix.android.api.session.room.model.RoomMemberSummary
|
import im.vector.matrix.android.api.session.room.model.RoomMemberSummary
|
||||||
import im.vector.matrix.android.api.session.room.model.RoomSummary
|
import im.vector.matrix.android.api.session.room.model.RoomSummary
|
||||||
import im.vector.matrix.android.api.session.room.model.message.MessageContent
|
import im.vector.matrix.android.api.session.room.model.message.MessageContent
|
||||||
@ -448,8 +449,8 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||||||
popDraft()
|
popDraft()
|
||||||
}
|
}
|
||||||
is ParsedCommand.SetUserPowerLevel -> {
|
is ParsedCommand.SetUserPowerLevel -> {
|
||||||
// TODO
|
handleSetUserPowerLevel(slashCommandResult)
|
||||||
_viewEvents.post(RoomDetailViewEvents.SlashCommandNotImplemented)
|
popDraft()
|
||||||
}
|
}
|
||||||
is ParsedCommand.ClearScalarToken -> {
|
is ParsedCommand.ClearScalarToken -> {
|
||||||
// TODO
|
// TODO
|
||||||
@ -538,8 +539,8 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||||||
popDraft()
|
popDraft()
|
||||||
}
|
}
|
||||||
is ParsedCommand.ChangeDisplayName -> {
|
is ParsedCommand.ChangeDisplayName -> {
|
||||||
// TODO
|
handleChangeDisplayNameSlashCommand(slashCommandResult)
|
||||||
_viewEvents.post(RoomDetailViewEvents.SlashCommandNotImplemented)
|
popDraft()
|
||||||
}
|
}
|
||||||
is ParsedCommand.DiscardSession -> {
|
is ParsedCommand.DiscardSession -> {
|
||||||
if (room.isEncrypted()) {
|
if (room.isEncrypted()) {
|
||||||
@ -668,6 +669,23 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleSetUserPowerLevel(setUserPowerLevel: ParsedCommand.SetUserPowerLevel) {
|
||||||
|
val currentPowerLevelsContent = room.getStateEvent(EventType.STATE_ROOM_POWER_LEVELS)
|
||||||
|
?.content
|
||||||
|
?.toModel<PowerLevelsContent>() ?: return
|
||||||
|
|
||||||
|
launchSlashCommandFlow {
|
||||||
|
currentPowerLevelsContent.setUserPowerLevel(setUserPowerLevel.userId, setUserPowerLevel.powerLevel)
|
||||||
|
room.sendStateEvent(EventType.STATE_ROOM_POWER_LEVELS, null, currentPowerLevelsContent.toContent(), it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleChangeDisplayNameSlashCommand(changeDisplayName: ParsedCommand.ChangeDisplayName) {
|
||||||
|
launchSlashCommandFlow {
|
||||||
|
session.setDisplayName(session.myUserId, changeDisplayName.displayName, it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun handleKickSlashCommand(kick: ParsedCommand.KickUser) {
|
private fun handleKickSlashCommand(kick: ParsedCommand.KickUser) {
|
||||||
launchSlashCommandFlow {
|
launchSlashCommandFlow {
|
||||||
room.kick(kick.userId, kick.reason, it)
|
room.kick(kick.userId, kick.reason, it)
|
||||||
|
@ -162,7 +162,7 @@ class RoomMemberProfileViewModel @AssistedInject constructor(@Assisted private v
|
|||||||
} else if (action.askForValidation && state.isMine) {
|
} else if (action.askForValidation && state.isMine) {
|
||||||
_viewEvents.post(RoomMemberProfileViewEvents.ShowPowerLevelDemoteWarning(action.previousValue, action.newValue))
|
_viewEvents.post(RoomMemberProfileViewEvents.ShowPowerLevelDemoteWarning(action.previousValue, action.newValue))
|
||||||
} else {
|
} else {
|
||||||
currentPowerLevelsContent.users[state.userId] = action.newValue
|
currentPowerLevelsContent.setUserPowerLevel(state.userId, action.newValue)
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
_viewEvents.post(RoomMemberProfileViewEvents.Loading())
|
_viewEvents.post(RoomMemberProfileViewEvents.Loading())
|
||||||
try {
|
try {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user