[Update/Refactor] UI: Add websocket error handlings.

Refactor. Change the error handling switch method from message to endpoint primarily.
This commit is contained in:
Sakamoto Shiina
2025-05-26 12:06:36 +09:00
parent de4f22f704
commit ed27a8c7ba
3 changed files with 129 additions and 125 deletions

View File

@@ -16,6 +16,7 @@ import {
useDeepLAuthKey, useDeepLAuthKey,
useOscIpAddress, useOscIpAddress,
useWebsocket,
} from "@logics_configs"; } from "@logics_configs";
import { ui_configs } from "../ui_configs"; import { ui_configs } from "../ui_configs";
@@ -31,106 +32,144 @@ export const _useBackendErrorHandling = () => {
const { updateSpeakerPhraseTimeout } = useSpeakerPhraseTimeout(); const { updateSpeakerPhraseTimeout } = useSpeakerPhraseTimeout();
const { updateSpeakerMaxWords } = useSpeakerMaxWords(); const { updateSpeakerMaxWords } = useSpeakerMaxWords();
const { updateDeepLAuthKey, saveErrorDeepLAuthKey } = useDeepLAuthKey(); const { updateDeepLAuthKey } = useDeepLAuthKey();
const { updateOscIpAddress } = useOscIpAddress(); const { updateOscIpAddress } = useOscIpAddress();
const { updateEnableWebsocket, updateWebsocketHost, updateWebsocketPort } = useWebsocket();
const errorHandling_Backend = ({message, data, endpoint, _result}) => { const errorHandling_Backend = ({message, data, endpoint, result}) => {
switch (message) { switch (endpoint) {
case "No mic device detected": case "/run/error_device":
showNotification_Error(t("common_error.no_device_mic")); if (message === "No mic device detected") showNotification_Error(t("common_error.no_device_mic"));
break; if (message === "No speaker device detected") showNotification_Error(t("common_error.no_device_speaker"));
case "No speaker device detected": return;
showNotification_Error(t("common_error.no_device_speaker"));
break;
case "Mic energy threshold value is out of range": case "/set/data/mic_threshold":
if (message === "Mic energy threshold value is out of range") {
showNotification_Error(t("common_error.threshold_invalid_value", showNotification_Error(t("common_error.threshold_invalid_value",
{ min: ui_configs.mic_threshold_min, max: ui_configs.mic_threshold_max }, { min: ui_configs.mic_threshold_min, max: ui_configs.mic_threshold_max },
)); ));
break; };
case "Speaker energy threshold value is out of range": return;
case "/set/data/speaker_threshold":
if (message === "Speaker energy threshold value is out of range") {
showNotification_Error(t("common_error.threshold_invalid_value", showNotification_Error(t("common_error.threshold_invalid_value",
{ min: ui_configs.speaker_threshold_min, max: ui_configs.speaker_threshold_max }, { min: ui_configs.speaker_threshold_min, max: ui_configs.speaker_threshold_max },
)); ));
break; }
return;
case "CTranslate2 weight download error": case "/run/error_ctranslate2_weight":
showNotification_Error(t("common_error.failed_download_weight_ctranslate2")); if (message === "CTranslate2 weight download error") showNotification_Error(t("common_error.failed_download_weight_ctranslate2"));
break; return;
case "Whisper weight download error": case "/run/error_whisper_weight":
showNotification_Error(t("common_error.failed_download_weight_whisper")); if (message === "Whisper weight download error") showNotification_Error(t("common_error.failed_download_weight_whisper"));
break; return;
case "Translation engine limit error": case "/run/error_translation_engine":
showNotification_Error(t("common_error.translation_limit")); if (message === "Translation engine limit error") showNotification_Error(t("common_error.translation_limit"));
break; return;
case "DeepL auth key length is not correct": case "/set/data/deepl_auth_key":
if (message === "DeepL auth key length is not correct") {
updateDeepLAuthKey(data); updateDeepLAuthKey(data);
showNotification_Error(t("common_error.deepl_auth_key_invalid_length")); showNotification_Error(t("common_error.deepl_auth_key_invalid_length"));
break; } else if (message === "Authentication failure of deepL auth key") {
case "Authentication failure of deepL auth key":
updateDeepLAuthKey(data); updateDeepLAuthKey(data);
showNotification_Error(t("common_error.deepl_auth_key_failed_authentication")); showNotification_Error(t("common_error.deepl_auth_key_failed_authentication"));
break; } else { // Exception
updateDeepLAuthKey(data);
showNotification_Error(message);
}
return;
case "Mic record timeout value is out of range": case "/set/data/mic_record_timeout":
if (message === "Mic record timeout value is out of range") {
updateMicRecordTimeout(data); updateMicRecordTimeout(data);
showNotification_Error( showNotification_Error(t("common_error.invalid_value_mic_record_timeout", {
t("common_error.invalid_value_mic_record_timeout", mic_phrase_timeout_label: t("config_page.transcription.mic_phrase_timeout.label")
{ mic_phrase_timeout_label: t("config_page.transcription.mic_phrase_timeout.label") } }));
)); }
break; return;
case "Mic phrase timeout value is out of range": case "/set/data/mic_phrase_timeout":
if (message === "Mic phrase timeout value is out of range") {
updateMicPhraseTimeout(data); updateMicPhraseTimeout(data);
showNotification_Error( showNotification_Error(t("common_error.invalid_value_mic_phrase_timeout", {
t("common_error.invalid_value_mic_phrase_timeout", mic_record_timeout_label: t("config_page.transcription.mic_record_timeout.label")
{ mic_record_timeout_label: t("config_page.transcription.mic_record_timeout.label") } }));
)); }
break; return;
case "Mic max phrases value is out of range": case "/set/data/mic_max_phrases":
if (message === "Mic max phrases value is out of range") {
updateMicMaxWords(data); updateMicMaxWords(data);
showNotification_Error(t("common_error.invalid_value_mic_max_phrase")); showNotification_Error(t("common_error.invalid_value_mic_max_phrase"));
break; }
return;
case "Speaker record timeout value is out of range": case "/set/data/speaker_record_timeout":
if (message === "Speaker record timeout value is out of range") {
updateSpeakerRecordTimeout(data); updateSpeakerRecordTimeout(data);
showNotification_Error( showNotification_Error(t("common_error.invalid_value_speaker_record_timeout", {
t("common_error.invalid_value_speaker_record_timeout", speaker_phrase_timeout_label: t("config_page.transcription.speaker_phrase_timeout.label")
{ speaker_phrase_timeout_label: t("config_page.transcription.speaker_phrase_timeout.label") } }));
)); }
break; return;
case "Speaker phrase timeout value is out of range": case "/set/data/speaker_phrase_timeout":
if (message === "Speaker phrase timeout value is out of range") {
updateSpeakerPhraseTimeout(data); updateSpeakerPhraseTimeout(data);
showNotification_Error( showNotification_Error(t("common_error.invalid_value_speaker_phrase_timeout", {
t("common_error.invalid_value_speaker_phrase_timeout", speaker_record_timeout_label: t("config_page.transcription.speaker_record_timeout.label")
{ speaker_record_timeout_label: t("config_page.transcription.speaker_record_timeout.label") } }));
)); }
break; return;
case "Speaker max phrases value is out of range": case "/set/data/speaker_max_phrases":
if (message === "Speaker max phrases value is out of range") {
updateSpeakerMaxWords(data); updateSpeakerMaxWords(data);
showNotification_Error(t("common_error.invalid_value_speaker_max_phrase")); showNotification_Error(t("common_error.invalid_value_speaker_max_phrase"));
break; }
return;
// Advanced Settings, error messages are set by Backend (EN only) // Advanced Settings, error messages are set by Backend (EN only)
case "Invalid IP address": case "/set/data/osc_ip_address":
if (message === "Invalid IP address") {
updateOscIpAddress(data); updateOscIpAddress(data);
showNotification_Error(message); showNotification_Error(message);
break; } else if (message === "Cannot set IP address") {
updateOscIpAddress(data);
showNotification_Error(message);
} // else? (Backend will send the message "Cannot set IP address" when throw Exception)
return;
case "Cannot set IP address":
updateOscIpAddress(data); case "/set/enable/websocket_server":
if (message === "WebSocket server host or port is not available") {
updateEnableWebsocket(data);
showNotification_Error(message); showNotification_Error(message);
break; }
return;
case "/set/data/websocket_host":
if (message === "Invalid IP address") {
updateWebsocketHost(data);
showNotification_Error(message);
} else if (message === "WebSocket server host is not available") {
updateWebsocketHost(data);
showNotification_Error(message);
}
return;
case "/set/data/websocket_port":
if (message === "WebSocket server port is not available") {
updateWebsocketPort(data);
showNotification_Error(message);
}
return;
default: default:
// determine by endpoint, not message. console.error(`Invalid endpoint or message: ${endpoint}\nmessage: ${message}\nresult: ${JSON.stringify(result)}`);
if (endpoint === "/set/data/deepl_auth_key") saveErrorDeepLAuthKey({message, data, endpoint, _result}); return;
break;
} }
} }

View File

@@ -29,11 +29,6 @@ export const useDeepLAuthKey = () => {
showNotification_Success(t("config_page.translation.deepl_auth_key.auth_key_success")); showNotification_Success(t("config_page.translation.deepl_auth_key.auth_key_success"));
}; };
const saveErrorDeepLAuthKey = ({data, message}) => {
updateDeepLAuthKey(data);
showNotification_Error(message);
};
return { return {
currentDeepLAuthKey, currentDeepLAuthKey,
getDeepLAuthKey, getDeepLAuthKey,
@@ -41,7 +36,6 @@ export const useDeepLAuthKey = () => {
setDeepLAuthKey, setDeepLAuthKey,
deleteDeepLAuthKey, deleteDeepLAuthKey,
saveErrorDeepLAuthKey,
savedDeepLAuthKey, savedDeepLAuthKey,
}; };
}; };

