From c8da365a0048306e49701e8d57161f65411f02bc Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Sun, 12 Jan 2025 09:36:23 +0100 Subject: [PATCH] fix: issues listed in pr --- hooks/useJellyfinDiscovery.tsx | 25 +++++++++++-------------- providers/JellyfinProvider.tsx | 9 --------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/hooks/useJellyfinDiscovery.tsx b/hooks/useJellyfinDiscovery.tsx index eab6076a..963dfe81 100644 --- a/hooks/useJellyfinDiscovery.tsx +++ b/hooks/useJellyfinDiscovery.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useCallback } from "react"; import dgram from "react-native-udp"; const JELLYFIN_DISCOVERY_PORT = 7359; @@ -11,23 +11,16 @@ interface ServerInfo { serverName?: string; } -const stringToUint8Array = (str: string): Uint8Array => { - const arr = new Uint8Array(str.length); - for (let i = 0; i < str.length; i++) { - arr[i] = str.charCodeAt(i); - } - return arr; -}; - export const useJellyfinDiscovery = () => { const [servers, setServers] = useState([]); const [isSearching, setIsSearching] = useState(false); - const startDiscovery = () => { + const startDiscovery = useCallback(() => { setIsSearching(true); setServers([]); const discoveredServers = new Set(); + let discoveryTimeout: NodeJS.Timeout; const socket = dgram.createSocket({ type: "udp4", @@ -46,7 +39,7 @@ export const useJellyfinDiscovery = () => { try { socket.setBroadcast(true); - const messageBuffer = stringToUint8Array(DISCOVERY_MESSAGE); + const messageBuffer = new TextEncoder().encode(DISCOVERY_MESSAGE); socket.send( messageBuffer, @@ -63,7 +56,7 @@ export const useJellyfinDiscovery = () => { } ); - setTimeout(() => { + discoveryTimeout = setTimeout(() => { setIsSearching(false); socket.close(); }, 5000); @@ -79,7 +72,7 @@ export const useJellyfinDiscovery = () => { } try { - const response = String.fromCharCode(...new Uint8Array(msg)); + const response = new TextDecoder().decode(msg); const serverInfo = JSON.parse(response); discoveredServers.add(rinfo.address); @@ -97,9 +90,13 @@ export const useJellyfinDiscovery = () => { }); return () => { + clearTimeout(discoveryTimeout); + if (isSearching) { + setIsSearching(false); + } socket.close(); }; - }; + }, []); return { servers, diff --git a/providers/JellyfinProvider.tsx b/providers/JellyfinProvider.tsx index 1002e55b..4455dfe1 100644 --- a/providers/JellyfinProvider.tsx +++ b/providers/JellyfinProvider.tsx @@ -50,15 +50,6 @@ export const JellyfinProvider: React.FC<{ children: ReactNode }> = ({ const [jellyfin, setJellyfin] = useState(undefined); const [deviceId, setDeviceId] = useState(undefined); - useEffect(() => { - async () => { - const servers = jellyfin?.discovery.getRecommendedServerCandidates( - "demo.jellyfin.org/stable" - ); - console.log(servers); - }; - }, [jellyfin]); - useEffect(() => { (async () => { const id = getOrSetDeviceId();