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:{" "}

- +