-
- {queueInfo.queue.length === 0 ? (
-
-
No downloads in queue
-
) : (queueInfo.queue.map((item) => (
-
-
{getStatusIcon(item.status)}
-
-
-
-
{item.track_name}
-
- {item.artist_name}
- {item.album_name && ` • ${item.album_name}`}
-
-
- {getStatusBadge(item.status)}
-
+
+
+ {queueInfo.queue.length === 0 ? (
+
+
No downloads in queue
+
) : (queueInfo.queue.map((item) => (
+
+
{getStatusIcon(item.status)}
-
- {item.status === "downloading" && (
-
- {item.progress > 0
+
+
+
+
{item.track_name}
+
+ {item.artist_name}
+ {item.album_name && ` • ${item.album_name}`}
+
+
+ {getStatusBadge(item.status)}
+
+
+
+ {item.status === "downloading" && (
+
+ {item.progress > 0
? `${item.progress.toFixed(2)} MB`
: queueInfo.is_downloading && queueInfo.current_speed > 0
? "Downloading..."
: "Starting..."}
-
-
- {item.speed > 0
+
+
+ {item.speed > 0
? `${item.speed.toFixed(2)} MB/s`
: queueInfo.current_speed > 0
? `${queueInfo.current_speed.toFixed(2)} MB/s`
: "—"}
-
-
)}
+
+
)}
-
- {item.status === "completed" && (
- {item.progress.toFixed(2)} MB
-
)}
-
- {item.status === "skipped" && (
- File already exists
-
)}
+ {item.status === "completed" && (
+ {item.progress.toFixed(2)} MB
+
)}
-
- {item.status === "failed" && item.error_message && (
- {item.error_message}
-
)}
-
- {(item.status === "completed" || item.status === "skipped") && item.file_path && (
- {item.file_path}
-
)}
-
-
-
)))}
-
+ {item.status === "skipped" && (
+ File already exists
+
)}
+
+
+ {item.status === "failed" && item.error_message && (
+ {item.error_message}
+
)}
+
+
+ {(item.status === "completed" || item.status === "skipped") && item.file_path && (
+ {item.file_path}
+
)}
+
+
+
)))}
-
- );
+
+
+ );
}
diff --git a/frontend/src/components/SettingsPage.tsx b/frontend/src/components/SettingsPage.tsx
index 8fba270..e2210f1 100644
--- a/frontend/src/components/SettingsPage.tsx
+++ b/frontend/src/components/SettingsPage.tsx
@@ -8,10 +8,12 @@ import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip
import { FolderOpen, Save, RotateCcw, Info } from "lucide-react";
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog";
import { Switch } from "@/components/ui/switch";
+import { Progress } from "@/components/ui/progress";
import { getSettings, getSettingsWithDefaults, saveSettings, resetToDefaultSettings, applyThemeMode, applyFont, FONT_OPTIONS, FOLDER_PRESETS, FILENAME_PRESETS, TEMPLATE_VARIABLES, type Settings as SettingsType, type FontFamily, type FolderPreset, type FilenamePreset } from "@/lib/settings";
import { themes, applyTheme } from "@/lib/themes";
import { SelectFolder } from "../../wailsjs/go/main/App";
import { toastWithSound as toast } from "@/lib/toast-with-sound";
+import { useDownloadProgress } from "@/hooks/useDownloadProgress";
const TidalIcon = () => (
);
}
diff --git a/frontend/src/lib/settings.ts b/frontend/src/lib/settings.ts
index ffe0a89..86974d4 100644
--- a/frontend/src/lib/settings.ts
+++ b/frontend/src/lib/settings.ts
@@ -21,7 +21,7 @@ export interface Settings {
embedMaxQualityCover: boolean;
operatingSystem: "Windows" | "linux/MacOS";
tidalQuality: "LOSSLESS" | "HI_RES_LOSSLESS";
- qobuzQuality: "6" | "7" | "27";
+ qobuzQuality: "6" | "7";
amazonQuality: "HI_RES";
}
export const FOLDER_PRESETS: Record