Fixes #3078 - Trim number of resolved alias vias and always default to a join button in the room preview screen

This commit is contained in:
Stefan Ceriu 2024-07-24 14:17:51 +03:00 committed by Stefan Ceriu
parent 37786b8fad
commit f44c0765f8
6 changed files with 20 additions and 19 deletions

View File

@ -81,6 +81,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
defer { defer {
hideLoadingIndicator() hideLoadingIndicator()
updateRoomDetails()
} }
// Using only the preview API isn't enough as it's not capable // Using only the preview API isn't enough as it's not capable
@ -105,10 +106,6 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
} }
private func updateRoomDetails() { private func updateRoomDetails() {
if roomProxy == nil, roomPreviewDetails == nil {
return
}
let name = roomProxy?.name ?? roomPreviewDetails?.name let name = roomProxy?.name ?? roomPreviewDetails?.name
state.roomDetails = JoinRoomScreenRoomDetails(name: name, state.roomDetails = JoinRoomScreenRoomDetails(name: name,
topic: roomProxy?.topic ?? roomPreviewDetails?.topic, topic: roomProxy?.topic ?? roomPreviewDetails?.topic,
@ -120,11 +117,6 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
} }
private func updateMode() { private func updateMode() {
if roomProxy == nil, roomPreviewDetails == nil {
state.mode = .unknown
return
}
if roomProxy?.isPublic ?? false || roomPreviewDetails?.isPublic ?? false { if roomProxy?.isPublic ?? false || roomPreviewDetails?.isPublic ?? false {
state.mode = .join state.mode = .join
} else if roomProxy?.membership == .invited || roomPreviewDetails?.isInvited ?? false { } 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. } else if roomPreviewDetails?.canKnock ?? false, allowKnocking { // Knocking is not supported yet, the flag is purely for preview tests.
state.mode = .knock state.mode = .knock
} else { } else {
state.mode = .unknown // If everything else fails fallback to showing the join button and
// letting the server figure it out.
state.mode = .join
} }
} }

View File

@ -608,7 +608,14 @@ class ClientProxy: ClientProxyProtocol {
func resolveRoomAlias(_ alias: String) async -> Result<ResolvedRoomAlias, ClientProxyError> { func resolveRoomAlias(_ alias: String) async -> Result<ResolvedRoomAlias, ClientProxyError> {
do { 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 { } catch {
MXLog.error("Failed resolving room alias: \(alias) with error: \(error)") MXLog.error("Failed resolving room alias: \(alias) with error: \(error)")
return .failure(.sdkError(error)) return .failure(.sdkError(error))