1
0
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:
ganfra
2025-08-04 18:19:25 +02:00
parent fe0b54e898
commit a239f5fb08
24 changed files with 81 additions and 115 deletions

View File

@@ -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.RoomSummary
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.timeline.TimelineEvent
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>> {
return room.readService().getReadMarkerLive().asFlow()
}

View File

@@ -17,12 +17,7 @@
package org.matrix.android.sdk.api.session.room
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.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.timeline.TimelineEvent
@@ -45,10 +40,5 @@ fun Room.getStateEvent(eventType: String, stateKey: QueryStateEventValue): Event
* Get the current RoomPowerLevels of the room.
*/
fun Room.getRoomPowerLevels(): RoomPowerLevels {
val powerLevelsContent = getStateEvent(EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)?.content?.toModel<PowerLevelsContent>()
val roomCreateContent = getStateEvent(EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)?.getRoomCreateContentWithSender()
return RoomPowerLevels(
powerLevelsContent,
roomCreateContent
)
return stateService().getRoomPowerLevels()
}

View File

@@ -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.RoomJoinRules
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.Optional
@@ -106,4 +107,6 @@ interface StateService {
suspend fun setJoinRulePublic()
suspend fun setJoinRuleInviteOnly()
suspend fun setJoinRuleRestricted(allowList: List<String>)
fun getRoomPowerLevels(): RoomPowerLevels
fun getRoomPowerLevelsLive(): LiveData<RoomPowerLevels>
}

View File

