diff --git a/ElementX/Sources/Services/Client/ClientProxy.swift b/ElementX/Sources/Services/Client/ClientProxy.swift index 23135c7d4..a919e2a11 100644 --- a/ElementX/Sources/Services/Client/ClientProxy.swift +++ b/ElementX/Sources/Services/Client/ClientProxy.swift @@ -915,12 +915,16 @@ class ClientProxy: ClientProxyProtocol { return try await .invited(InvitedRoomProxy(room: room)) case .knocked: - if appSettings.knockingEnabled { - return try await .knocked(KnockedRoomProxy(roomListItem: roomListItem, - roomPreview: roomListItem.previewRoom(via: []), - ownUserID: userID)) + guard appSettings.knockingEnabled else { + return nil } - return nil + + guard let room = try client.getRoom(roomId: roomID) else { + MXLog.error("Could not find room with ID: \(roomID)") + return nil + } + + return try await .knocked(KnockedRoomProxy(room: room)) case .joined: guard let room = try client.getRoom(roomId: roomID) else { MXLog.error("Could not find room with ID: \(roomID)") diff --git a/ElementX/Sources/Services/Room/KnockedRoomProxy.swift b/ElementX/Sources/Services/Room/KnockedRoomProxy.swift index a6a8e8e0e..01b1159c6 100644 --- a/ElementX/Sources/Services/Room/KnockedRoomProxy.swift +++ b/ElementX/Sources/Services/Room/KnockedRoomProxy.swift @@ -9,31 +9,24 @@ import Foundation import MatrixRustSDK class KnockedRoomProxy: KnockedRoomProxyProtocol { - private let roomListItem: RoomListItemProtocol - private let roomPreview: RoomPreviewProtocol + private let room: Room - // A room identifier is constant and lazy stops it from being fetched - // multiple times over FFI - lazy var id = info.id - - let ownUserID: String + lazy var id: String = room.id() + lazy var ownUserID: String = room.ownUserId() let info: BaseRoomInfoProxyProtocol - init(roomListItem: RoomListItemProtocol, - roomPreview: RoomPreviewProtocol, - ownUserID: String) throws { - self.roomListItem = roomListItem - self.roomPreview = roomPreview - self.ownUserID = ownUserID - info = try RoomPreviewInfoProxy(roomPreviewInfo: roomPreview.info()) + init(room: Room) async throws { + self.room = room + + info = try await RoomInfoProxy(roomInfo: room.roomInfo()) } func cancelKnock() async -> Result { do { - return try await .success(roomPreview.leave()) + return try await .success(room.leave()) } catch { - MXLog.error("Failed cancelling the knock with error: \(error)") + MXLog.error("Failed rejecting invitiation with error: \(error)") return .failure(.sdkError(error)) } }