Prepare to update canonical alias state

This commit is contained in:
Benoit Marty 2020-11-23 17:17:37 +01:00 committed by Benoit Marty
parent e1abd5a051
commit 93580c902f
3 changed files with 50 additions and 25 deletions

View File

@ -40,8 +40,10 @@ interface StateService {
/**
* Update the canonical alias of the room
* @param alias the canonical alias, or null to reset the canonical alias of this room
* @param altAliases the alternative aliases for this room. It should include the canonical alias if any.
*/
fun updateCanonicalAlias(alias: String, callback: MatrixCallback<Unit>): Cancelable
fun updateCanonicalAlias(alias: String?, altAliases: List<String>, callback: MatrixCallback<Unit>): Cancelable
/**
* Update the history readability of the room

View File

@ -24,6 +24,8 @@ import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.query.QueryStringValue
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.events.model.toContent
import org.matrix.android.sdk.api.session.room.model.RoomCanonicalAliasContent
import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
import org.matrix.android.sdk.api.session.room.state.StateService
import org.matrix.android.sdk.api.util.Cancelable
@ -104,10 +106,13 @@ internal class DefaultStateService @AssistedInject constructor(@Assisted private
)
}
override fun updateCanonicalAlias(alias: String, callback: MatrixCallback<Unit>): Cancelable {
override fun updateCanonicalAlias(alias: String?, altAliases: List<String>, callback: MatrixCallback<Unit>): Cancelable {
return sendStateEvent(
eventType = EventType.STATE_ROOM_CANONICAL_ALIAS,
body = mapOf("alias" to alias),
body = RoomCanonicalAliasContent(
canonicalAlias = alias,
alternativeAliases = altAliases
).toContent(),
callback = callback,
stateKey = null
)

View File

@ -30,6 +30,7 @@ import im.vector.app.core.extensions.exhaustive
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsObservableFactory
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.query.QueryStringValue
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.events.model.EventType
@ -160,27 +161,44 @@ class RoomAliasViewModel @AssistedInject constructor(@Assisted initialState: Roo
}
}
private fun handleAddAlias() {
private fun handleAddAlias() = withState { state ->
TODO()
}
private fun handleRemoveAlias(action: RoomAliasAction.RemoveAlias) {
private fun handleRemoveAlias(action: RoomAliasAction.RemoveAlias) = withState { state ->
updateCanonicalAlias(
state.canonicalAlias,
state.alternativeAliases - action.alias
)
}
private fun handleSetCanonicalAlias(action: RoomAliasAction.SetCanonicalAlias) = withState { state ->
updateCanonicalAlias(
action.canonicalAlias,
state.alternativeAliases
)
}
private fun handleUnsetCanonicalAlias() = withState { state ->
updateCanonicalAlias(
null,
state.alternativeAliases
)
}
private fun updateCanonicalAlias(canonicalAlias: String?, alternativeAliases: List<String>) {
postLoading(true)
viewModelScope.launch {
runCatching { session.deleteRoomAlias(action.alias) }
.onFailure { _viewEvents.post(RoomAliasViewEvents.Failure(it)) }
room.updateCanonicalAlias(canonicalAlias, alternativeAliases, object : MatrixCallback<Unit> {
override fun onSuccess(data: Unit) {
postLoading(false)
}
}
private fun handleSetCanonicalAlias(action: RoomAliasAction.SetCanonicalAlias) {
//room.updateCanonicalAlias()
TODO("Not yet implemented")
override fun onFailure(failure: Throwable) {
postLoading(false)
_viewEvents.post(RoomAliasViewEvents.Failure(failure))
}
private fun handleUnsetCanonicalAlias() {
// room.updateCanonicalAlias()
TODO("Not yet implemented")
}
)
}
private fun handleAddLocalAlias() = withState { state ->