# Persist DownloadedItem size when downloading or when reading file for the first time

This commit is contained in:
herrrta
2024-12-01 17:42:19 -05:00
parent 0f547deb39
commit 7b52528d72
4 changed files with 61 additions and 18 deletions

View File

@@ -5,9 +5,10 @@ import {apiAtom} from "@/providers/JellyfinProvider";
import {useAtom} from "jotai";
import {storage} from "@/utils/mmkv";
import {getDownloadedFileUrl} from "@/hooks/useDownloadedFileOpener";
import * as FileSystem from 'expo-file-system'
import * as FileSystem from 'expo-file-system';
import {FileInfo} from "expo-file-system";
const useDownloadHelper = () => {
const [api] = useAtom(apiAtom);
const {saveImage} = useImageStorage();
@@ -18,7 +19,10 @@ const useDownloadHelper = () => {
}
}
const getDownloadSize = async (...items: BaseItemDto[]) => {
const getDownloadSize = async (
onNewItemSizeFetched: (item: BaseItemDto, size: number) => void,
...items: BaseItemDto[]
) => {
const sizes: number[] = [];
await Promise.all(items.map(item => {
@@ -26,18 +30,17 @@ const useDownloadHelper = () => {
const url = await getDownloadedFileUrl(item.Id!);
if (url) {
const fileInfo: FileInfo = await FileSystem.getInfoAsync(url);
sizes.push(fileInfo.size);
resolve(sizes);
} else reject();
if (fileInfo.exists) {
onNewItemSizeFetched(item, fileInfo.size)
sizes.push(fileInfo.size);
resolve(sizes)
}
}
reject();
})
}));
const size = sizes.reduce((sum, size) => sum + size, 0);
const gb = size / 1e+9;
if (gb >= 1)
return `${gb.toFixed(2)} GB`;
return `${(size / 1024 / 1024).toFixed(2)} MB`;
return sizes.reduce((sum, size) => sum + size, 0);
}
return { saveSeriesPrimaryImage, getDownloadSize }