fix: remove console errors when offline - since offline is supported

This commit is contained in:
Fredrik Burmester
2026-01-09 09:16:36 +01:00
parent ac6288d9a4
commit f369738f7b

View File

@@ -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<WebSocketContextType | null>(null);
export const WebSocketProvider = ({ children }: WebSocketProviderProps) => {
const api = useAtomValue(apiAtom);
const { isConnected: isNetworkConnected } = useNetworkStatus();
const [ws, setWs] = useState<WebSocket | null>(null);
const [isConnected, setIsConnected] = useState(false);
const [lastMessage, setLastMessage] = useState<WebSocketMessage | null>(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],
);