mirror of
https://github.com/element-hq/element-x-ios.git
synced 2025-03-10 21:39:12 +00:00
Fixes #3713, fixes #3674, fixes #3834 - Invite interaction and preview support for homeservers that don't have MSC3266 enabled.
This commit is contained in:
parent
54111535ba
commit
c31e7b8e91
@ -896,7 +896,6 @@ class ClientProxy: ClientProxyProtocol {
|
||||
switch roomListItem.membership() {
|
||||
case .invited:
|
||||
return try await .invited(InvitedRoomProxy(roomListItem: roomListItem,
|
||||
roomPreview: roomListItem.previewRoom(via: []),
|
||||
ownUserID: userID))
|
||||
case .knocked:
|
||||
if appSettings.knockingEnabled {
|
||||
|
@ -11,7 +11,10 @@ import UIKit
|
||||
|
||||
class InvitedRoomProxy: InvitedRoomProxyProtocol {
|
||||
private let roomListItem: RoomListItemProtocol
|
||||
private let roomPreview: RoomPreviewProtocol
|
||||
|
||||
private var roomPreview: RoomPreview?
|
||||
private var invitedRoom: Room?
|
||||
|
||||
let info: BaseRoomInfoProxyProtocol
|
||||
let ownUserID: String
|
||||
let inviter: RoomMemberProxyProtocol?
|
||||
@ -20,19 +23,35 @@ class InvitedRoomProxy: InvitedRoomProxyProtocol {
|
||||
// multiple times over FFI
|
||||
lazy var id: String = info.id
|
||||
|
||||
init(roomListItem: RoomListItemProtocol,
|
||||
roomPreview: RoomPreviewProtocol,
|
||||
ownUserID: String) async throws {
|
||||
init(roomListItem: RoomListItemProtocol, ownUserID: String) async throws {
|
||||
self.roomListItem = roomListItem
|
||||
self.roomPreview = roomPreview
|
||||
self.ownUserID = ownUserID
|
||||
info = try RoomPreviewInfoProxy(roomPreviewInfo: roomPreview.info())
|
||||
inviter = await roomPreview.inviter().map(RoomMemberProxy.init)
|
||||
|
||||
// The room summary API might not be available on all the homeservers.
|
||||
// Try to resolve it with what info we already have which also happens to be faster.
|
||||
if let invitedRoom = try? roomListItem.invitedRoom() {
|
||||
self.invitedRoom = invitedRoom
|
||||
|
||||
inviter = await invitedRoom.inviter().map(RoomMemberProxy.init)
|
||||
info = try await RoomInfoProxy(roomInfo: invitedRoom.roomInfo())
|
||||
} else {
|
||||
let roomPreview = try await roomListItem.previewRoom(via: [])
|
||||
self.roomPreview = roomPreview
|
||||
|
||||
info = try RoomPreviewInfoProxy(roomPreviewInfo: roomPreview.info())
|
||||
inviter = await roomPreview.inviter().map(RoomMemberProxy.init)
|
||||
}
|
||||
}
|
||||
|
||||
func rejectInvitation() async -> Result<Void, RoomProxyError> {
|
||||
do {
|
||||
return try await .success(roomPreview.leave())
|
||||
if let invitedRoom {
|
||||
return try await .success(invitedRoom.leave())
|
||||
} else if let roomPreview {
|
||||
return try await .success(roomPreview.leave())
|
||||
} else {
|
||||
fatalError("Invalid InvitedRoomProxy state, missing both `invitedRoom` and `roomPreview`")
|
||||
}
|
||||
} catch {
|
||||
MXLog.error("Failed rejecting invitiation with error: \(error)")
|
||||
return .failure(.sdkError(error))
|
||||
|
Loading…
x
Reference in New Issue
Block a user