import { listen } from "@tauri-apps/api/event"; import type { DownloadableMetadata } from "~/types"; export type QueueState = { queue: Array<{ meta: DownloadableMetadata; status: string; dl_progress: number | null; dl_current: number; dl_max: number; disk_progress: number | null; disk_current: number; disk_max: number; }>; status: string; }; export type StatsState = { speed: number; // Bytes per second time: number; // Seconds, }; export const useQueueState = () => useState("queue", () => ({ queue: [], status: "Unknown" })); export const useStatsState = () => useState("stats", () => ({ speed: 0, time: 0 })); listen("update_queue", (event) => { const queue = useQueueState(); queue.value = event.payload as QueueState; }); listen("update_stats", (event) => { const stats = useStatsState(); stats.value = event.payload as StatsState; }); export const useDownloadHistory = () => useState>("history", () => []); export function formatKilobytes(bytes: number): string { const units = ["K", "M", "G", "T", "P"]; let value = bytes; let unitIndex = 0; const scalar = 1000; while (value >= scalar && unitIndex < units.length - 1) { value /= scalar; unitIndex++; } return `${value.toFixed(1)} ${units[unitIndex]}`; }