forked from Ninjalama/streamyfin_mirror
64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models";
|
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
import { useQueryClient } from "@tanstack/react-query";
|
|
import * as FileSystem from "expo-file-system";
|
|
|
|
export const useFiles = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
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) => {
|
|
try {
|
|
const files = await FileSystem.readDirectoryAsync(
|
|
`${FileSystem.documentDirectory}`
|
|
);
|
|
console.log(`Files:`, files);
|
|
|
|
await FileSystem.deleteAsync(
|
|
`${FileSystem.documentDirectory}/${id}.mp4`
|
|
).catch((err) => console.error(err));
|
|
|
|
const currentFiles = JSON.parse(
|
|
(await AsyncStorage.getItem("downloaded_files")) ?? "[]"
|
|
) as BaseItemDto[];
|
|
|
|
console.log(
|
|
"Current files",
|
|
currentFiles.map((i) => i.Name)
|
|
);
|
|
|
|
const updatedFiles = currentFiles.filter((f) => f.Id !== id);
|
|
|
|
console.log(
|
|
"Current files",
|
|
currentFiles.map((i) => i.Name)
|
|
);
|
|
|
|
await AsyncStorage.setItem(
|
|
"downloaded_files",
|
|
JSON.stringify(updatedFiles)
|
|
);
|
|
|
|
queryClient.invalidateQueries({ queryKey: ["downloaded_files"] });
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
};
|
|
|
|
return { deleteFile, deleteAllFiles };
|
|
};
|