From e708a80474822fac8094b45428109b85e646410d Mon Sep 17 00:00:00 2001 From: Yaros Date: Fri, 30 Oct 2026 07:21:04 +0100 Subject: [PATCH] fix(mobile): don't block startup when offline (#32652) * fix(mobile): don't block startup when offline * chore: implement suggestions --------- Co-authored-by: Santo Shakil (cherry picked from commit 32b137ab3713545324873f552adb51b9ef2aecde) --- .../lib/pages/common/splash_screen.page.dart | 25 +++++++++++++++---- mobile/lib/services/api.service.dart | 6 +++-- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/mobile/lib/pages/common/splash_screen.page.dart b/mobile/lib/pages/common/splash_screen.page.dart index 69835598b..c157fa514 100644 --- a/mobile/lib/pages/common/splash_screen.page.dart +++ b/mobile/lib/pages/common/splash_screen.page.dart @@ -299,7 +299,7 @@ class SplashScreenPageState extends ConsumerState { @override void initState() { super.initState(); - unawaited(ref.read(authProvider.notifier).setOpenApiServiceEndpoint().whenComplete(() => resumeSession())); + unawaited(resumeSession()); } Future resumeSession() async { @@ -314,13 +314,28 @@ class SplashScreenPageState extends ConsumerState { final backupNotifier = ref.read(backupProvider.notifier); final lifeCycle = ref.read(appStateProvider.notifier); final viewIntentHandler = ref.read(viewIntentHandlerProvider); + final authNotifier = ref.read(authProvider.notifier); unawaited( - ref - .read(authProvider.notifier) - .saveAuthInfo(accessToken: accessToken) + authNotifier + .setOpenApiServiceEndpoint() + .catchError((Object error, StackTrace stackTrace) { + log.warning('Failed to resolve server endpoint', error, stackTrace); + return null; + }) + .then((_) async { + if (Store.tryGet(StoreKey.accessToken) != accessToken) { + return false; + } + await authNotifier.saveAuthInfo(accessToken: accessToken); + return true; + }) .then( - (_) async { + (sessionResumed) async { + if (!sessionResumed) { + return; + } + try { wsProvider.connect(); unawaited(infoProvider.getServerInfo()); diff --git a/mobile/lib/services/api.service.dart b/mobile/lib/services/api.service.dart index 9db9a36ec..5708d56e6 100644 --- a/mobile/lib/services/api.service.dart +++ b/mobile/lib/services/api.service.dart @@ -115,9 +115,11 @@ class ApiService { Future _isEndpointAvailable(String serverUrl) async { final endpoint = serverUrl.endsWith('/api') ? serverUrl : '$serverUrl/api'; + // Probe with a throwaway client so the shared client keeps pointing at the active endpoint + final probeClient = ApiClient(basePath: endpoint)..client = NetworkRepository.client; + try { - setEndpoint(endpoint); - await serverInfoApi.pingServer().timeout(const Duration(seconds: 5)); + await ServerApi(probeClient).pingServer().timeout(const Duration(seconds: 5)); } on TimeoutException catch (_) { return false; } on SocketException catch (_) {