show alert when trying to accept invalid invites

This commit is contained in:
Mauro Romito
2025-06-19 17:23:42 +02:00
committed by Mauro
parent 6bf26ce389
commit ec2a30c492
7 changed files with 36 additions and 12 deletions
+3 -1
View File
@@ -774,6 +774,8 @@ internal enum L10n {
}
/// Failed to upload your voice message.
internal static var errorFailedUploadingVoiceMessage: String { return L10n.tr("Localizable", "error_failed_uploading_voice_message") }
/// The room no longer exists or the invite is no longer valid.
internal static var errorInvalidInvite: String { return L10n.tr("Localizable", "error_invalid_invite") }
/// Message not found
internal static var errorMessageNotFound: String { return L10n.tr("Localizable", "error_message_not_found") }
/// This may be due to network or server issues.
@@ -846,7 +848,7 @@ internal enum L10n {
internal static func notificationCompatSummaryTitle(_ p1: Int) -> String {
return L10n.tr("Localizable", "notification_compat_summary_title", p1)
}
/// You have new message(s).
/// You have new messages.
internal static var notificationFallbackContent: String { return L10n.tr("Localizable", "notification_fallback_content") }
/// 📹 Incoming call
internal static var notificationIncomingCall: String { return L10n.tr("Localizable", "notification_incoming_call") }
@@ -416,8 +416,13 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
isSpace: roomProxy.info.isSpace,
activeMemberCount: UInt(roomProxy.info.activeMembersCount))
appSettings.seenInvites.remove(roomID)
case .failure:
displayError()
case .failure(let error):
switch error {
case .invalidInvite:
displayError(title: L10n.dialogTitleError, message: L10n.errorInvalidInvite)
default:
displayError()
}
}
}
@@ -474,9 +479,9 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
}
}
private func displayError() {
private func displayError(title: String? = nil, message: String? = nil) {
state.bindings.alertInfo = .init(id: UUID(),
title: L10n.commonError,
message: L10n.errorUnknown)
title: title ?? L10n.commonError,
message: message ?? L10n.errorUnknown)
}
}
@@ -111,6 +111,7 @@ enum JoinRoomScreenAlertType {
case declineInviteAndBlock
case cancelKnock
case loadingError
case invalidInvite
}
enum JoinRoomScreenViewAction {
@@ -246,10 +246,14 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
appSettings.seenInvites.remove(roomID)
actionsSubject.send(.joined)
case .failure(let error):
if case .forbiddenAccess = error {
switch error {
case .forbiddenAccess:
MXLog.error("Failed joining room alias: \(alias) forbidden access")
state.mode = .forbidden
} else {
case .invalidInvite:
MXLog.error("Failed joining room alias: \(alias) invalid invite")
state.bindings.alertInfo = .init(id: .invalidInvite, title: L10n.dialogTitleError, message: L10n.errorInvalidInvite)
default:
MXLog.error("Failed joining room alias: \(alias) with error: \(error)")
userIndicatorController.submitIndicator(.init(title: L10n.errorUnknown))
}
@@ -260,10 +264,14 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
appSettings.seenInvites.remove(roomID)
actionsSubject.send(.joined)
case .failure(let error):
if case .forbiddenAccess = error {
switch error {
case .forbiddenAccess:
MXLog.error("Failed joining room id: \(roomID) forbidden access")
state.mode = .forbidden
} else {
case .invalidInvite:
MXLog.error("Failed joining room id: \(roomID) invalid invite")
state.bindings.alertInfo = .init(id: .invalidInvite, title: L10n.dialogTitleError, message: L10n.errorInvalidInvite)
default:
MXLog.error("Failed joining room id: \(roomID) with error: \(error)")
userIndicatorController.submitIndicator(.init(title: L10n.errorUnknown))
}
@@ -467,8 +467,11 @@ class ClientProxy: ClientProxyProtocol {
await waitForRoomToSync(roomID: roomID, timeout: .seconds(30))
return .success(())
} catch ClientError.MatrixApi(kind: .unknown, _, _, _) {
MXLog.error("Failed joining roomID: \(roomID) invalid invite")
return .failure(.invalidInvite)
} catch ClientError.MatrixApi(.forbidden, _, _, _) {
MXLog.error("Failed joining roomAlias: \(roomID) forbidden")
MXLog.error("Failed joining roomID: \(roomID) forbidden")
return .failure(.forbiddenAccess)
} catch {
MXLog.error("Failed joining roomID: \(roomID) with error: \(error)")
@@ -483,6 +486,9 @@ class ClientProxy: ClientProxyProtocol {
await waitForRoomToSync(roomID: room.id(), timeout: .seconds(30))
return .success(())
} catch ClientError.MatrixApi(kind: .unknown, _, _, _) {
MXLog.error("Failed joining roomAlias: \(roomAlias) invalid invite")
return .failure(.invalidInvite)
} catch ClientError.MatrixApi(.forbidden, _, _, _) {
MXLog.error("Failed joining roomAlias: \(roomAlias) forbidden")
return .failure(.forbiddenAccess)
@@ -39,6 +39,7 @@ enum ClientProxyError: Error {
case failedRetrievingUserIdentity
case failedResolvingRoomAlias
case roomNotInLocalStore
case invalidInvite
}
enum SlidingSyncConstants {