diff --git a/client/src/App.svelte b/client/src/App.svelte
index d7621be..1992d9b 100644
--- a/client/src/App.svelte
+++ b/client/src/App.svelte
@@ -3,6 +3,7 @@
import { onMount } from "svelte";
import Sidebar from "./components/Sidebar.svelte";
import Topbar from "./components/Topbar.svelte";
+ import MiniPlayer from "./components/MiniPlayer.svelte";
import Files from "./routes/Files.svelte";
import Transfers from "./routes/Transfers.svelte";
import Trash from "./routes/Trash.svelte";
@@ -156,6 +157,8 @@
+
+
{#if menuOpen}
+ import { musicPlayer, togglePlay, playNext, playPrevious, stopPlayback } from "../stores/musicPlayerStore.js";
+ import { API } from "../utils/api.js";
+ import { cleanFileName } from "../utils/filename.js";
+
+ function thumbnailURL(item) {
+ if (!item?.thumbnail) return null;
+ const token = localStorage.getItem("token");
+ const separator = item.thumbnail.includes("?") ? "&" : "?";
+ return `${API}${item.thumbnail}${separator}token=${token}`;
+ }
+
+ function formatTime(seconds) {
+ if (!Number.isFinite(seconds) || seconds < 0) return "0:00";
+ const mins = Math.floor(seconds / 60);
+ const secs = Math.floor(seconds % 60);
+ return `${mins}:${String(secs).padStart(2, "0")}`;
+ }
+
+ function remainingTime(current, total) {
+ if (!Number.isFinite(total) || total <= 0) return "-0:00";
+ const remaining = Math.max(total - (current || 0), 0);
+ return `-${formatTime(remaining)}`;
+ }
+
+ function sourceLabel(item) {
+ if (item?.tracker === "youtube" || item?.thumbnail) return "YouTube";
+ return "Music";
+ }
+
+
+{#if $musicPlayer.currentTrack}
+
+
+
+
+ {#if thumbnailURL($musicPlayer.currentTrack)}
+
})
+ {:else}
+
+
+
+ {/if}
+
+
+
+
{formatTime($musicPlayer.currentTime)}
+
+
+ {remainingTime($musicPlayer.currentTime, $musicPlayer.duration)}
+
+
+
+
+
+
+
+
+
+
+{/if}
+
+
diff --git a/client/src/routes/Music.svelte b/client/src/routes/Music.svelte
index 4063516..dadcb7a 100644
--- a/client/src/routes/Music.svelte
+++ b/client/src/routes/Music.svelte
@@ -1,24 +1,25 @@
@@ -281,14 +184,14 @@
{#each items as item, idx (item.id)}