import { useEffect, useState } from "react"; import { useNavigate } from "react-router"; import { CalcReadableFilesizeDetail } from "./Common"; import FfmpegConfig from "./FfmpegConfig"; import FileDialog from "./FileDialog"; import { Tr } from "../translate"; 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); // init mediaSession API useEffect(() => { navigator.mediaSession.setActionHandler("stop", () => { props.setPlayingFile({}); }); }, []); useEffect(() => { // media session related staff navigator.mediaSession.metadata = new window.MediaMetadata({ title: props.playingFile.filename, album: props.playingFile.foldername, artwork: [{ src: "/favicon.png", type: "image/png" }], }); // 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, raw, prepare, selectedFfmpegConfig]); let navigate = useNavigate(); return ( ); } export default AudioPlayer;