mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-05 11:58:32 +00:00
Make the room power levels optional as they can be missing depending on what state events are requested
This commit is contained in:
committed by
Stefan Ceriu
parent
c7ff6c019d
commit
de723853e3
+4
-3
@@ -218,9 +218,10 @@ class KnockRequestsListScreenViewModel: KnockRequestsListScreenViewModelType, Kn
|
||||
state.isKnockableRoom = false
|
||||
}
|
||||
|
||||
state.canAccept = roomInfo.powerLevels.canOwnUserInvite()
|
||||
state.canDecline = roomInfo.powerLevels.canOwnUserKick()
|
||||
state.canBan = roomInfo.powerLevels.canOwnUserBan()
|
||||
guard let powerLevels = roomProxy.infoPublisher.value.powerLevels else { fatalError("Missing room power levels") }
|
||||
state.canAccept = powerLevels.canOwnUserInvite()
|
||||
state.canDecline = powerLevels.canOwnUserKick()
|
||||
state.canBan = powerLevels.canOwnUserBan()
|
||||
}
|
||||
|
||||
private static let loadingIndicatorIdentifier = "\(KnockRequestsListScreenViewModel.self)-Loading"
|
||||
|
||||
@@ -87,9 +87,10 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe
|
||||
// MARK: - Private
|
||||
|
||||
private func updateRoomInfo(roomInfo: RoomInfoProxyProtocol) {
|
||||
state.canEditAvatar = roomInfo.powerLevels.canOwnUser(sendStateEvent: .roomAvatar)
|
||||
state.canEditName = roomInfo.powerLevels.canOwnUser(sendStateEvent: .roomName)
|
||||
state.canEditTopic = roomInfo.powerLevels.canOwnUser(sendStateEvent: .roomTopic)
|
||||
guard let powerLevels = roomInfo.powerLevels else { fatalError("Missing room power levels") }
|
||||
state.canEditAvatar = powerLevels.canOwnUser(sendStateEvent: .roomAvatar)
|
||||
state.canEditName = powerLevels.canOwnUser(sendStateEvent: .roomName)
|
||||
state.canEditTopic = powerLevels.canOwnUser(sendStateEvent: .roomTopic)
|
||||
}
|
||||
|
||||
private func saveRoomDetails() {
|
||||
|
||||
@@ -224,13 +224,17 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
|
||||
state.isKnockableRoom = false
|
||||
}
|
||||
|
||||
state.canEditRoomName = roomInfo.powerLevels.canOwnUser(sendStateEvent: .roomName)
|
||||
state.canEditRoomTopic = roomInfo.powerLevels.canOwnUser(sendStateEvent: .roomTopic)
|
||||
state.canEditRoomAvatar = roomInfo.powerLevels.canOwnUser(sendStateEvent: .roomAvatar)
|
||||
state.canInviteUsers = roomInfo.powerLevels.canOwnUserInvite()
|
||||
state.canKickUsers = roomInfo.powerLevels.canOwnUserKick()
|
||||
state.canBanUsers = roomInfo.powerLevels.canOwnUserBan()
|
||||
state.canJoinCall = roomInfo.powerLevels.canOwnUserJoinCall()
|
||||
if let powerLevels = roomInfo.powerLevels {
|
||||
state.canEditRoomName = powerLevels.canOwnUser(sendStateEvent: .roomName)
|
||||
state.canEditRoomTopic = powerLevels.canOwnUser(sendStateEvent: .roomTopic)
|
||||
state.canEditRoomAvatar = powerLevels.canOwnUser(sendStateEvent: .roomAvatar)
|
||||
state.canInviteUsers = powerLevels.canOwnUserInvite()
|
||||
state.canKickUsers = powerLevels.canOwnUserKick()
|
||||
state.canBanUsers = powerLevels.canOwnUserBan()
|
||||
state.canJoinCall = powerLevels.canOwnUserJoinCall()
|
||||
} else {
|
||||
fatalError("Missing room power levels")
|
||||
}
|
||||
|
||||
Task {
|
||||
state.canEditRolesOrPermissions = await (try? roomProxy.suggestedRole(for: roomProxy.ownUserID).get()) == .administrator
|
||||
|
||||
@@ -88,6 +88,10 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
||||
Task {
|
||||
showLoadingIndicator(Self.updateStateLoadingIndicatorIdentifier)
|
||||
|
||||
defer {
|
||||
hideLoadingIndicator(Self.updateStateLoadingIndicatorIdentifier)
|
||||
}
|
||||
|
||||
let members = members.sorted()
|
||||
let roomMembersDetails = await buildMembersDetails(members: members)
|
||||
self.members = members
|
||||
@@ -99,12 +103,10 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
||||
bannedMembers: roomMembersDetails.bannedMembers,
|
||||
bindings: state.bindings)
|
||||
|
||||
let powerLevels = roomProxy.infoPublisher.value.powerLevels
|
||||
guard let powerLevels = roomProxy.infoPublisher.value.powerLevels else { fatalError("Missing room power levels") }
|
||||
self.state.canInviteUsers = powerLevels.canOwnUserInvite()
|
||||
self.state.canKickUsers = powerLevels.canOwnUserKick()
|
||||
self.state.canBanUsers = powerLevels.canOwnUserBan()
|
||||
|
||||
hideLoadingIndicator(Self.updateStateLoadingIndicatorIdentifier)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -114,7 +114,8 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
||||
// MARK: - Permissions
|
||||
|
||||
private func updateRoomInfo(roomInfo: RoomInfoProxyProtocol) {
|
||||
state.permissions = .init(powerLevels: roomInfo.powerLevels.values)
|
||||
guard let powerLevels = roomInfo.powerLevels else { fatalError("Missing room power levels") }
|
||||
state.permissions = .init(powerLevels: powerLevels.values)
|
||||
}
|
||||
|
||||
private func editPermissions(group: RoomRolesAndPermissionsScreenPermissionsGroup) {
|
||||
|
||||
+2
-1
@@ -47,7 +47,8 @@ final class CompletionSuggestionService: CompletionSuggestionServiceProtocol {
|
||||
self?.suggestionTriggerSubject.value != nil ? .milliseconds(500) : .milliseconds(0)
|
||||
}
|
||||
|
||||
canMentionAllUsers = roomProxy.infoPublisher.value.powerLevels.canOwnUserTriggerRoomNotification()
|
||||
guard let powerLevels = roomProxy.infoPublisher.value.powerLevels else { fatalError("Missing room power levels") }
|
||||
canMentionAllUsers = powerLevels.canOwnUserTriggerRoomNotification()
|
||||
}
|
||||
|
||||
func processTextMessage(_ textMessage: String, selectedRange: NSRange) {
|
||||
|
||||
@@ -348,11 +348,12 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
||||
state.isKnockableRoom = false
|
||||
}
|
||||
|
||||
state.canSendMessage = roomInfo.powerLevels.canOwnUser(sendMessage: .roomMessage)
|
||||
state.canJoinCall = roomInfo.powerLevels.canOwnUserJoinCall()
|
||||
state.canAcceptKnocks = roomInfo.powerLevels.canOwnUserInvite()
|
||||
state.canDeclineKnocks = roomInfo.powerLevels.canOwnUserKick()
|
||||
state.canBan = roomInfo.powerLevels.canOwnUserBan()
|
||||
guard let powerLevels = roomInfo.powerLevels else { fatalError("Missing room power levels") }
|
||||
state.canSendMessage = powerLevels.canOwnUser(sendMessage: .roomMessage)
|
||||
state.canJoinCall = powerLevels.canOwnUserJoinCall()
|
||||
state.canAcceptKnocks = powerLevels.canOwnUserInvite()
|
||||
state.canDeclineKnocks = powerLevels.canOwnUserKick()
|
||||
state.canBan = powerLevels.canOwnUserBan()
|
||||
}
|
||||
|
||||
private func setupPinnedEventsTimelineItemProviderIfNeeded() {
|
||||
|
||||
@@ -63,6 +63,7 @@ class ThreadTimelineScreenViewModel: ThreadTimelineScreenViewModelType, ThreadTi
|
||||
// MARK: - Private
|
||||
|
||||
private func handleRoomInfoUpdate(_ roomInfo: RoomInfoProxyProtocol) {
|
||||
state.canSendMessage = roomInfo.powerLevels.canOwnUser(sendMessage: .roomMessage)
|
||||
guard let powerLevels = roomInfo.powerLevels else { fatalError("Missing room power levels") }
|
||||
state.canSendMessage = powerLevels.canOwnUser(sendMessage: .roomMessage)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -405,12 +405,13 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol {
|
||||
private func updateRoomInfo(roomInfo: RoomInfoProxyProtocol) {
|
||||
state.pinnedEventIDs = roomInfo.pinnedEventIDs
|
||||
|
||||
state.canCurrentUserSendMessage = roomInfo.powerLevels.canOwnUser(sendMessage: .roomMessage)
|
||||
state.canCurrentUserRedactOthers = roomInfo.powerLevels.canOwnUserRedactOther()
|
||||
state.canCurrentUserRedactSelf = roomInfo.powerLevels.canOwnUserRedactOwn()
|
||||
state.canCurrentUserPin = roomInfo.powerLevels.canOwnUserPinOrUnpin()
|
||||
state.canCurrentUserKick = roomInfo.powerLevels.canOwnUserKick()
|
||||
state.canCurrentUserBan = roomInfo.powerLevels.canOwnUserBan()
|
||||
guard let powerLevels = roomInfo.powerLevels else { fatalError("Missing room power levels") }
|
||||
state.canCurrentUserSendMessage = powerLevels.canOwnUser(sendMessage: .roomMessage)
|
||||
state.canCurrentUserRedactOthers = powerLevels.canOwnUserRedactOther()
|
||||
state.canCurrentUserRedactSelf = powerLevels.canOwnUserRedactOwn()
|
||||
state.canCurrentUserPin = powerLevels.canOwnUserPinOrUnpin()
|
||||
state.canCurrentUserKick = powerLevels.canOwnUserKick()
|
||||
state.canCurrentUserBan = powerLevels.canOwnUserBan()
|
||||
}
|
||||
|
||||
private func setupSubscriptions() {
|
||||
|
||||
Reference in New Issue
Block a user