From f369738f7bce0b69d3ac5b00fd513291fa578724 Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Fri, 9 Jan 2026 09:16:36 +0100 Subject: [PATCH] fix: remove console errors when offline - since offline is supported --- providers/WebSocketProvider.tsx | 49 +++++++++++++++++---------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/providers/WebSocketProvider.tsx b/providers/WebSocketProvider.tsx index f6e49b88..73dcec81 100644 --- a/providers/WebSocketProvider.tsx +++ b/providers/WebSocketProvider.tsx @@ -13,6 +13,7 @@ import { } from "react"; import { AppState, type AppStateStatus } from "react-native"; import { apiAtom, getOrSetDeviceId } from "@/providers/JellyfinProvider"; +import { useNetworkStatus } from "@/providers/NetworkStatusProvider"; interface WebSocketMessage { MessageType: string; @@ -36,6 +37,7 @@ const WebSocketContext = createContext(null); export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { const api = useAtomValue(apiAtom); + const { isConnected: isNetworkConnected } = useNetworkStatus(); const [ws, setWs] = useState(null); const [isConnected, setIsConnected] = useState(false); const [lastMessage, setLastMessage] = useState(null); @@ -46,7 +48,7 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { const reconnectAttemptsRef = useRef(0); const connectWebSocket = useCallback(() => { - if (!deviceId || !api?.accessToken) { + if (!deviceId || !api?.accessToken || !isNetworkConnected) { return; } @@ -74,20 +76,15 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { }, 30000); }; - newWebSocket.onerror = (e) => { - console.error("WebSocket error:", e); + newWebSocket.onerror = () => { + // Don't log errors - this is expected when offline or server unreachable setIsConnected(false); if (reconnectAttemptsRef.current < maxReconnectAttempts) { reconnectAttemptsRef.current++; setTimeout(() => { - console.log( - `WebSocket reconnect attempt ${reconnectAttemptsRef.current}`, - ); connectWebSocket(); }, reconnectDelay); - } else { - console.warn("Max WebSocket reconnect attempts reached."); } }; @@ -113,7 +110,7 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { } newWebSocket.close(); }; - }, [api, deviceId]); + }, [api, deviceId, isNetworkConnected]); useEffect(() => { if (!lastMessage) { @@ -154,26 +151,31 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { }, [connectWebSocket]); useEffect(() => { - if (!deviceId || !api || !api?.accessToken) { + if (!deviceId || !api || !api?.accessToken || !isNetworkConnected) { return; } const init = async () => { - await getSessionApi(api).postFullCapabilities({ - clientCapabilitiesDto: { - AppStoreUrl: "https://apps.apple.com/us/app/streamyfin/id6593660679", - IconUrl: - "https://raw.githubusercontent.com/retardgerman/streamyfinweb/refs/heads/main/public/assets/images/icon_new_withoutBackground.png", - PlayableMediaTypes: ["Audio", "Video"], - SupportedCommands: ["Play"], - SupportsMediaControl: true, - SupportsPersistentIdentifier: true, - }, - }); + try { + await getSessionApi(api).postFullCapabilities({ + clientCapabilitiesDto: { + AppStoreUrl: + "https://apps.apple.com/us/app/streamyfin/id6593660679", + IconUrl: + "https://raw.githubusercontent.com/retardgerman/streamyfinweb/refs/heads/main/public/assets/images/icon_new_withoutBackground.png", + PlayableMediaTypes: ["Audio", "Video"], + SupportedCommands: ["Play"], + SupportsMediaControl: true, + SupportsPersistentIdentifier: true, + }, + }); + } catch { + // Silently fail - expected when offline or server unreachable + } }; init(); - }, [api, deviceId]); + }, [api, deviceId, isNetworkConnected]); useEffect(() => { const handleAppStateChange = (state: AppStateStatus) => { @@ -200,9 +202,8 @@ export const WebSocketProvider = ({ children }: WebSocketProviderProps) => { (message: any) => { if (ws && isConnected) { ws.send(JSON.stringify(message)); - } else { - console.warn("Cannot send message: WebSocket is not connected"); } + // Silently fail when not connected - expected when offline }, [ws, isConnected], );