View File

@@ -530,30 +530,6 @@ export const useReceiveRoutes = () => {
"/get/data/transcription_engines": ()=>{}, // Not implemented on UI yet. (if ai_models has not been detected, this will be blank array[]. if the ai_models are ok but just network has not connected, it'l be only ["Whisper"]) "/get/data/transcription_engines": ()=>{}, // Not implemented on UI yet. (if ai_models has not been detected, this will be blank array[]. if the ai_models are ok but just network has not connected, it'l be only ["Whisper"])
}; };
const error_status_routes = {
"/run/error_device": errorHandling_Backend,
"/run/error_ctranslate2_weight": errorHandling_Backend,
"/run/error_whisper_weight": errorHandling_Backend,
"/set/data/deepl_auth_key": errorHandling_Backend,
"/run/error_translation_engine": errorHandling_Backend,
"/set/data/mic_threshold": errorHandling_Backend,
"/set/data/mic_record_timeout": errorHandling_Backend,
"/set/data/mic_phrase_timeout": errorHandling_Backend,
"/set/data/mic_max_phrases": errorHandling_Backend,
"/set/data/speaker_threshold": errorHandling_Backend,
"/set/data/speaker_record_timeout": errorHandling_Backend,
"/set/data/speaker_phrase_timeout": errorHandling_Backend,
"/set/data/speaker_max_phrases": errorHandling_Backend,
"/set/data/osc_ip_address": errorHandling_Backend,
};
const receiveRoutes = (parsed_data) => { const receiveRoutes = (parsed_data) => {
const initDataSyncProcess = (payload) => { const initDataSyncProcess = (payload) => {
for (const [endpoint, value] of Object.entries(payload)) { for (const [endpoint, value] of Object.entries(payload)) {
@@ -583,17 +559,12 @@ export const useReceiveRoutes = () => {
break; break;
case 400: case 400:
const error_route = error_status_routes[parsed_data.endpoint]; errorHandling_Backend({
if (error_route) {
error_route({
message: parsed_data.result.message, message: parsed_data.result.message,
data: parsed_data.result.data, data: parsed_data.result.data,
endpoint: parsed_data.endpoint, endpoint: parsed_data.endpoint,
_result: parsed_data.result, result: parsed_data.result,
}); });
} else {
handleInvalidEndpoint(parsed_data);
}
break; break;
case 500: case 500:
showNotification_Error( showNotification_Error(