@@ -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.internal.di.UserId
import org.matrix.android.sdk.internal.session.room.RoomGetter
import org.matrix.android.sdk.internal.session.room.state.StateEventDataSource
import javax.inject.Inject
internal class DefaultConditionResolver @Inject constructor(
private val roomGetter: RoomGetter,
@UserId private val userId: String,
private val stateEventDataSource: StateEventDataSource,
) : ConditionResolver {
override fun resolveEventMatchCondition(

View File

@@ -17,17 +17,53 @@
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.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.util.Optional
import org.matrix.android.sdk.internal.session.room.state.StateEventDataSource
internal fun StateEventDataSource.getRoomPowerLevels(roomId: String): RoomPowerLevels {
val powerLevelsContent = getStateEvent(roomId, EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
?.content?.toModel<PowerLevelsContent>()
val roomCreateContent = getStateEvent(roomId, EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)?.getRoomCreateContentWithSender()
val powerLevelsEvent = getStateEvent(roomId, EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
val roomCreateEvent = getStateEvent(roomId, EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)
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)
}

View File

@@ -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.RoomJoinRulesAllowEntry
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.util.JsonDict
import org.matrix.android.sdk.api.util.MimeTypes
import org.matrix.android.sdk.api.util.Optional
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(
@Assisted private val roomId: String,
@@ -65,6 +68,14 @@ internal class DefaultStateService @AssistedInject constructor(
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(
eventType: String,
stateKey: String,

View File

@@ -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.toModel
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.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.internal.session.homeserver.HomeServerCapabilitiesDataSource
import org.matrix.android.sdk.internal.session.room.powerlevels.getRoomPowerLevels
import org.matrix.android.sdk.internal.session.room.state.StateEventDataSource
internal class DefaultRoomVersionService @AssistedInject constructor(
@@ -72,16 +70,7 @@ internal class DefaultRoomVersionService @AssistedInject constructor(
}
override fun userMayUpgradeRoom(userId: String): Boolean {
val powerLevelsContent = stateEventDataSource.getStateEvent(roomId, EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
?.content?.toModel<PowerLevelsContent>()
val roomCreateContent = stateEventDataSource.getStateEvent(roomId, EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)
?.getRoomCreateContentWithSender()
val roomPowerLevels = RoomPowerLevels(
powerLevelsContent = powerLevelsContent,
roomCreateContent = roomCreateContent
)
val roomPowerLevels = stateEventDataSource.getRoomPowerLevels(roomId)
return roomPowerLevels.isUserAllowedToSend(userId, true, EventType.STATE_ROOM_TOMBSTONE)
}

View File

@@ -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.tracking.LocationSharingServiceConnection
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.getOutboundSessionKeySharingStrategyOrDefault
import im.vector.app.features.raw.wellknown.withElementWellKnown
@@ -302,7 +301,7 @@ class TimelineViewModel @AssistedInject constructor(
private fun observePowerLevel() {
if (room == null) return
PowerLevelsFlowFactory(room).createFlow()
room.flow().liveRoomPowerLevels()
.onEach { powerLevels ->
val canInvite = powerLevels.isUserAbleToInvite(session.myUserId)
val isAllowedToManageWidgets = session.widgetService().hasPermissionsToHandleWidgets(room.roomId)

View File

@@ -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.voice.VoiceMessageRecorderView
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.settings.VectorPreferences
import im.vector.app.features.voice.VoiceFailure
@@ -179,7 +178,7 @@ class MessageComposerViewModel @AssistedInject constructor(
private fun observePowerLevelAndEncryption(room: Room) {
combine(
PowerLevelsFlowFactory(room).createFlow(),
room.flow().liveRoomPowerLevels(),
room.flow().liveRoomSummary().unwrap()
) { pl, sum ->
val canSendMessage = pl.isUserAllowedToSend(session.myUserId, false, EventType.MESSAGE)

View File

@@ -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.PillsPostProcessor
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.settings.VectorPreferences
import im.vector.lib.strings.CommonStrings
@@ -115,7 +114,7 @@ class MessageActionsViewModel @AssistedInject constructor(
if (room == null) {
return
}
PowerLevelsFlowFactory(room).createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val canReact = roomPowerLevels.isUserAllowedToSend(session.myUserId, false, EventType.REACTION)
val canRedact = roomPowerLevels.isUserAbleToRedact(session.myUserId)

View File

@@ -19,7 +19,6 @@ import im.vector.app.core.platform.VectorViewModel
import im.vector.app.core.utils.PermissionChecker
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.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.settings.VectorPreferences
import kotlinx.coroutines.flow.MutableSharedFlow
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.getUserOrDefault
import org.matrix.android.sdk.api.util.toMatrixItem
import org.matrix.android.sdk.flow.flow
import timber.log.Timber
/**
@@ -72,7 +72,7 @@ class LocationSharingViewModel @AssistedInject constructor(
}
private fun observePowerLevelsForLiveLocationSharing() {
PowerLevelsFlowFactory(room).createFlow()
room.flow().liveRoomPowerLevels()
.distinctUntilChanged()
.setOnEach { roomPowerLevels ->
val canShareLiveLocation = EventType.STATE_ROOM_BEACON_INFO.values

View File

@@ -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()
)
}
}
}

View File

@@ -22,7 +22,7 @@ fun Role.isOwner() = this == Role.Creator || this == Role.SuperAdmin
fun Room.membersByRoleFlow(): Flow<Map<Role, List<RoomMemberSummary>>> {
val roomMembersFlow = flow().liveRoomMembers(roomMemberQueryParams())
val roomPowerLevelsFlow = PowerLevelsFlowFactory(this).createFlow()
val roomPowerLevelsFlow = flow().liveRoomPowerLevels()
return combine(roomMembersFlow, roomPowerLevelsFlow) { roomMembers, roomPowerLevels ->
roomMembers.groupBy { roomPowerLevels.getSuggestedRole(it.userId) }
}.distinctUntilChanged()

View File

@@ -23,7 +23,6 @@ import im.vector.app.core.resources.StringProvider
import im.vector.app.features.createdirect.DirectRoomHelper
import im.vector.app.features.displayname.getBestName
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 kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.combine
@@ -361,7 +360,7 @@ class RoomMemberProfileViewModel @AssistedInject constructor(
private fun observeRoomSummaryAndPowerLevels(room: Room) {
val roomSummaryLive = room.flow().liveRoomSummary().unwrap()
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
powerLevelsFlow
.onEach { roomPowerLevels ->
val permissions = ActionPermissions(

View File

@@ -19,7 +19,6 @@ import im.vector.app.core.resources.StringProvider
import im.vector.app.features.analytics.AnalyticsTracker
import im.vector.app.features.analytics.plan.Interaction
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.session.coroutineScope
import im.vector.lib.strings.CommonStrings
@@ -121,7 +120,7 @@ class RoomProfileViewModel @AssistedInject constructor(
}
private fun observePowerLevels() {
val powerLevelsContentLive = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsContentLive = room.flow().liveRoomPowerLevels()
powerLevelsContentLive
.onEach { roomPowerLevels ->
val canUpdateRoomState = roomPowerLevels.isUserAllowedToSend(session.myUserId, true, EventType.STATE_ROOM_ENCRYPTION)
@@ -163,8 +162,7 @@ class RoomProfileViewModel @AssistedInject constructor(
}
private fun observePermissions() {
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.setOnEach { roomPowerLevels ->
val permissions = RoomProfileViewState.ActionPermissions(
canEnableEncryption = roomPowerLevels.isUserAllowedToSend(session.myUserId, true, EventType.STATE_ROOM_ENCRYPTION)

View File

@@ -18,7 +18,6 @@ import dagger.assisted.AssistedInject
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
@@ -124,8 +123,7 @@ class RoomAliasViewModel @AssistedInject constructor(
}
private fun observePowerLevel() {
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val permissions = RoomAliasViewState.ActionPermissions(
canChangeCanonicalAlias = roomPowerLevels.isUserAllowedToSend(

View File

@@ -15,7 +15,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.core.resources.StringProvider
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.lib.strings.CommonStrings
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -61,7 +60,7 @@ class RoomBannedMemberListViewModel @AssistedInject constructor(
)
}
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
powerLevelsFlow
.setOnEach { roomPowerLevels ->
copy(canUserBan = roomPowerLevels.isUserAbleToBan(session.myUserId))

View File

@@ -16,7 +16,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.EmptyViewEvents
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
@@ -72,7 +71,7 @@ class RoomMemberListViewModel @AssistedInject constructor(
memberships = Membership.activeMemberships()
}
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
combine(
roomFlow.liveRoomMembers(roomMemberQueryParams),
powerLevelsFlow,
@@ -137,7 +136,7 @@ class RoomMemberListViewModel @AssistedInject constructor(
}
private fun observePowerLevel() {
PowerLevelsFlowFactory(room).createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val permissions = ActionPermissions(
canInvite = roomPowerLevels.isUserAbleToInvite(session.myUserId),

View File

@@ -16,7 +16,6 @@ import dagger.assisted.AssistedInject
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
@@ -59,8 +58,7 @@ class RoomPermissionsViewModel @AssistedInject constructor(
}
private fun observePowerLevel() {
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val permissions = RoomPermissionsViewState.ActionPermissions(
canChangePowerLevels = roomPowerLevels.isUserAllowedToSend(

View File

@@ -15,7 +15,6 @@ import dagger.assisted.AssistedInject
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.settings.VectorPreferences
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.mapNotNull
@@ -114,7 +113,7 @@ class RoomSettingsViewModel @AssistedInject constructor(
)
}
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
powerLevelsFlow
.onEach { roomPowerLevels ->
val permissions = RoomSettingsViewState.ActionPermissions(

View File

@@ -20,7 +20,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.EmptyViewEvents
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.session.coroutineScope
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
@@ -71,8 +70,7 @@ class SpaceMenuViewModel @AssistedInject constructor(
}
}.launchIn(viewModelScope)
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val canInvite = roomPowerLevels.isUserAbleToInvite(session.myUserId)

View File

@@ -21,7 +21,6 @@ import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.analytics.AnalyticsTracker
import im.vector.app.features.analytics.extensions.toAnalyticsJoinedRoom
import im.vector.app.features.analytics.plan.JoinedRoom
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
@@ -95,7 +94,7 @@ class SpaceDirectoryViewModel @AssistedInject constructor(
private fun observePermissions() {
val room = session.getRoom(initialState.spaceId) ?: return
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
powerLevelsFlow
.onEach { roomPowerLevels ->

View File

@@ -16,13 +16,13 @@ import dagger.assisted.AssistedInject
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.getRoom
import org.matrix.android.sdk.api.session.getRoomSummary
import org.matrix.android.sdk.flow.flow
class ShareSpaceViewModel @AssistedInject constructor(
@Assisted private val initialState: ShareSpaceViewState,
@@ -49,8 +49,7 @@ class ShareSpaceViewModel @AssistedInject constructor(
private fun observePowerLevel() {
val room = session.getRoom(initialState.spaceId) ?: return
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
setState {
copy(

View File

@@ -19,7 +19,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.core.resources.StringProvider
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.widgets.permissions.WidgetPermissionsHelper
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
@@ -97,8 +96,7 @@ class WidgetViewModel @AssistedInject constructor(
if (room == null) {
return
}
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.map { roomPowerLevels ->
roomPowerLevels.isUserAllowedToSend(session.myUserId, true, null)
}