diff --git a/Riot/Modules/Spaces/SpaceRoomList/SpaceChildRoomDetail/SpaceChildRoomDetailViewModel.swift b/Riot/Modules/Spaces/SpaceRoomList/SpaceChildRoomDetail/SpaceChildRoomDetailViewModel.swift index d64efb9a0..f884f558f 100644 --- a/Riot/Modules/Spaces/SpaceRoomList/SpaceChildRoomDetail/SpaceChildRoomDetailViewModel.swift +++ b/Riot/Modules/Spaces/SpaceRoomList/SpaceChildRoomDetail/SpaceChildRoomDetailViewModel.swift @@ -89,7 +89,25 @@ final class SpaceChildRoomDetailViewModel: SpaceChildRoomDetailViewModelType { private func joinRoom() { self.update(viewState: .loading) - self.session.joinRoom(self.childInfo.childRoomId) { [weak self] (response) in + if let canonicalAlias = self.childInfo.canonicalAlias { + self.session.matrixRestClient.resolveRoomAlias(canonicalAlias) { [weak self] (response) in + guard let self = self else { return } + switch response { + case .success(let resolution): + self.joinRoom(withId: resolution.roomId, via: resolution.servers) + case .failure(let error): + MXLog.warning("[SpaceChildRoomDetailViewModel] joinRoom: failed to resolve room alias due to error \(error).") + self.joinRoom(withId: self.childInfo.childRoomId, via: nil) + } + } + } else { + MXLog.warning("[SpaceChildRoomDetailViewModel] joinRoom: no canonical alias provided.") + joinRoom(withId: self.childInfo.childRoomId, via: nil) + } + } + + private func joinRoom(withId roomId: String, via viaServers: [String]?) { + self.session.joinRoom(roomId, viaServers: viaServers, withSignUrl: nil) { [weak self] response in guard let self = self else { return } switch response { case .success: diff --git a/changelog.d/5170.bugfix b/changelog.d/5170.bugfix new file mode 100644 index 000000000..1ef0fceb3 --- /dev/null +++ b/changelog.d/5170.bugfix @@ -0,0 +1 @@ +Fix “It is not possible to join an empty room” on some suggested rooms.