diff --git a/src/components/AppLayout.jsx b/src/components/AppLayout.jsx
index 046d850..6f93176 100644
--- a/src/components/AppLayout.jsx
+++ b/src/components/AppLayout.jsx
@@ -7,6 +7,7 @@ import { usePrimeReactThemeSwitcher } from '@/hooks/usePrimeReactThemeSwitcher.j
import CustomToastContainer from '../components/ToastProvider.jsx';
import 'primereact/resources/themes/bootstrap4-light-blue/theme.css';
import 'primereact/resources/primereact.min.css';
+import "primeicons/primeicons.css";
const LoginPage = lazy(() => import('./Login.jsx'));
const LyricSearch = lazy(() => import('./LyricSearch'));
@@ -14,7 +15,7 @@ const MediaRequestForm = lazy(() => import('./TRip/MediaRequestForm.jsx'));
const RequestManagement = lazy(() => import('./TRip/RequestManagement.jsx'));
const Player = lazy(() => import('./AudioPlayer.jsx'));
-export default function Root({ child }) {
+export default function Root({ child, user = undefined }) {
window.toast = toast;
const theme = document.documentElement.getAttribute("data-theme")
usePrimeReactThemeSwitcher(theme);
@@ -34,7 +35,7 @@ export default function Root({ child }) {
*/}
{child == "LoginPage" && ()}
{child == "LyricSearch" && ()}
- {child == "Player" && ()}
+ {child == "Player" && ()}
{child == "Memes" && }
{child == "qs2.MediaRequestForm" && }
{child == "qs2.RequestManagement" && }
diff --git a/src/components/AudioPlayer.jsx b/src/components/AudioPlayer.jsx
index 24b6938..81c48c3 100644
--- a/src/components/AudioPlayer.jsx
+++ b/src/components/AudioPlayer.jsx
@@ -5,6 +5,7 @@ import Pause from "@mui/icons-material/Pause";
import "@styles/player.css";
import { API_URL } from "@/config";
+import { requireAuthHook } from "@/hooks/requireAuthHook";
const STATIONS = {
main: { label: "Main" },
@@ -14,7 +15,8 @@ const STATIONS = {
pop: { label: "Pop" },
};
-export default function Player() {
+
+export default function Player({ user }) {
const [activeStation, setActiveStation] = useState("main");
const [isPlaying, setIsPlaying] = useState(false);
const [trackTitle, setTrackTitle] = useState("");
@@ -270,7 +272,8 @@ export default function Player() {
))}
-
+ {user ?
Hello, {user.user} :
Not logged in}
+ < div className="music-container mt-8">
{trackAlbum}
@@ -328,7 +331,7 @@ export default function Player() {
-
+
>
);
}
diff --git a/src/components/TRip/MediaRequestForm.jsx b/src/components/TRip/MediaRequestForm.jsx
index 582936b..24a252e 100644
--- a/src/components/TRip/MediaRequestForm.jsx
+++ b/src/components/TRip/MediaRequestForm.jsx
@@ -268,7 +268,7 @@ export default function MediaRequestForm() {
if (albumsToFetch.length === 0) return;
const fetchTracksSequentially = async () => {
- const minDelay = 500; // ms between API requests
+ const minDelay = 650; // ms between API requests
setIsFetching(true);
const totalAlbums = albumsToFetch.length;
diff --git a/src/components/TRip/RequestManagement.jsx b/src/components/TRip/RequestManagement.jsx
index bc5c66e..bb6e646 100644
--- a/src/components/TRip/RequestManagement.jsx
+++ b/src/components/TRip/RequestManagement.jsx
@@ -308,38 +308,56 @@ export default function RequestManagement() {
emptyMessage="No requests found."
onRowClick={handleRowClick}
>
- textWithEllipsis(row.id, "6rem")} />
+
+ (
+
+ {row.id.split("-").slice(-1)[0]}
+
+ )}
+ />
textWithEllipsis(row.target, "10rem")} />
row.tracks} />
formatProgress(row.progress)} style={{ width: "8rem", textAlign: "center" }} sortable />
- {
- const url = tarballUrl(row.tarball, row.quality || "FLAC");
- return url ? (
-
- {truncate(url.split("/").pop(), 16)}
-
- ) : (
- "—"
- );
- }}
- style={{ width: "10rem" }}
- />
+
+ {/* download icon in header */}
+ Tarball
+
+ }
+ body={(row) => {
+ const url = tarballUrl(row.tarball, row.quality || "FLAC");
+ const encodedURL = encodeURI(url);
+ if (!url) return "—";
+
+ const fileName = url.split("/").pop();
+
+ return (
+
+ {truncate(fileName, 16)}
+
+ );
+ }}
+ style={{ width: "10rem" }}
+ />
@@ -402,7 +420,7 @@ export default function RequestManagement() {
Tarball:{" "}