mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 10:33:45 +00:00
@@ -29,7 +29,7 @@ struct JoinRoomScreenRoomDetails {
|
|||||||
let topic: String?
|
let topic: String?
|
||||||
let canonicalAlias: String?
|
let canonicalAlias: String?
|
||||||
let avatar: RoomAvatar
|
let avatar: RoomAvatar
|
||||||
let memberCount: UInt
|
let memberCount: Int
|
||||||
let inviter: RoomInviterDetails?
|
let inviter: RoomInviterDetails?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
|
|
||||||
private var roomPreview: RoomPreviewProxyProtocol?
|
private var roomPreview: RoomPreviewProxyProtocol?
|
||||||
private var room: RoomProxyType?
|
private var room: RoomProxyType?
|
||||||
|
private var membershipStateChangeCancellable: AnyCancellable?
|
||||||
|
|
||||||
private let actionsSubject: PassthroughSubject<JoinRoomScreenViewModelAction, Never> = .init()
|
private let actionsSubject: PassthroughSubject<JoinRoomScreenViewModelAction, Never> = .init()
|
||||||
var actionsPublisher: AnyPublisher<JoinRoomScreenViewModelAction, Never> {
|
var actionsPublisher: AnyPublisher<JoinRoomScreenViewModelAction, Never> {
|
||||||
@@ -101,6 +102,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func updateRoomDetails() async {
|
private func updateRoomDetails() async {
|
||||||
|
membershipStateChangeCancellable = nil
|
||||||
var roomInfo: BaseRoomInfoProxyProtocol?
|
var roomInfo: BaseRoomInfoProxyProtocol?
|
||||||
var inviter: RoomInviterDetails?
|
var inviter: RoomInviterDetails?
|
||||||
|
|
||||||
@@ -112,6 +114,19 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
roomInfo = invitedRoomProxy.info
|
roomInfo = invitedRoomProxy.info
|
||||||
case .knocked(let knockedRoomProxy):
|
case .knocked(let knockedRoomProxy):
|
||||||
roomInfo = knockedRoomProxy.info
|
roomInfo = knockedRoomProxy.info
|
||||||
|
if let roomSummaryProvider = clientProxy.roomSummaryProvider {
|
||||||
|
membershipStateChangeCancellable = roomSummaryProvider.roomListPublisher
|
||||||
|
.compactMap { summaries -> Void? in
|
||||||
|
guard let roomSummary = summaries.first(where: { $0.id == roomInfo?.id }),
|
||||||
|
roomSummary.roomListItem.membership() != .knocked else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return ()
|
||||||
|
}
|
||||||
|
.sink { [weak self] in
|
||||||
|
Task { await self?.loadRoomDetails() }
|
||||||
|
}
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -121,7 +136,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
topic: info?.topic,
|
topic: info?.topic,
|
||||||
canonicalAlias: info?.canonicalAlias,
|
canonicalAlias: info?.canonicalAlias,
|
||||||
avatar: info?.avatar ?? .room(id: roomID, name: info?.displayName ?? "", avatarURL: nil),
|
avatar: info?.avatar ?? .room(id: roomID, name: info?.displayName ?? "", avatarURL: nil),
|
||||||
memberCount: UInt(info?.activeMembersCount ?? 0),
|
memberCount: info?.joinedMembersCount ?? 0,
|
||||||
inviter: inviter)
|
inviter: inviter)
|
||||||
|
|
||||||
await updateMode()
|
await updateMode()
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ protocol BaseRoomInfoProxyProtocol {
|
|||||||
var canonicalAlias: String? { get }
|
var canonicalAlias: String? { get }
|
||||||
var avatarURL: URL? { get }
|
var avatarURL: URL? { get }
|
||||||
var activeMembersCount: Int { get }
|
var activeMembersCount: Int { get }
|
||||||
|
var joinedMembersCount: Int { get }
|
||||||
var isDirect: Bool { get }
|
var isDirect: Bool { get }
|
||||||
var isSpace: Bool { get }
|
var isSpace: Bool { get }
|
||||||
}
|
}
|
||||||
@@ -112,6 +113,7 @@ struct RoomPreviewInfoProxy: BaseRoomInfoProxyProtocol {
|
|||||||
var isDirect: Bool { roomPreviewInfo.isDirect ?? false }
|
var isDirect: Bool { roomPreviewInfo.isDirect ?? false }
|
||||||
var isSpace: Bool { roomPreviewInfo.roomType == .space }
|
var isSpace: Bool { roomPreviewInfo.roomType == .space }
|
||||||
var activeMembersCount: Int { Int(roomPreviewInfo.numActiveMembers ?? roomPreviewInfo.numJoinedMembers) }
|
var activeMembersCount: Int { Int(roomPreviewInfo.numActiveMembers ?? roomPreviewInfo.numJoinedMembers) }
|
||||||
|
var joinedMembersCount: Int { Int(roomPreviewInfo.numJoinedMembers) }
|
||||||
|
|
||||||
var joinRule: JoinRule { roomPreviewInfo.joinRule }
|
var joinRule: JoinRule { roomPreviewInfo.joinRule }
|
||||||
var membership: Membership? { roomPreviewInfo.membership }
|
var membership: Membership? { roomPreviewInfo.membership }
|
||||||
|
|||||||
Reference in New Issue
Block a user