mirror of
https://github.com/streamyfin/streamyfin.git
synced 2026-02-26 05:52:34 +00:00
Cleans up debugging output that was left in the storage percentage calculation function to improve code quality and reduce console noise in production.
116 lines
3.8 KiB
TypeScript
116 lines
3.8 KiB
TypeScript
import { useQuery } from "@tanstack/react-query";
|
|
import { useTranslation } from "react-i18next";
|
|
import { Platform, View } from "react-native";
|
|
import { toast } from "sonner-native";
|
|
import { Text } from "@/components/common/Text";
|
|
import { Colors } from "@/constants/Colors";
|
|
import { useHaptic } from "@/hooks/useHaptic";
|
|
import { useDownload } from "@/providers/DownloadProvider";
|
|
import { ListGroup } from "../list/ListGroup";
|
|
import { ListItem } from "../list/ListItem";
|
|
|
|
export const StorageSettings = () => {
|
|
const { deleteAllFiles, appSizeUsage } = useDownload();
|
|
const { t } = useTranslation();
|
|
const successHapticFeedback = useHaptic("success");
|
|
const errorHapticFeedback = useHaptic("error");
|
|
|
|
const { data: size } = useQuery({
|
|
queryKey: ["appSize"],
|
|
queryFn: async () => {
|
|
const app = await appSizeUsage();
|
|
|
|
return {
|
|
appSize: app.appSize,
|
|
total: app.total,
|
|
remaining: app.remaining,
|
|
used: (app.total - app.remaining) / app.total,
|
|
};
|
|
},
|
|
});
|
|
|
|
const onDeleteClicked = async () => {
|
|
try {
|
|
await deleteAllFiles();
|
|
successHapticFeedback();
|
|
} catch (_e) {
|
|
errorHapticFeedback();
|
|
toast.error(t("home.settings.toasts.error_deleting_files"));
|
|
}
|
|
};
|
|
|
|
const calculatePercentage = (value: number, total: number) => {
|
|
return ((value / total) * 100).toFixed(2);
|
|
};
|
|
|
|
return (
|
|
<View>
|
|
<View className='flex flex-col gap-y-1'>
|
|
<View className='flex flex-row items-center justify-between'>
|
|
<Text className=''>{t("home.settings.storage.storage_title")}</Text>
|
|
{size && (
|
|
<Text className='text-neutral-500'>
|
|
{t("home.settings.storage.size_used", {
|
|
used: Number(size.total - size.remaining).bytesToReadable(),
|
|
total: size.total?.bytesToReadable(),
|
|
})}
|
|
</Text>
|
|
)}
|
|
</View>
|
|
<View className='h-3 w-full bg-gray-100/10 rounded-md overflow-hidden flex flex-row'>
|
|
{size && (
|
|
<View className='flex flex-row'>
|
|
<View
|
|
style={{
|
|
width: `${(size.appSize / size.total) * 100}%`,
|
|
backgroundColor: Colors.primaryRGB,
|
|
}}
|
|
/>
|
|
<View
|
|
style={{
|
|
width: `${((size.total - size.remaining - size.appSize) / size.total) * 100}%`,
|
|
backgroundColor: Colors.primaryLightRGB,
|
|
}}
|
|
/>
|
|
</View>
|
|
)}
|
|
</View>
|
|
<View className='flex flex-row gap-x-2'>
|
|
{size && (
|
|
<View className='flex flex-row gap-x-2'>
|
|
<View className='flex flex-row items-center'>
|
|
<View className='w-3 h-3 rounded-full bg-purple-600 mr-1' />
|
|
<Text className='text-white text-xs'>
|
|
{t("home.settings.storage.app_usage", {
|
|
usedSpace: calculatePercentage(size.appSize, size.total),
|
|
})}
|
|
</Text>
|
|
</View>
|
|
<View className='flex flex-row items-center'>
|
|
<View className='w-3 h-3 rounded-full bg-purple-400 mr-1' />
|
|
<Text className='text-white text-xs'>
|
|
{t("home.settings.storage.device_usage", {
|
|
availableSpace: calculatePercentage(
|
|
size.total - size.remaining - size.appSize,
|
|
size.total,
|
|
),
|
|
})}
|
|
</Text>
|
|
</View>
|
|
</View>
|
|
)}
|
|
</View>
|
|
</View>
|
|
{!Platform.isTV && (
|
|
<ListGroup>
|
|
<ListItem
|
|
textColor='red'
|
|
onPress={onDeleteClicked}
|
|
title={t("home.settings.storage.delete_all_downloaded_files")}
|
|
/>
|
|
</ListGroup>
|
|
)}
|
|
</View>
|
|
);
|
|
};
|