97 lines
2.9 KiB
TypeScript
97 lines
2.9 KiB
TypeScript
import { invoke } from "@tauri-apps/api/core";
|
|
|
|
const startAudioBtn = document.querySelector<HTMLButtonElement>("#start-audio-btn");
|
|
const stopAudioBtn = document.querySelector<HTMLButtonElement>("#stop-audio-btn");
|
|
const audioStatus = document.querySelector<HTMLElement>("#audio-status");
|
|
|
|
const startVideoBtn = document.querySelector<HTMLButtonElement>("#start-video-btn");
|
|
const stopVideoBtn = document.querySelector<HTMLButtonElement>("#stop-video-btn");
|
|
const videoStatus = document.querySelector<HTMLElement>("#video-status");
|
|
|
|
if (
|
|
startAudioBtn === null ||
|
|
stopAudioBtn === null ||
|
|
audioStatus === null ||
|
|
startVideoBtn === null ||
|
|
stopVideoBtn === null ||
|
|
videoStatus === null
|
|
) {
|
|
throw new Error("missing UI elements");
|
|
}
|
|
|
|
function setAudioStatus(message: string): void {
|
|
if (audioStatus)
|
|
audioStatus.textContent = message;
|
|
}
|
|
|
|
function setAudioButtons(isRecording: boolean): void {
|
|
if (startAudioBtn)
|
|
startAudioBtn.disabled = isRecording;
|
|
if (stopAudioBtn)
|
|
stopAudioBtn.disabled = !isRecording;
|
|
}
|
|
|
|
function setVideoStatus(message: string): void {
|
|
|
|
if (videoStatus)
|
|
videoStatus.textContent = message;
|
|
}
|
|
|
|
function setVideoButtons(isRecording: boolean): void {
|
|
if (startVideoBtn)
|
|
startVideoBtn.disabled = isRecording;
|
|
if (stopVideoBtn)
|
|
stopVideoBtn.disabled = !isRecording;
|
|
}
|
|
|
|
startAudioBtn.addEventListener("click", async () => {
|
|
startAudioBtn.disabled = true;
|
|
|
|
try {
|
|
const path = await invoke<string>("start_audio_recording");
|
|
setAudioStatus(`Audio recording started.\nOutput: ${path}`);
|
|
setAudioButtons(true);
|
|
} catch (error) {
|
|
setAudioStatus(`Start audio failed.\n${String(error)}`);
|
|
setAudioButtons(false);
|
|
}
|
|
});
|
|
|
|
stopAudioBtn.addEventListener("click", async () => {
|
|
stopAudioBtn.disabled = true;
|
|
|
|
try {
|
|
const path = await invoke<string>("stop_audio_recording");
|
|
setAudioStatus(`Audio recording stopped.\nSaved file: ${path}`);
|
|
setAudioButtons(false);
|
|
} catch (error) {
|
|
setAudioStatus(`Stop audio failed.\n${String(error)}`);
|
|
setAudioButtons(true);
|
|
}
|
|
});
|
|
|
|
startVideoBtn.addEventListener("click", async () => {
|
|
startVideoBtn.disabled = true;
|
|
|
|
try {
|
|
const path = await invoke<string>("start_video_recording");
|
|
setVideoStatus(`Video recording started.\nOutput: ${path}`);
|
|
setVideoButtons(true);
|
|
} catch (error) {
|
|
setVideoStatus(`Start video failed.\n${String(error)}`);
|
|
setVideoButtons(false);
|
|
}
|
|
});
|
|
|
|
stopVideoBtn.addEventListener("click", async () => {
|
|
stopVideoBtn.disabled = true;
|
|
|
|
try {
|
|
const path = await invoke<string>("stop_video_recording");
|
|
setVideoStatus(`Video recording stopped.\nSaved file: ${path}`);
|
|
setVideoButtons(false);
|
|
} catch (error) {
|
|
setVideoStatus(`Stop video failed.\n${String(error)}`);
|
|
setVideoButtons(true);
|
|
}
|
|
}); |