import { Button } from "@/components/Button"; import { Text } from "@/components/common/Text"; import { runningProcesses } from "@/components/DownloadItem"; import { ListItem } from "@/components/ListItem"; import ProgressCircle from "@/components/ProgressCircle"; import { apiAtom, useJellyfin, userAtom } from "@/providers/JellyfinProvider"; import { Ionicons } from "@expo/vector-icons"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import AsyncStorage from "@react-native-async-storage/async-storage"; import * as FileSystem from "expo-file-system"; import { useRouter } from "expo-router"; import { FFmpegKit } from "ffmpeg-kit-react-native"; import { useAtom } from "jotai"; import { useEffect, useState } from "react"; import { TouchableOpacity, View } from "react-native"; const deleteAllFiles = async () => { const directoryUri = FileSystem.documentDirectory; try { const fileNames = await FileSystem.readDirectoryAsync(directoryUri!); for (let item of fileNames) { await FileSystem.deleteAsync(`${directoryUri}/${item}`); } AsyncStorage.removeItem("downloaded_files"); } catch (error) { console.error("Failed to delete the directory:", error); } }; const deleteFile = async (id: string | null | undefined) => { if (!id) return; FileSystem.deleteAsync(`${FileSystem.documentDirectory}/${id}.mp4`).catch( (err) => console.error(err) ); AsyncStorage.setItem( "downloaded_files", JSON.stringify([ JSON.parse( (await AsyncStorage.getItem("downloaded_files")) || "[]" ).filter((f: string) => f !== id), ]) ); }; const listDownloadedFiles = async () => { const directoryUri = FileSystem.documentDirectory; // Directory where files are stored try { const fileNames = await FileSystem.readDirectoryAsync(directoryUri!); return fileNames; // This will be an array of file names in the directory } catch (error) { console.error("Failed to read the directory:", error); return []; } }; export default function settings() { const { logout } = useJellyfin(); const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); const [files, setFiles] = useState([]); const [key, setKey] = useState(0); const [session, setSession] = useAtom(runningProcesses); const router = useRouter(); const [activeProcess] = useAtom(runningProcesses); useEffect(() => { (async () => { const data = JSON.parse( (await AsyncStorage.getItem("downloaded_files")) || "[]" ) as BaseItemDto[]; setFiles(data); })(); }, [key]); return ( Information Downloads {files.length > 0 ? ( {files.map((file) => ( { router.back(); router.push( `/(auth)/player/offline/page?url=${file.Id}.mp4&itemId=${file.Id}` ); }} > { deleteFile(file.Id); setKey((prevKey) => prevKey + 1); }} > } /> ))} ) : activeProcess ? ( } /> ) : ( No downloaded files )} {session?.item.Id && ( )} ); }