(connectionStatus: ConnectionStatus)
| 17 | }; |
| 18 | |
| 19 | export const useInitialSync = (connectionStatus: ConnectionStatus) => { |
| 20 | const refetchAll = useCallback(async () => { |
| 21 | const { setQueue, setPlayback, setSettings, setSynced } = |
| 22 | useRemoteStore.getState(); |
| 23 | |
| 24 | try { |
| 25 | const [queue, playback, settings] = await Promise.all([ |
| 26 | fetchJSON<Queue>('/api/queue'), |
| 27 | fetchJSON<PlaybackState>('/api/playback'), |
| 28 | fetchJSON<SettingsState>('/api/settings'), |
| 29 | ]); |
| 30 | |
| 31 | setQueue(queue); |
| 32 | setPlayback(playback); |
| 33 | setSettings(settings); |
| 34 | setSynced(true); |
| 35 | } catch (error) { |
| 36 | console.error('Initial sync failed:', error); |
| 37 | } |
| 38 | }, []); |
| 39 | |
| 40 | const prevStatus = useRef(connectionStatus); |
| 41 | |
| 42 | useEffect(() => { |
| 43 | if ( |
| 44 | prevStatus.current !== 'connected' && |
| 45 | connectionStatus === 'connected' |
| 46 | ) { |
| 47 | refetchAll(); |
| 48 | } |
| 49 | prevStatus.current = connectionStatus; |
| 50 | }, [connectionStatus, refetchAll]); |
| 51 | }; |
no test coverage detected