added DME, fixed sync and bugs. Rewrote setDisplay logic
This commit is contained in:
@@ -1,66 +1,53 @@
|
||||
"use client";
|
||||
import { usePilotConnectionStore } from "_store/pilot/connectionStore";
|
||||
import { useMrtStore } from "_store/pilot/MrtStore";
|
||||
import { editConnectedAircraftAPI } from "querys/aircrafts";
|
||||
import { useEffect, useRef } from "react";
|
||||
|
||||
const MRTstatusSound = new Audio("/sounds/MRT-status.mp3");
|
||||
const MrtMessageReceivedSound = new Audio("/sounds/MRT-message-received.mp3");
|
||||
|
||||
export const useSounds = () => {
|
||||
const mrtState = useMrtStore((state) => state);
|
||||
const { connectedAircraft, selectedStation } = usePilotConnectionStore(
|
||||
(state) => state,
|
||||
);
|
||||
|
||||
const fmsStatus = connectedAircraft?.fmsStatus || "NaN";
|
||||
|
||||
const previousFmsStatus = useRef(fmsStatus || "6");
|
||||
const timeout = useRef<NodeJS.Timeout>(null);
|
||||
const setPage = useMrtStore((state) => state.setPage);
|
||||
const MRTstatusSoundRef = useRef<HTMLAudioElement>(null);
|
||||
const MrtMessageReceivedSoundRef = useRef<HTMLAudioElement>(null);
|
||||
|
||||
useEffect(() => {
|
||||
const handleSoundEnd = () => {
|
||||
mrtState.setPage("home");
|
||||
};
|
||||
if (typeof window !== "undefined") {
|
||||
MRTstatusSoundRef.current = new Audio("/sounds/MRT-status.mp3");
|
||||
MrtMessageReceivedSoundRef.current = new Audio(
|
||||
"/sounds/MRT-message-received.mp3",
|
||||
);
|
||||
MRTstatusSoundRef.current.onended = () => {
|
||||
if (!selectedStation || !connectedAircraft?.fmsStatus) return;
|
||||
setPage({
|
||||
page: "home",
|
||||
station: selectedStation,
|
||||
fmsStatus: connectedAircraft?.fmsStatus,
|
||||
});
|
||||
};
|
||||
MrtMessageReceivedSoundRef.current.onended = () => {
|
||||
if (!selectedStation || !connectedAircraft?.fmsStatus) return;
|
||||
setPage({
|
||||
page: "home",
|
||||
station: selectedStation,
|
||||
fmsStatus: connectedAircraft?.fmsStatus,
|
||||
});
|
||||
};
|
||||
}
|
||||
}, [connectedAircraft?.fmsStatus, selectedStation, setPage]);
|
||||
|
||||
const playSound = (sound: HTMLAudioElement) => {
|
||||
sound.play();
|
||||
sound.addEventListener("ended", handleSoundEnd);
|
||||
};
|
||||
const fmsStatus = connectedAircraft?.fmsStatus || "NaN";
|
||||
|
||||
useEffect(() => {
|
||||
if (!connectedAircraft) return;
|
||||
if (mrtState.page === "new-status") {
|
||||
if (fmsStatus === "J") {
|
||||
playSound(MrtMessageReceivedSound);
|
||||
|
||||
timeout.current = setTimeout(() => {
|
||||
editConnectedAircraftAPI(connectedAircraft.id, {
|
||||
fmsStatus: previousFmsStatus.current,
|
||||
});
|
||||
}, 5000);
|
||||
} else if (previousFmsStatus.current !== fmsStatus) {
|
||||
playSound(MRTstatusSound);
|
||||
if (fmsStatus === "J" || fmsStatus === "c") {
|
||||
MrtMessageReceivedSoundRef.current?.play();
|
||||
} else {
|
||||
handleSoundEnd();
|
||||
}
|
||||
if (!timeout.current) {
|
||||
previousFmsStatus.current = fmsStatus || "6";
|
||||
MRTstatusSoundRef.current?.play();
|
||||
}
|
||||
}
|
||||
return () => {
|
||||
if (timeout.current) clearTimeout(timeout.current);
|
||||
[MRTstatusSound, MrtMessageReceivedSound].forEach((sound) => {
|
||||
sound.removeEventListener("ended", handleSoundEnd);
|
||||
sound.pause();
|
||||
sound.currentTime = 0;
|
||||
});
|
||||
};
|
||||
}, [
|
||||
mrtState,
|
||||
fmsStatus,
|
||||
connectedAircraft,
|
||||
selectedStation,
|
||||
previousFmsStatus,
|
||||
timeout,
|
||||
]);
|
||||
}, [mrtState, fmsStatus, connectedAircraft, selectedStation]);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user