MESSENGER-6018 layout changes simplified login and add error handling for timeouts

This commit is contained in:
JanNiklas Grabowski
2024-05-24 13:38:14 +02:00
parent df9741c530
commit 3475cdda0a
6 changed files with 41 additions and 5 deletions
@@ -240,13 +240,35 @@ class QRLoginService: NSObject, QRLoginServiceProtocol {
}
MXLog.debug("[QRLoginService] Waiting for the login token")
guard case let .success(data) = await rendezvousService.receive(),
// bwi: #6018 add error handling for request timeout and provide more information about the error to the user
let result = await rendezvousService.receive()
guard case let .success(data) = result,
let responsePayload = try? JSONDecoder().decode(QRLoginRendezvousPayload.self, from: data),
let login_token = responsePayload.loginToken,
let homeserver = responsePayload.homeserver,
let homeserverURL = URL(string: homeserver) else {
// Handle possible errors
MXLog.error("[QRLoginService] Invalid login details")
await teardownRendezvous(state: .failed(error: .rendezvousFailed))
guard case let .failure(rendezvousError) = result else {
// Unkown error, display general error information
await teardownRendezvous(state: .failed(error: .rendezvousFailed))
return
}
switch rendezvousError {
case .transportError(let transportError):
// Check for timeout
if transportError == .rendezvousCancelled {
await teardownRendezvous(state: .failed(error: .requestTimedOut))
} else {
// Display general error information for all other errors
await teardownRendezvous(state: .failed(error: .rendezvousFailed))
}
break
default:
// Display general error information for all other errors
await teardownRendezvous(state: .failed(error: .rendezvousFailed))
break
}
return
}
MXLog.debug("[QRLoginService] Received login token \(responsePayload)")