mirror of
https://github.com/vector-im/riotX-android
synced 2025-10-05 15:52:47 +02:00
misc : clean up after PR review
This commit is contained in:
@@ -30,6 +30,7 @@ import org.matrix.android.sdk.api.session.room.model.ReadReceipt
|
|||||||
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
|
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
|
||||||
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.notification.RoomNotificationState
|
import org.matrix.android.sdk.api.session.room.notification.RoomNotificationState
|
||||||
|
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
|
||||||
import org.matrix.android.sdk.api.session.room.send.UserDraft
|
import org.matrix.android.sdk.api.session.room.send.UserDraft
|
||||||
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
|
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
|
||||||
import org.matrix.android.sdk.api.util.Optional
|
import org.matrix.android.sdk.api.util.Optional
|
||||||
@@ -95,6 +96,10 @@ class FlowRoom(private val room: Room) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun liveRoomPowerLevels(): Flow<RoomPowerLevels> {
|
||||||
|
return room.stateService().getRoomPowerLevelsLive().asFlow()
|
||||||
|
}
|
||||||
|
|
||||||
fun liveReadMarker(): Flow<Optional<String>> {
|
fun liveReadMarker(): Flow<Optional<String>> {
|
||||||
return room.readService().getReadMarkerLive().asFlow()
|
return room.readService().getReadMarkerLive().asFlow()
|
||||||
}
|
}
|
||||||
|
@@ -17,12 +17,7 @@
|
|||||||
package org.matrix.android.sdk.api.session.room
|
package org.matrix.android.sdk.api.session.room
|
||||||
|
|
||||||
import org.matrix.android.sdk.api.query.QueryStateEventValue
|
import org.matrix.android.sdk.api.query.QueryStateEventValue
|
||||||
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.Event
|
||||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
|
||||||
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.create.getRoomCreateContentWithSender
|
|
||||||
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
|
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
|
||||||
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
|
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
|
||||||
|
|
||||||
@@ -45,10 +40,5 @@ fun Room.getStateEvent(eventType: String, stateKey: QueryStateEventValue): Event
|
|||||||
* Get the current RoomPowerLevels of the room.
|
* Get the current RoomPowerLevels of the room.
|
||||||
*/
|
*/
|
||||||
fun Room.getRoomPowerLevels(): RoomPowerLevels {
|
fun Room.getRoomPowerLevels(): RoomPowerLevels {
|
||||||
val powerLevelsContent = getStateEvent(EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)?.content?.toModel<PowerLevelsContent>()
|
return stateService().getRoomPowerLevels()
|
||||||
val roomCreateContent = getStateEvent(EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)?.getRoomCreateContentWithSender()
|
|
||||||
return RoomPowerLevels(
|
|
||||||
powerLevelsContent,
|
|
||||||
roomCreateContent
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,7 @@ import org.matrix.android.sdk.api.session.room.model.GuestAccess
|
|||||||
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.RoomJoinRules
|
import org.matrix.android.sdk.api.session.room.model.RoomJoinRules
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesAllowEntry
|
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesAllowEntry
|
||||||
|
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
|
||||||
import org.matrix.android.sdk.api.util.JsonDict
|
import org.matrix.android.sdk.api.util.JsonDict
|
||||||
import org.matrix.android.sdk.api.util.Optional
|
import org.matrix.android.sdk.api.util.Optional
|
||||||
|
|
||||||
@@ -106,4 +107,6 @@ interface StateService {
|
|||||||
suspend fun setJoinRulePublic()
|
suspend fun setJoinRulePublic()
|
||||||
suspend fun setJoinRuleInviteOnly()
|
suspend fun setJoinRuleInviteOnly()
|
||||||
suspend fun setJoinRuleRestricted(allowList: List<String>)
|
suspend fun setJoinRuleRestricted(allowList: List<String>)
|
||||||
|
fun getRoomPowerLevels(): RoomPowerLevels
|
||||||
|
fun getRoomPowerLevelsLive(): LiveData<RoomPowerLevels>
|
||||||
}
|
}
|
||||||
|
@@ -24,13 +24,11 @@ import org.matrix.android.sdk.api.session.pushrules.SenderNotificationPermission
|
|||||||
import org.matrix.android.sdk.api.session.room.getRoomPowerLevels
|
import org.matrix.android.sdk.api.session.room.getRoomPowerLevels
|
||||||
import org.matrix.android.sdk.internal.di.UserId
|
import org.matrix.android.sdk.internal.di.UserId
|
||||||
import org.matrix.android.sdk.internal.session.room.RoomGetter
|
import org.matrix.android.sdk.internal.session.room.RoomGetter
|
||||||
import org.matrix.android.sdk.internal.session.room.state.StateEventDataSource
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal class DefaultConditionResolver @Inject constructor(
|
internal class DefaultConditionResolver @Inject constructor(
|
||||||
private val roomGetter: RoomGetter,
|
private val roomGetter: RoomGetter,
|
||||||
@UserId private val userId: String,
|
@UserId private val userId: String,
|
||||||
private val stateEventDataSource: StateEventDataSource,
|
|
||||||
) : ConditionResolver {
|
) : ConditionResolver {
|
||||||
|
|
||||||
override fun resolveEventMatchCondition(
|
override fun resolveEventMatchCondition(
|
||||||
|
@@ -17,17 +17,53 @@
|
|||||||
|
|
||||||
package org.matrix.android.sdk.internal.session.room.powerlevels
|
package org.matrix.android.sdk.internal.session.room.powerlevels
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData
|
||||||
|
import androidx.lifecycle.MediatorLiveData
|
||||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
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.EventType
|
||||||
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.model.create.getRoomCreateContentWithSender
|
import org.matrix.android.sdk.api.session.room.model.create.getRoomCreateContentWithSender
|
||||||
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
|
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
|
||||||
|
import org.matrix.android.sdk.api.util.Optional
|
||||||
import org.matrix.android.sdk.internal.session.room.state.StateEventDataSource
|
import org.matrix.android.sdk.internal.session.room.state.StateEventDataSource
|
||||||
|
|
||||||
internal fun StateEventDataSource.getRoomPowerLevels(roomId: String): RoomPowerLevels {
|
internal fun StateEventDataSource.getRoomPowerLevels(roomId: String): RoomPowerLevels {
|
||||||
val powerLevelsContent = getStateEvent(roomId, EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
|
val powerLevelsEvent = getStateEvent(roomId, EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
|
||||||
?.content?.toModel<PowerLevelsContent>()
|
val roomCreateEvent = getStateEvent(roomId, EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)
|
||||||
val roomCreateContent = getStateEvent(roomId, EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)?.getRoomCreateContentWithSender()
|
return createRoomPowerLevels(powerLevelsEvent = powerLevelsEvent, roomCreateEvent = roomCreateEvent)
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun StateEventDataSource.getRoomPowerLevelsLive(roomId: String): LiveData<RoomPowerLevels> {
|
||||||
|
val powerLevelsEventLive = getStateEventLive(roomId, EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
|
||||||
|
val roomCreateEventLive = getStateEventLive(roomId, EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)
|
||||||
|
val resultLiveData = MediatorLiveData<RoomPowerLevels>()
|
||||||
|
|
||||||
|
fun emitIfReady(powerLevelEvent: Optional<Event>?, roomCreateEvent: Optional<Event>?) {
|
||||||
|
if (powerLevelEvent != null && roomCreateEvent != null) {
|
||||||
|
val roomPowerLevels = createRoomPowerLevels(powerLevelEvent.get(), roomCreateEvent.get())
|
||||||
|
resultLiveData.postValue(roomPowerLevels)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resultLiveData.apply {
|
||||||
|
var powerLevelEvent: Optional<Event>? = null
|
||||||
|
var roomCreateEvent: Optional<Event>? = null
|
||||||
|
|
||||||
|
addSource(powerLevelsEventLive) {
|
||||||
|
powerLevelEvent = it
|
||||||
|
emitIfReady(powerLevelEvent, roomCreateEvent)
|
||||||
|
}
|
||||||
|
addSource(roomCreateEventLive) {
|
||||||
|
roomCreateEvent = it
|
||||||
|
emitIfReady(powerLevelEvent, roomCreateEvent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resultLiveData
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createRoomPowerLevels(powerLevelsEvent: Event?, roomCreateEvent: Event?): RoomPowerLevels {
|
||||||
|
val powerLevelsContent = powerLevelsEvent?.content?.toModel<PowerLevelsContent>()
|
||||||
|
val roomCreateContent = roomCreateEvent?.getRoomCreateContentWithSender()
|
||||||
return RoomPowerLevels(powerLevelsContent, roomCreateContent)
|
return RoomPowerLevels(powerLevelsContent, roomCreateContent)
|
||||||
}
|
}
|
||||||
|
@@ -31,11 +31,14 @@ import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
|
|||||||
import org.matrix.android.sdk.api.session.room.model.RoomJoinRules
|
import org.matrix.android.sdk.api.session.room.model.RoomJoinRules
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesAllowEntry
|
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesAllowEntry
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesContent
|
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesContent
|
||||||
|
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
|
||||||
import org.matrix.android.sdk.api.session.room.state.StateService
|
import org.matrix.android.sdk.api.session.room.state.StateService
|
||||||
import org.matrix.android.sdk.api.util.JsonDict
|
import org.matrix.android.sdk.api.util.JsonDict
|
||||||
import org.matrix.android.sdk.api.util.MimeTypes
|
import org.matrix.android.sdk.api.util.MimeTypes
|
||||||
import org.matrix.android.sdk.api.util.Optional
|
import org.matrix.android.sdk.api.util.Optional
|
||||||
import org.matrix.android.sdk.internal.session.content.FileUploader
|
import org.matrix.android.sdk.internal.session.content.FileUploader
|
||||||
|
import org.matrix.android.sdk.internal.session.room.powerlevels.getRoomPowerLevels
|
||||||
|
import org.matrix.android.sdk.internal.session.room.powerlevels.getRoomPowerLevelsLive
|
||||||
|
|
||||||
internal class DefaultStateService @AssistedInject constructor(
|
internal class DefaultStateService @AssistedInject constructor(
|
||||||
@Assisted private val roomId: String,
|
@Assisted private val roomId: String,
|
||||||
@@ -65,6 +68,14 @@ internal class DefaultStateService @AssistedInject constructor(
|
|||||||
return stateEventDataSource.getStateEventsLive(roomId, eventTypes, stateKey)
|
return stateEventDataSource.getStateEventsLive(roomId, eventTypes, stateKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getRoomPowerLevels(): RoomPowerLevels {
|
||||||
|
return stateEventDataSource.getRoomPowerLevels(roomId)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getRoomPowerLevelsLive(): LiveData<RoomPowerLevels> {
|
||||||
|
return stateEventDataSource.getRoomPowerLevelsLive(roomId)
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun sendStateEvent(
|
override suspend fun sendStateEvent(
|
||||||
eventType: String,
|
eventType: String,
|
||||||
stateKey: String,
|
stateKey: String,
|
||||||
|
@@ -23,12 +23,10 @@ import org.matrix.android.sdk.api.query.QueryStringValue
|
|||||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||||
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.homeserver.RoomVersionStatus
|
import org.matrix.android.sdk.api.session.homeserver.RoomVersionStatus
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent
|
import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.create.getRoomCreateContentWithSender
|
|
||||||
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
|
|
||||||
import org.matrix.android.sdk.api.session.room.version.RoomVersionService
|
import org.matrix.android.sdk.api.session.room.version.RoomVersionService
|
||||||
import org.matrix.android.sdk.internal.session.homeserver.HomeServerCapabilitiesDataSource
|
import org.matrix.android.sdk.internal.session.homeserver.HomeServerCapabilitiesDataSource
|
||||||
|
import org.matrix.android.sdk.internal.session.room.powerlevels.getRoomPowerLevels
|
||||||
import org.matrix.android.sdk.internal.session.room.state.StateEventDataSource
|
import org.matrix.android.sdk.internal.session.room.state.StateEventDataSource
|
||||||
|
|
||||||
internal class DefaultRoomVersionService @AssistedInject constructor(
|
internal class DefaultRoomVersionService @AssistedInject constructor(
|
||||||
@@ -72,16 +70,7 @@ internal class DefaultRoomVersionService @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun userMayUpgradeRoom(userId: String): Boolean {
|
override fun userMayUpgradeRoom(userId: String): Boolean {
|
||||||
val powerLevelsContent = stateEventDataSource.getStateEvent(roomId, EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
|
val roomPowerLevels = stateEventDataSource.getRoomPowerLevels(roomId)
|
||||||
?.content?.toModel<PowerLevelsContent>()
|
|
||||||
|
|
||||||
val roomCreateContent = stateEventDataSource.getStateEvent(roomId, EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)
|
|
||||||
?.getRoomCreateContentWithSender()
|
|
||||||
|
|
||||||
val roomPowerLevels = RoomPowerLevels(
|
|
||||||
powerLevelsContent = powerLevelsContent,
|
|
||||||
roomCreateContent = roomCreateContent
|
|
||||||
)
|
|
||||||
return roomPowerLevels.isUserAllowedToSend(userId, true, EventType.STATE_ROOM_TOMBSTONE)
|
return roomPowerLevels.isUserAllowedToSend(userId, true, EventType.STATE_ROOM_TOMBSTONE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -54,7 +54,6 @@ import im.vector.app.features.home.room.typing.TypingHelper
|
|||||||
import im.vector.app.features.location.live.StopLiveLocationShareUseCase
|
import im.vector.app.features.location.live.StopLiveLocationShareUseCase
|
||||||
import im.vector.app.features.location.live.tracking.LocationSharingServiceConnection
|
import im.vector.app.features.location.live.tracking.LocationSharingServiceConnection
|
||||||
import im.vector.app.features.notifications.NotificationDrawerManager
|
import im.vector.app.features.notifications.NotificationDrawerManager
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.app.features.raw.wellknown.CryptoConfig
|
import im.vector.app.features.raw.wellknown.CryptoConfig
|
||||||
import im.vector.app.features.raw.wellknown.getOutboundSessionKeySharingStrategyOrDefault
|
import im.vector.app.features.raw.wellknown.getOutboundSessionKeySharingStrategyOrDefault
|
||||||
import im.vector.app.features.raw.wellknown.withElementWellKnown
|
import im.vector.app.features.raw.wellknown.withElementWellKnown
|
||||||
@@ -302,7 +301,7 @@ class TimelineViewModel @AssistedInject constructor(
|
|||||||
|
|
||||||
private fun observePowerLevel() {
|
private fun observePowerLevel() {
|
||||||
if (room == null) return
|
if (room == null) return
|
||||||
PowerLevelsFlowFactory(room).createFlow()
|
room.flow().liveRoomPowerLevels()
|
||||||
.onEach { powerLevels ->
|
.onEach { powerLevels ->
|
||||||
val canInvite = powerLevels.isUserAbleToInvite(session.myUserId)
|
val canInvite = powerLevels.isUserAbleToInvite(session.myUserId)
|
||||||
val isAllowedToManageWidgets = session.widgetService().hasPermissionsToHandleWidgets(room.roomId)
|
val isAllowedToManageWidgets = session.widgetService().hasPermissionsToHandleWidgets(room.roomId)
|
||||||
|
@@ -30,7 +30,6 @@ import im.vector.app.features.home.room.detail.ChatEffect
|
|||||||
import im.vector.app.features.home.room.detail.composer.rainbow.RainbowGenerator
|
import im.vector.app.features.home.room.detail.composer.rainbow.RainbowGenerator
|
||||||
import im.vector.app.features.home.room.detail.composer.voice.VoiceMessageRecorderView
|
import im.vector.app.features.home.room.detail.composer.voice.VoiceMessageRecorderView
|
||||||
import im.vector.app.features.home.room.detail.toMessageType
|
import im.vector.app.features.home.room.detail.toMessageType
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.app.features.session.coroutineScope
|
import im.vector.app.features.session.coroutineScope
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import im.vector.app.features.voice.VoiceFailure
|
import im.vector.app.features.voice.VoiceFailure
|
||||||
@@ -179,7 +178,7 @@ class MessageComposerViewModel @AssistedInject constructor(
|
|||||||
|
|
||||||
private fun observePowerLevelAndEncryption(room: Room) {
|
private fun observePowerLevelAndEncryption(room: Room) {
|
||||||
combine(
|
combine(
|
||||||
PowerLevelsFlowFactory(room).createFlow(),
|
room.flow().liveRoomPowerLevels(),
|
||||||
room.flow().liveRoomSummary().unwrap()
|
room.flow().liveRoomSummary().unwrap()
|
||||||
) { pl, sum ->
|
) { pl, sum ->
|
||||||
val canSendMessage = pl.isUserAllowedToSend(session.myUserId, false, EventType.MESSAGE)
|
val canSendMessage = pl.isUserAllowedToSend(session.myUserId, false, EventType.MESSAGE)
|
||||||
|
@@ -23,7 +23,6 @@ import im.vector.app.features.home.room.detail.timeline.format.NoticeEventFormat
|
|||||||
import im.vector.app.features.html.EventHtmlRenderer
|
import im.vector.app.features.html.EventHtmlRenderer
|
||||||
import im.vector.app.features.html.PillsPostProcessor
|
import im.vector.app.features.html.PillsPostProcessor
|
||||||
import im.vector.app.features.html.VectorHtmlCompressor
|
import im.vector.app.features.html.VectorHtmlCompressor
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.app.features.reactions.data.EmojiDataSource
|
import im.vector.app.features.reactions.data.EmojiDataSource
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import im.vector.lib.strings.CommonStrings
|
import im.vector.lib.strings.CommonStrings
|
||||||
@@ -115,7 +114,7 @@ class MessageActionsViewModel @AssistedInject constructor(
|
|||||||
if (room == null) {
|
if (room == null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
PowerLevelsFlowFactory(room).createFlow()
|
room.flow().liveRoomPowerLevels()
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
val canReact = roomPowerLevels.isUserAllowedToSend(session.myUserId, false, EventType.REACTION)
|
val canReact = roomPowerLevels.isUserAllowedToSend(session.myUserId, false, EventType.REACTION)
|
||||||
val canRedact = roomPowerLevels.isUserAbleToRedact(session.myUserId)
|
val canRedact = roomPowerLevels.isUserAbleToRedact(session.myUserId)
|
||||||
|
@@ -19,7 +19,6 @@ import im.vector.app.core.platform.VectorViewModel
|
|||||||
import im.vector.app.core.utils.PermissionChecker
|
import im.vector.app.core.utils.PermissionChecker
|
||||||
import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider
|
import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider
|
||||||
import im.vector.app.features.location.domain.usecase.CompareLocationsUseCase
|
import im.vector.app.features.location.domain.usecase.CompareLocationsUseCase
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
@@ -35,6 +34,7 @@ import org.matrix.android.sdk.api.session.events.model.EventType
|
|||||||
import org.matrix.android.sdk.api.session.getRoom
|
import org.matrix.android.sdk.api.session.getRoom
|
||||||
import org.matrix.android.sdk.api.session.getUserOrDefault
|
import org.matrix.android.sdk.api.session.getUserOrDefault
|
||||||
import org.matrix.android.sdk.api.util.toMatrixItem
|
import org.matrix.android.sdk.api.util.toMatrixItem
|
||||||
|
import org.matrix.android.sdk.flow.flow
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -72,7 +72,7 @@ class LocationSharingViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun observePowerLevelsForLiveLocationSharing() {
|
private fun observePowerLevelsForLiveLocationSharing() {
|
||||||
PowerLevelsFlowFactory(room).createFlow()
|
room.flow().liveRoomPowerLevels()
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
.setOnEach { roomPowerLevels ->
|
.setOnEach { roomPowerLevels ->
|
||||||
val canShareLiveLocation = EventType.STATE_ROOM_BEACON_INFO.values
|
val canShareLiveLocation = EventType.STATE_ROOM_BEACON_INFO.values
|
||||||
|
@@ -1,47 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020-2024 New Vector Ltd.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
||||||
* Please see LICENSE files in the repository root for full details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package im.vector.app.features.powerlevel
|
|
||||||
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
import kotlinx.coroutines.flow.combine
|
|
||||||
import kotlinx.coroutines.flow.flowOn
|
|
||||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
|
||||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
|
||||||
import org.matrix.android.sdk.api.session.events.model.toModel
|
|
||||||
import org.matrix.android.sdk.api.session.room.Room
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.create.getRoomCreateContentWithSender
|
|
||||||
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
|
|
||||||
import org.matrix.android.sdk.flow.flow
|
|
||||||
import org.matrix.android.sdk.flow.mapOptional
|
|
||||||
|
|
||||||
class PowerLevelsFlowFactory(private val room: Room) {
|
|
||||||
|
|
||||||
fun createFlow(): Flow<RoomPowerLevels> {
|
|
||||||
val flowRoom = room.flow()
|
|
||||||
val powerLevelsFlow = flowRoom
|
|
||||||
.liveStateEvent(EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
|
|
||||||
.mapOptional { it.content.toModel<PowerLevelsContent>() }
|
|
||||||
.flowOn(Dispatchers.Default)
|
|
||||||
|
|
||||||
val roomCreateFlow = flowRoom
|
|
||||||
.liveStateEvent(EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)
|
|
||||||
.mapOptional { event ->
|
|
||||||
event.getRoomCreateContentWithSender()
|
|
||||||
}
|
|
||||||
.flowOn(Dispatchers.Default)
|
|
||||||
|
|
||||||
return combine(powerLevelsFlow, roomCreateFlow) { powerLevelsContent, roomCreateContent ->
|
|
||||||
RoomPowerLevels(
|
|
||||||
powerLevelsContent = powerLevelsContent.getOrNull(),
|
|
||||||
roomCreateContent = roomCreateContent.getOrNull()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -22,7 +22,7 @@ fun Role.isOwner() = this == Role.Creator || this == Role.SuperAdmin
|
|||||||
|
|
||||||
fun Room.membersByRoleFlow(): Flow<Map<Role, List<RoomMemberSummary>>> {
|
fun Room.membersByRoleFlow(): Flow<Map<Role, List<RoomMemberSummary>>> {
|
||||||
val roomMembersFlow = flow().liveRoomMembers(roomMemberQueryParams())
|
val roomMembersFlow = flow().liveRoomMembers(roomMemberQueryParams())
|
||||||
val roomPowerLevelsFlow = PowerLevelsFlowFactory(this).createFlow()
|
val roomPowerLevelsFlow = flow().liveRoomPowerLevels()
|
||||||
return combine(roomMembersFlow, roomPowerLevelsFlow) { roomMembers, roomPowerLevels ->
|
return combine(roomMembersFlow, roomPowerLevelsFlow) { roomMembers, roomPowerLevels ->
|
||||||
roomMembers.groupBy { roomPowerLevels.getSuggestedRole(it.userId) }
|
roomMembers.groupBy { roomPowerLevels.getSuggestedRole(it.userId) }
|
||||||
}.distinctUntilChanged()
|
}.distinctUntilChanged()
|
||||||
|
@@ -23,7 +23,6 @@ import im.vector.app.core.resources.StringProvider
|
|||||||
import im.vector.app.features.createdirect.DirectRoomHelper
|
import im.vector.app.features.createdirect.DirectRoomHelper
|
||||||
import im.vector.app.features.displayname.getBestName
|
import im.vector.app.features.displayname.getBestName
|
||||||
import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider
|
import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.lib.strings.CommonStrings
|
import im.vector.lib.strings.CommonStrings
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
@@ -361,7 +360,7 @@ class RoomMemberProfileViewModel @AssistedInject constructor(
|
|||||||
|
|
||||||
private fun observeRoomSummaryAndPowerLevels(room: Room) {
|
private fun observeRoomSummaryAndPowerLevels(room: Room) {
|
||||||
val roomSummaryLive = room.flow().liveRoomSummary().unwrap()
|
val roomSummaryLive = room.flow().liveRoomSummary().unwrap()
|
||||||
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
|
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
|
||||||
powerLevelsFlow
|
powerLevelsFlow
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
val permissions = ActionPermissions(
|
val permissions = ActionPermissions(
|
||||||
|
@@ -19,7 +19,6 @@ import im.vector.app.core.resources.StringProvider
|
|||||||
import im.vector.app.features.analytics.AnalyticsTracker
|
import im.vector.app.features.analytics.AnalyticsTracker
|
||||||
import im.vector.app.features.analytics.plan.Interaction
|
import im.vector.app.features.analytics.plan.Interaction
|
||||||
import im.vector.app.features.home.ShortcutCreator
|
import im.vector.app.features.home.ShortcutCreator
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.app.features.powerlevel.isLastAdminFlow
|
import im.vector.app.features.powerlevel.isLastAdminFlow
|
||||||
import im.vector.app.features.session.coroutineScope
|
import im.vector.app.features.session.coroutineScope
|
||||||
import im.vector.lib.strings.CommonStrings
|
import im.vector.lib.strings.CommonStrings
|
||||||
@@ -121,7 +120,7 @@ class RoomProfileViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun observePowerLevels() {
|
private fun observePowerLevels() {
|
||||||
val powerLevelsContentLive = PowerLevelsFlowFactory(room).createFlow()
|
val powerLevelsContentLive = room.flow().liveRoomPowerLevels()
|
||||||
powerLevelsContentLive
|
powerLevelsContentLive
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
val canUpdateRoomState = roomPowerLevels.isUserAllowedToSend(session.myUserId, true, EventType.STATE_ROOM_ENCRYPTION)
|
val canUpdateRoomState = roomPowerLevels.isUserAllowedToSend(session.myUserId, true, EventType.STATE_ROOM_ENCRYPTION)
|
||||||
@@ -163,8 +162,7 @@ class RoomProfileViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun observePermissions() {
|
private fun observePermissions() {
|
||||||
PowerLevelsFlowFactory(room)
|
room.flow().liveRoomPowerLevels()
|
||||||
.createFlow()
|
|
||||||
.setOnEach { roomPowerLevels ->
|
.setOnEach { roomPowerLevels ->
|
||||||
val permissions = RoomProfileViewState.ActionPermissions(
|
val permissions = RoomProfileViewState.ActionPermissions(
|
||||||
canEnableEncryption = roomPowerLevels.isUserAllowedToSend(session.myUserId, true, EventType.STATE_ROOM_ENCRYPTION)
|
canEnableEncryption = roomPowerLevels.isUserAllowedToSend(session.myUserId, true, EventType.STATE_ROOM_ENCRYPTION)
|
||||||
|
@@ -18,7 +18,6 @@ import dagger.assisted.AssistedInject
|
|||||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -124,8 +123,7 @@ class RoomAliasViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun observePowerLevel() {
|
private fun observePowerLevel() {
|
||||||
PowerLevelsFlowFactory(room)
|
room.flow().liveRoomPowerLevels()
|
||||||
.createFlow()
|
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
val permissions = RoomAliasViewState.ActionPermissions(
|
val permissions = RoomAliasViewState.ActionPermissions(
|
||||||
canChangeCanonicalAlias = roomPowerLevels.isUserAllowedToSend(
|
canChangeCanonicalAlias = roomPowerLevels.isUserAllowedToSend(
|
||||||
|
@@ -15,7 +15,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
|||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.resources.StringProvider
|
import im.vector.app.core.resources.StringProvider
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.lib.strings.CommonStrings
|
import im.vector.lib.strings.CommonStrings
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -61,7 +60,7 @@ class RoomBannedMemberListViewModel @AssistedInject constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
|
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
|
||||||
powerLevelsFlow
|
powerLevelsFlow
|
||||||
.setOnEach { roomPowerLevels ->
|
.setOnEach { roomPowerLevels ->
|
||||||
copy(canUserBan = roomPowerLevels.isUserAbleToBan(session.myUserId))
|
copy(canUserBan = roomPowerLevels.isUserAbleToBan(session.myUserId))
|
||||||
|
@@ -16,7 +16,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
|||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.platform.EmptyViewEvents
|
import im.vector.app.core.platform.EmptyViewEvents
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
@@ -72,7 +71,7 @@ class RoomMemberListViewModel @AssistedInject constructor(
|
|||||||
memberships = Membership.activeMemberships()
|
memberships = Membership.activeMemberships()
|
||||||
}
|
}
|
||||||
|
|
||||||
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
|
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
|
||||||
combine(
|
combine(
|
||||||
roomFlow.liveRoomMembers(roomMemberQueryParams),
|
roomFlow.liveRoomMembers(roomMemberQueryParams),
|
||||||
powerLevelsFlow,
|
powerLevelsFlow,
|
||||||
@@ -137,7 +136,7 @@ class RoomMemberListViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun observePowerLevel() {
|
private fun observePowerLevel() {
|
||||||
PowerLevelsFlowFactory(room).createFlow()
|
room.flow().liveRoomPowerLevels()
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
val permissions = ActionPermissions(
|
val permissions = ActionPermissions(
|
||||||
canInvite = roomPowerLevels.isUserAbleToInvite(session.myUserId),
|
canInvite = roomPowerLevels.isUserAbleToInvite(session.myUserId),
|
||||||
|
@@ -16,7 +16,6 @@ import dagger.assisted.AssistedInject
|
|||||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -59,8 +58,7 @@ class RoomPermissionsViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun observePowerLevel() {
|
private fun observePowerLevel() {
|
||||||
PowerLevelsFlowFactory(room)
|
room.flow().liveRoomPowerLevels()
|
||||||
.createFlow()
|
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
val permissions = RoomPermissionsViewState.ActionPermissions(
|
val permissions = RoomPermissionsViewState.ActionPermissions(
|
||||||
canChangePowerLevels = roomPowerLevels.isUserAllowedToSend(
|
canChangePowerLevels = roomPowerLevels.isUserAllowedToSend(
|
||||||
|
@@ -15,7 +15,6 @@ import dagger.assisted.AssistedInject
|
|||||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.mapNotNull
|
import kotlinx.coroutines.flow.mapNotNull
|
||||||
@@ -114,7 +113,7 @@ class RoomSettingsViewModel @AssistedInject constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
|
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
|
||||||
powerLevelsFlow
|
powerLevelsFlow
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
val permissions = RoomSettingsViewState.ActionPermissions(
|
val permissions = RoomSettingsViewState.ActionPermissions(
|
||||||
|
@@ -20,7 +20,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
|||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.platform.EmptyViewEvents
|
import im.vector.app.core.platform.EmptyViewEvents
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.app.features.session.coroutineScope
|
import im.vector.app.features.session.coroutineScope
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
@@ -71,8 +70,7 @@ class SpaceMenuViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
}.launchIn(viewModelScope)
|
}.launchIn(viewModelScope)
|
||||||
|
|
||||||
PowerLevelsFlowFactory(room)
|
room.flow().liveRoomPowerLevels()
|
||||||
.createFlow()
|
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
|
|
||||||
val canInvite = roomPowerLevels.isUserAbleToInvite(session.myUserId)
|
val canInvite = roomPowerLevels.isUserAbleToInvite(session.myUserId)
|
||||||
|
@@ -21,7 +21,6 @@ import im.vector.app.core.platform.VectorViewModel
|
|||||||
import im.vector.app.features.analytics.AnalyticsTracker
|
import im.vector.app.features.analytics.AnalyticsTracker
|
||||||
import im.vector.app.features.analytics.extensions.toAnalyticsJoinedRoom
|
import im.vector.app.features.analytics.extensions.toAnalyticsJoinedRoom
|
||||||
import im.vector.app.features.analytics.plan.JoinedRoom
|
import im.vector.app.features.analytics.plan.JoinedRoom
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
@@ -95,7 +94,7 @@ class SpaceDirectoryViewModel @AssistedInject constructor(
|
|||||||
private fun observePermissions() {
|
private fun observePermissions() {
|
||||||
val room = session.getRoom(initialState.spaceId) ?: return
|
val room = session.getRoom(initialState.spaceId) ?: return
|
||||||
|
|
||||||
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
|
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
|
||||||
|
|
||||||
powerLevelsFlow
|
powerLevelsFlow
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
|
@@ -16,13 +16,13 @@ import dagger.assisted.AssistedInject
|
|||||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.getRoom
|
import org.matrix.android.sdk.api.session.getRoom
|
||||||
import org.matrix.android.sdk.api.session.getRoomSummary
|
import org.matrix.android.sdk.api.session.getRoomSummary
|
||||||
|
import org.matrix.android.sdk.flow.flow
|
||||||
|
|
||||||
class ShareSpaceViewModel @AssistedInject constructor(
|
class ShareSpaceViewModel @AssistedInject constructor(
|
||||||
@Assisted private val initialState: ShareSpaceViewState,
|
@Assisted private val initialState: ShareSpaceViewState,
|
||||||
@@ -49,8 +49,7 @@ class ShareSpaceViewModel @AssistedInject constructor(
|
|||||||
|
|
||||||
private fun observePowerLevel() {
|
private fun observePowerLevel() {
|
||||||
val room = session.getRoom(initialState.spaceId) ?: return
|
val room = session.getRoom(initialState.spaceId) ?: return
|
||||||
PowerLevelsFlowFactory(room)
|
room.flow().liveRoomPowerLevels()
|
||||||
.createFlow()
|
|
||||||
.onEach { roomPowerLevels ->
|
.onEach { roomPowerLevels ->
|
||||||
setState {
|
setState {
|
||||||
copy(
|
copy(
|
||||||
|
@@ -19,7 +19,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
|||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.resources.StringProvider
|
import im.vector.app.core.resources.StringProvider
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
|
||||||
import im.vector.app.features.widgets.permissions.WidgetPermissionsHelper
|
import im.vector.app.features.widgets.permissions.WidgetPermissionsHelper
|
||||||
import kotlinx.coroutines.flow.filter
|
import kotlinx.coroutines.flow.filter
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
@@ -97,8 +96,7 @@ class WidgetViewModel @AssistedInject constructor(
|
|||||||
if (room == null) {
|
if (room == null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
PowerLevelsFlowFactory(room)
|
room.flow().liveRoomPowerLevels()
|
||||||
.createFlow()
|
|
||||||
.map { roomPowerLevels ->
|
.map { roomPowerLevels ->
|
||||||
roomPowerLevels.isUserAllowedToSend(session.myUserId, true, null)
|
roomPowerLevels.isUserAllowedToSend(session.myUserId, true, null)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user