From 61a314254b1eab81da6ccd00f83fb614a76969f4 Mon Sep 17 00:00:00 2001 From: TheNexter Date: Tue, 18 Nov 2025 20:06:05 +0100 Subject: [PATCH] Audio player redesign, better looking version --- web/src/components/AudioPlayer.tsx | 59 ++++++++++++++++-------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/web/src/components/AudioPlayer.tsx b/web/src/components/AudioPlayer.tsx index 59590fece..f55fd1324 100644 --- a/web/src/components/AudioPlayer.tsx +++ b/web/src/components/AudioPlayer.tsx @@ -1,5 +1,6 @@ import { PauseIcon, PlayIcon } from "lucide-react"; import { useEffect, useRef, useState } from "react"; +import { Button } from "@/components/ui/button"; interface Props { src: string; @@ -18,12 +19,17 @@ const AudioPlayer = ({ src, className = "" }: Props) => { if (!audio) return; const handleLoadedMetadata = () => { - setDuration(audio.duration); + if (audio.duration && !isNaN(audio.duration) && isFinite(audio.duration)) { + setDuration(audio.duration); + } setIsLoading(false); }; const handleTimeUpdate = () => { setCurrentTime(audio.currentTime); + if (duration === 0 && audio.duration && !isNaN(audio.duration) && isFinite(audio.duration)) { + setDuration(audio.duration); + } }; const handleEnded = () => { @@ -32,9 +38,9 @@ const AudioPlayer = ({ src, className = "" }: Props) => { }; const handleLoadedData = () => { - // For files without proper duration in metadata, + // For files without proper duration in metadata, // try to get it after some data is loaded - if (audio.duration && !isNaN(audio.duration) && audio.duration !== Infinity) { + if (audio.duration && !isNaN(audio.duration) && isFinite(audio.duration)) { setDuration(audio.duration); setIsLoading(false); } @@ -86,34 +92,31 @@ const AudioPlayer = ({ src, className = "" }: Props) => {