mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-10-31 16:24:11 +00:00
@@ -29,7 +29,7 @@ struct JoinRoomScreenRoomDetails {
|
||||
let topic: String?
|
||||
let canonicalAlias: String?
|
||||
let avatar: RoomAvatar
|
||||
let memberCount: UInt
|
||||
let memberCount: Int
|
||||
let inviter: RoomInviterDetails?
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
||||
|
||||
private var roomPreview: RoomPreviewProxyProtocol?
|
||||
private var room: RoomProxyType?
|
||||
private var membershipStateChangeCancellable: AnyCancellable?
|
||||
|
||||
private let actionsSubject: PassthroughSubject<JoinRoomScreenViewModelAction, Never> = .init()
|
||||
var actionsPublisher: AnyPublisher<JoinRoomScreenViewModelAction, Never> {
|
||||
@@ -101,6 +102,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
||||
}
|
||||
|
||||
private func updateRoomDetails() async {
|
||||
membershipStateChangeCancellable = nil
|
||||
var roomInfo: BaseRoomInfoProxyProtocol?
|
||||
var inviter: RoomInviterDetails?
|
||||
|
||||
@@ -112,6 +114,19 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
||||
roomInfo = invitedRoomProxy.info
|
||||
case .knocked(let knockedRoomProxy):
|
||||
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:
|
||||
break
|
||||
}
|
||||
@@ -121,7 +136,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
||||
topic: info?.topic,
|
||||
canonicalAlias: info?.canonicalAlias,
|
||||
avatar: info?.avatar ?? .room(id: roomID, name: info?.displayName ?? "", avatarURL: nil),
|
||||
memberCount: UInt(info?.activeMembersCount ?? 0),
|
||||
memberCount: info?.joinedMembersCount ?? 0,
|
||||
inviter: inviter)
|
||||
|
||||
await updateMode()
|
||||
|
||||
@@ -16,6 +16,7 @@ protocol BaseRoomInfoProxyProtocol {
|
||||
var canonicalAlias: String? { get }
|
||||
var avatarURL: URL? { get }
|
||||
var activeMembersCount: Int { get }
|
||||
var joinedMembersCount: Int { get }
|
||||
var isDirect: Bool { get }
|
||||
var isSpace: Bool { get }
|
||||
}
|
||||
@@ -112,6 +113,7 @@ struct RoomPreviewInfoProxy: BaseRoomInfoProxyProtocol {
|
||||
var isDirect: Bool { roomPreviewInfo.isDirect ?? false }
|
||||
var isSpace: Bool { roomPreviewInfo.roomType == .space }
|
||||
var activeMembersCount: Int { Int(roomPreviewInfo.numActiveMembers ?? roomPreviewInfo.numJoinedMembers) }
|
||||
var joinedMembersCount: Int { Int(roomPreviewInfo.numJoinedMembers) }
|
||||
|
||||
var joinRule: JoinRule { roomPreviewInfo.joinRule }
|
||||
var membership: Membership? { roomPreviewInfo.membership }
|
||||
|
||||
Reference in New Issue
Block a user