From a185e4aa3677e8dfb5f754556ca93f7592a81c1c Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Wed, 24 Jul 2024 14:17:51 +0300 Subject: [PATCH] Fixes #3078 - Trim number of resolved alias vias and always default to a join button in the room preview screen --- .../JoinRoomScreen/JoinRoomScreenViewModel.swift | 14 ++++---------- ElementX/Sources/Services/Client/ClientProxy.swift | 9 ++++++++- .../test_joinRoomScreen-iPad-en-GB.Unknown.png | 4 ++-- .../test_joinRoomScreen-iPad-pseudo.Unknown.png | 4 ++-- ...test_joinRoomScreen-iPhone-15-en-GB.Unknown.png | 4 ++-- ...est_joinRoomScreen-iPhone-15-pseudo.Unknown.png | 4 ++-- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift index 3cc283acc8..3fd3a4d305 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift @@ -81,6 +81,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo defer { hideLoadingIndicator() + updateRoomDetails() } // Using only the preview API isn't enough as it's not capable @@ -105,10 +106,6 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo } private func updateRoomDetails() { - if roomProxy == nil, roomPreviewDetails == nil { - return - } - let name = roomProxy?.name ?? roomPreviewDetails?.name state.roomDetails = JoinRoomScreenRoomDetails(name: name, topic: roomProxy?.topic ?? roomPreviewDetails?.topic, @@ -120,11 +117,6 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo } private func updateMode() { - if roomProxy == nil, roomPreviewDetails == nil { - state.mode = .unknown - return - } - if roomProxy?.isPublic ?? false || roomPreviewDetails?.isPublic ?? false { state.mode = .join } else if roomProxy?.membership == .invited || roomPreviewDetails?.isInvited ?? false { @@ -132,7 +124,9 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo } else if roomPreviewDetails?.canKnock ?? false, allowKnocking { // Knocking is not supported yet, the flag is purely for preview tests. state.mode = .knock } else { - state.mode = .unknown + // If everything else fails fallback to showing the join button and + // letting the server figure it out. + state.mode = .join } } diff --git a/ElementX/Sources/Services/Client/ClientProxy.swift b/ElementX/Sources/Services/Client/ClientProxy.swift index bc1cda5988..2e1863c908 100644 --- a/ElementX/Sources/Services/Client/ClientProxy.swift +++ b/ElementX/Sources/Services/Client/ClientProxy.swift @@ -608,7 +608,14 @@ class ClientProxy: ClientProxyProtocol { func resolveRoomAlias(_ alias: String) async -> Result { do { - return try await .success(client.resolveRoomAlias(roomAlias: alias)) + let resolvedAlias = try await client.resolveRoomAlias(roomAlias: alias) + + // Resolving aliases is done through the directory/room API which returns too many / all known + // vias, which in turn results in invalid join requests. Trim them to something manageable + // https://github.com/element-hq/synapse/issues/17298 + let limitedAlias = ResolvedRoomAlias(roomId: resolvedAlias.roomId, servers: Array(resolvedAlias.servers.prefix(50))) + + return .success(limitedAlias) } catch { MXLog.error("Failed resolving room alias: \(alias) with error: \(error)") return .failure(.sdkError(error)) diff --git a/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPad-en-GB.Unknown.png b/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPad-en-GB.Unknown.png index 555119de6f..7967de20fe 100644 --- a/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPad-en-GB.Unknown.png +++ b/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPad-en-GB.Unknown.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d101e405e058e332a699eb6c2db1ab38b15966e06b185b2241be78608dd1939e -size 1959342 +oid sha256:682a385d77654a834eda1e16b05ceae250a9730868b133f5d73e0656b7d8e1f4 +size 1893025 diff --git a/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPad-pseudo.Unknown.png b/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPad-pseudo.Unknown.png index 555119de6f..7f22e0b186 100644 --- a/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPad-pseudo.Unknown.png +++ b/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPad-pseudo.Unknown.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d101e405e058e332a699eb6c2db1ab38b15966e06b185b2241be78608dd1939e -size 1959342 +oid sha256:5919ca74ce5a73c50b1ade86ce92cd6043d4aa187157be648b2a609f12546256 +size 1898227 diff --git a/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPhone-15-en-GB.Unknown.png b/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPhone-15-en-GB.Unknown.png index 3edd3816ff..90e6e10896 100644 --- a/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPhone-15-en-GB.Unknown.png +++ b/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPhone-15-en-GB.Unknown.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f2d8c4d1cbce5e5cfe0437f75bf101189f3913592bb0d34b8b60f8ceff7f2d6 -size 800542 +oid sha256:c001018d811bda7d9db87503f38d94dc23a2102bc134d08b69e3af171ecbf350 +size 755374 diff --git a/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPhone-15-pseudo.Unknown.png b/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPhone-15-pseudo.Unknown.png index 3edd3816ff..e943319e83 100644 --- a/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPhone-15-pseudo.Unknown.png +++ b/PreviewTests/__Snapshots__/PreviewTests/test_joinRoomScreen-iPhone-15-pseudo.Unknown.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f2d8c4d1cbce5e5cfe0437f75bf101189f3913592bb0d34b8b60f8ceff7f2d6 -size 800542 +oid sha256:93d65076d29abb7a6476b649fae781a8be6bad9d4b905c8251b7253498af3d3e +size 761944