From fde1140f2407de239b73838e18f8a66922767c68 Mon Sep 17 00:00:00 2001 From: Ilyas Hallak Date: Sun, 19 Oct 2025 11:08:13 +0200 Subject: [PATCH] refactor: Check server reachability on app resume instead of app start - Move server check from init to onAppResume() in AppViewModel - Add scenePhase observer in readeckApp - Check only when app becomes active (.active phase) - Respects 30s cache - won't call API if recently checked --- readeck/UI/AppViewModel.swift | 6 +++++- readeck/UI/readeckApp.swift | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/readeck/UI/AppViewModel.swift b/readeck/UI/AppViewModel.swift index 4e98406..182ef83 100644 --- a/readeck/UI/AppViewModel.swift +++ b/readeck/UI/AppViewModel.swift @@ -24,7 +24,6 @@ class AppViewModel: ObservableObject { Task { await loadSetupStatus() - await checkServerReachability() } } @@ -70,6 +69,11 @@ class AppViewModel: ObservableObject { hasFinishedSetup = settingsRepository.hasFinishedSetup } + @MainActor + func onAppResume() async { + await checkServerReachability() + } + @MainActor private func checkServerReachability() async { isServerReachable = await checkServerReachabilityUseCase.execute() diff --git a/readeck/UI/readeckApp.swift b/readeck/UI/readeckApp.swift index e6fce1b..07d0fdd 100644 --- a/readeck/UI/readeckApp.swift +++ b/readeck/UI/readeckApp.swift @@ -12,6 +12,7 @@ import netfox struct readeckApp: App { @StateObject private var appViewModel = AppViewModel() @StateObject private var appSettings = AppSettings() + @Environment(\.scenePhase) private var scenePhase var body: some Scene { WindowGroup { @@ -38,6 +39,13 @@ struct readeckApp: App { await loadAppSettings() } } + .onChange(of: scenePhase) { oldPhase, newPhase in + if newPhase == .active { + Task { + await appViewModel.onAppResume() + } + } + } } }