bugfix: borked station switching w/ prior revision ++ remove iOS tap to allow audio type overlay, not needed
This commit is contained in:
@@ -36,7 +36,6 @@ export function Player() {
|
|||||||
const [coverArt, setCoverArt] = useState("/images/radio_art_default.jpg");
|
const [coverArt, setCoverArt] = useState("/images/radio_art_default.jpg");
|
||||||
const [elapsed, setElapsed] = useState(0);
|
const [elapsed, setElapsed] = useState(0);
|
||||||
const [duration, setDuration] = useState(0);
|
const [duration, setDuration] = useState(0);
|
||||||
const [userHasInteracted, setUserHasInteracted] = useState(false);
|
|
||||||
|
|
||||||
const soundRef = useRef(null);
|
const soundRef = useRef(null);
|
||||||
const uuidRef = useRef(null);
|
const uuidRef = useRef(null);
|
||||||
@@ -84,7 +83,6 @@ export function Player() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const togglePlayback = () => {
|
const togglePlayback = () => {
|
||||||
if (isIOS && !userHasInteracted) return; // block only on iOS until interaction
|
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
soundRef.current?.pause();
|
soundRef.current?.pause();
|
||||||
setIsPlaying(false);
|
setIsPlaying(false);
|
||||||
@@ -98,20 +96,21 @@ const togglePlayback = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (soundRef.current) {
|
||||||
|
soundRef.current.stop();
|
||||||
|
soundRef.current.unload();
|
||||||
|
soundRef.current = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isPlaying) {
|
||||||
|
playStream();
|
||||||
|
}
|
||||||
|
|
||||||
|
}, [activeStation]);
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!userHasInteracted) return;
|
|
||||||
|
|
||||||
if (isPlaying) {
|
|
||||||
playStream();
|
|
||||||
} else {
|
|
||||||
if (soundRef.current) {
|
|
||||||
soundRef.current.stop();
|
|
||||||
soundRef.current.unload();
|
|
||||||
soundRef.current = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, [activeStation]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
clearGlobalMetadataInterval();
|
clearGlobalMetadataInterval();
|
||||||
@@ -170,25 +169,6 @@ const togglePlayback = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* Unlock overlay */}
|
|
||||||
{!userHasInteracted && isIOS && (
|
|
||||||
<div
|
|
||||||
className="fixed inset-0 z-50 bg-black bg-opacity-80 flex items-center justify-center text-white text-xl cursor-pointer"
|
|
||||||
onClick={() => {
|
|
||||||
setUserHasInteracted(true);
|
|
||||||
|
|
||||||
if (Howler.ctx?.state === "suspended") {
|
|
||||||
Howler.ctx.resume();
|
|
||||||
}
|
|
||||||
|
|
||||||
playStream(); // <-- Immediate play within same gesture
|
|
||||||
}}
|
|
||||||
|
|
||||||
>
|
|
||||||
Tap to Start Audio
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<div className="station-tabs flex gap-2 justify-center mb-4 flex-wrap z-10 relative">
|
<div className="station-tabs flex gap-2 justify-center mb-4 flex-wrap z-10 relative">
|
||||||
{Object.entries(STATIONS).map(([key, { label }]) => (
|
{Object.entries(STATIONS).map(([key, { label }]) => (
|
||||||
<button
|
<button
|
||||||
|
Reference in New Issue
Block a user