From a3307a90a36782dd69a0801ec595275109534837 Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Sat, 11 Jan 2025 11:21:36 +0100 Subject: [PATCH 1/2] feat: server discovery during login --- app/login.tsx | 17 ++-- bun.lockb | Bin 592757 -> 593505 bytes components/JellyfinServerDiscovery.tsx | 44 ++++++++++ hooks/useJellyfinDiscovery.tsx | 109 +++++++++++++++++++++++++ package.json | 1 + providers/JellyfinProvider.tsx | 23 +++++- 6 files changed, 185 insertions(+), 9 deletions(-) create mode 100644 components/JellyfinServerDiscovery.tsx create mode 100644 hooks/useJellyfinDiscovery.tsx diff --git a/app/login.tsx b/app/login.tsx index 614ad793..9ac2d06c 100644 --- a/app/login.tsx +++ b/app/login.tsx @@ -1,16 +1,12 @@ import { Button } from "@/components/Button"; import { Input } from "@/components/common/Input"; import { Text } from "@/components/common/Text"; +import JellyfinServerDiscovery from "@/components/JellyfinServerDiscovery"; import { PreviousServersList } from "@/components/PreviousServersList"; import { Colors } from "@/constants/Colors"; import { apiAtom, useJellyfin } from "@/providers/JellyfinProvider"; -import { - Ionicons, - MaterialCommunityIcons, - MaterialIcons, -} from "@expo/vector-icons"; +import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; import { PublicSystemInfo } from "@jellyfin/sdk/lib/generated-client"; -import { getSystemApi } from "@jellyfin/sdk/lib/utils/api"; import { Image } from "expo-image"; import { useLocalSearchParams, useNavigation } from "expo-router"; import { useAtom } from "jotai"; @@ -313,6 +309,15 @@ const Login: React.FC = () => { > Connect + { + setServerURL(server.address); + if (server.serverName) { + setServerName(server.serverName); + } + handleConnect(server.address); + }} + /> { handleConnect(s.address); diff --git a/bun.lockb b/bun.lockb index df0e1988d57413c75adb62fda367ddb7b78568ff..935cb03c1af4949cacc791146afacef67f8b1329 100755 GIT binary patch delta 93551 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 t^D2sW7aH*=Biat2?^Xr-N~gS7f*pvtX0~!DT delta 93433 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�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 U$Rz#sbXL4Wudm48p}+a|zq%Q(u>b%7 diff --git a/components/JellyfinServerDiscovery.tsx b/components/JellyfinServerDiscovery.tsx new file mode 100644 index 00000000..5c310d64 --- /dev/null +++ b/components/JellyfinServerDiscovery.tsx @@ -0,0 +1,44 @@ +import React from "react"; +import { View, Text, TouchableOpacity } from "react-native"; +import { useJellyfinDiscovery } from "@/hooks/useJellyfinDiscovery"; +import { Button } from "./Button"; +import { ListGroup } from "./list/ListGroup"; +import { ListItem } from "./list/ListItem"; + +interface Props { + onServerSelect?: (server: { address: string; serverName?: string }) => void; +} + +const JellyfinServerDiscovery: React.FC = ({ onServerSelect }) => { + const { servers, isSearching, startDiscovery } = useJellyfinDiscovery(); + + return ( + + + + {servers.length ? ( + + {servers.map((server) => ( + + onServerSelect?.({ + address: server.address, + serverName: server.serverName, + }) + } + title={server.address} + showArrow + /> + ))} + + ) : null} + + ); +}; + +export default JellyfinServerDiscovery; diff --git a/hooks/useJellyfinDiscovery.tsx b/hooks/useJellyfinDiscovery.tsx new file mode 100644 index 00000000..eab6076a --- /dev/null +++ b/hooks/useJellyfinDiscovery.tsx @@ -0,0 +1,109 @@ +import { useState } from "react"; +import dgram from "react-native-udp"; + +const JELLYFIN_DISCOVERY_PORT = 7359; +const DISCOVERY_MESSAGE = "Who is JellyfinServer?"; + +interface ServerInfo { + address: string; + port: number; + serverId?: string; + 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 = () => { + setIsSearching(true); + setServers([]); + + const discoveredServers = new Set(); + + const socket = dgram.createSocket({ + type: "udp4", + reusePort: true, + debug: __DEV__, + }); + + socket.on("error", (err) => { + console.error("Socket error:", err); + socket.close(); + setIsSearching(false); + }); + + socket.bind(0, () => { + console.log("UDP socket bound successfully"); + + try { + socket.setBroadcast(true); + const messageBuffer = stringToUint8Array(DISCOVERY_MESSAGE); + + socket.send( + messageBuffer, + 0, + messageBuffer.length, + JELLYFIN_DISCOVERY_PORT, + "255.255.255.255", + (err) => { + if (err) { + console.error("Failed to send discovery message:", err); + return; + } + console.log("Discovery message sent successfully"); + } + ); + + setTimeout(() => { + setIsSearching(false); + socket.close(); + }, 5000); + } catch (error) { + console.error("Error during discovery:", error); + setIsSearching(false); + } + }); + + socket.on("message", (msg, rinfo: any) => { + if (discoveredServers.has(rinfo.address)) { + return; + } + + try { + const response = String.fromCharCode(...new Uint8Array(msg)); + const serverInfo = JSON.parse(response); + discoveredServers.add(rinfo.address); + + const newServer: ServerInfo = { + address: `http://${rinfo.address}:${serverInfo.Port || 8096}`, + port: serverInfo.Port || 8096, + serverId: serverInfo.Id, + serverName: serverInfo.Name, + }; + + setServers((prev) => [...prev, newServer]); + } catch (error) { + console.error("Error parsing server response:", error); + } + }); + + return () => { + socket.close(); + }; + }; + + return { + servers, + isSearching, + startDiscovery, + }; +}; diff --git a/package.json b/package.json index 7c6463e0..07fedc03 100644 --- a/package.json +++ b/package.json @@ -94,6 +94,7 @@ "react-native-screens": "3.31.1", "react-native-svg": "15.2.0", "react-native-tab-view": "^3.5.2", + "react-native-udp": "^4.1.7", "react-native-uitextview": "^1.4.0", "react-native-url-polyfill": "^2.0.0", "react-native-uuid": "^2.0.2", diff --git a/providers/JellyfinProvider.tsx b/providers/JellyfinProvider.tsx index 2b602323..1002e55b 100644 --- a/providers/JellyfinProvider.tsx +++ b/providers/JellyfinProvider.tsx @@ -50,6 +50,15 @@ 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(); @@ -72,7 +81,13 @@ export const JellyfinProvider: React.FC<{ children: ReactNode }> = ({ const [user, setUser] = useAtom(userAtom); const [isPolling, setIsPolling] = useState(false); const [secret, setSecret] = useState(null); - const [settings, updateSettings, pluginSettings, setPluginSettings, refreshStreamyfinPluginSettings] = useSettings(); + const [ + settings, + updateSettings, + pluginSettings, + setPluginSettings, + refreshStreamyfinPluginSettings, + ] = useSettings(); const { clearAllJellyseerData, setJellyseerrUser } = useJellyseerr(); useQuery({ @@ -233,12 +248,14 @@ export const JellyfinProvider: React.FC<{ children: ReactNode }> = ({ const recentPluginSettings = await refreshStreamyfinPluginSettings(); if (recentPluginSettings?.jellyseerrServerUrl?.value) { - const jellyseerrApi = new JellyseerrApi(recentPluginSettings.jellyseerrServerUrl.value); + const jellyseerrApi = new JellyseerrApi( + recentPluginSettings.jellyseerrServerUrl.value + ); await jellyseerrApi.test().then((result) => { if (result.isValid && result.requiresPass) { jellyseerrApi.login(username, password).then(setJellyseerrUser); } - }) + }); } } } catch (error) { From c8da365a0048306e49701e8d57161f65411f02bc Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Sun, 12 Jan 2025 09:36:23 +0100 Subject: [PATCH 2/2] 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();