/** * Composable for reloading data when server becomes reachable * * Handles the cache-first timing issue where local cached data is shown, * but we want to refresh from the server when it becomes available again. * * @req: UR-031 - Function offline on cached data * @req: DR-012 - Local database for media metadata cache * * @param reloadFn - Async function to call when server becomes reachable * @returns Object with markLoaded function to indicate initial load is complete * * @example * ```svelte * * ``` */ export function useServerReachabilityReload(reloadFn: () => void | Promise) { let hasLoadedOnce = false; let previousServerReachable = false; // Return an object with reactive getter/setter that can be used in Svelte components return { /** * Call this after initial data load to enable server reconnection tracking */ markLoaded: () => { hasLoadedOnce = true; }, /** * Call this in a $effect block to watch for server reconnection * Pass the current isServerReachable value and this will handle the logic */ checkServerReachability: (isServerReachable: boolean) => { if (isServerReachable && !previousServerReachable && hasLoadedOnce) { // Server just became reachable and we've done an initial load // Trigger reload to get fresh data reloadFn(); } previousServerReachable = isServerReachable; }, }; }