import { useEffect, useState } from "react"; import { useNavigate } from "react-router"; import { CalcReadableFilesizeDetail } from "./Common"; import FfmpegConfig from "./FfmpegConfig"; import FileDialog from "./FileDialog"; function AudioPlayer(props) { // props.playingFile // props.setPlayingFile const [fileDialogShowStatus, setFileDialogShowStatus] = useState(false); const [loop, setLoop] = useState(true); const [raw, setRaw] = useState(false); const [prepare, setPrepare] = useState(false); const [selectedFfmpegConfig, setSelectedFfmpegConfig] = useState({ name: "", args: "", }); const [playingURL, setPlayingURL] = useState(""); const [isPreparing, setIsPreparing] = useState(false); const [timerCount, setTimerCount] = useState(0); const [timerID, setTimerID] = useState(null); useEffect(() => { // no playing file if (props.playingFile.id === undefined) { setPlayingURL(""); return; } if (raw) { console.log("Play raw file"); setPlayingURL("/api/v1/get_file_direct?id=" + props.playingFile.id); } else { if (prepare) { // prepare file setIsPreparing(true); fetch("/api/v1/prepare_file_stream_direct", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ id: props.playingFile.id, config_name: selectedFfmpegConfig.name, }), }) .then((response) => response.json()) .then((data) => { if (data.error) { alert(data.error); setIsPreparing(false); return; } props.setPlayingFile(data.file); setIsPreparing(false); setPlayingURL( `/api/v1/get_file_stream_direct?id=${props.playingFile.id}&config=${selectedFfmpegConfig.name}` ); }); } else { setPlayingURL( `/api/v1/get_file_stream?id=${props.playingFile.id}&config=${selectedFfmpegConfig.name}` ); } } }, [props.playingFile.id, raw, prepare, selectedFfmpegConfig]); let navigate = useNavigate(); return ( ); } export default AudioPlayer;