Files
VRCT/src-python/webui_mainloop.py

588 lines
31 KiB
Python

import sys
import json
import time
from typing import Any
from threading import Thread
from queue import Queue
from webui_controller import Controller
from utils import printLog, printResponse, encodeBase64
controller = Controller()
run_mapping = {
"download_software":"/run/download_software",
"update_software":"/run/update_software",
"transcription_mic":"/run/transcription_send_mic_message",
"transcription_speaker":"/run/transcription_receive_speaker_message",
"check_mic_volume":"/run/check_mic_volume",
"check_speaker_volume":"/run/check_speaker_volume",
"error_device":"/run/error_device",
"error_translation_engine":"/run/error_translation_engine",
"word_filter":"/run/word_filter",
"download_ctranslate2":"/run/download_ctranslate2_weight",
"download_whisper":"/run/download_whisper_weight",
"selected_mic_device":"/run/selected_mic_device",
"selected_speaker_device":"/run/selected_speaker_device",
"selected_translation_engine":"/run/selected_translation_engine",
"translation_engines":"/run/translation_engines",
"mic_host_list":"/run/mic_host_list",
"mic_device_list":"/run/mic_device_list",
"speaker_device_list":"/run/speaker_device_list",
}
controller.setRunMapping(run_mapping)
def run(status:int, endpoint:str, result:Any) -> None:
printResponse(status, endpoint, result)
controller.setRun(run)
mapping = {
# Main Window
"/set/enable/translation": {"status": False, "variable":controller.setEnableTranslation},
"/set/disable/translation": {"status": False, "variable":controller.setDisableTranslation},
"/set/enable/transcription_send": {"status": False, "variable":controller.setEnableTranscriptionSend},
"/set/disable/transcription_send": {"status": False, "variable":controller.setDisableTranscriptionSend},
"/set/enable/transcription_receive": {"status": False, "variable":controller.setEnableTranscriptionReceive},
"/set/disable/transcription_receive": {"status": False, "variable":controller.setDisableTranscriptionReceive},
"/set/enable/foreground": {"status": True, "variable":controller.setEnableForeground},
"/set/disable/foreground": {"status": True, "variable":controller.setDisableForeground},
"/set/enable/config_window": {"status": True, "variable":controller.setEnableConfigWindow},
"/set/disable/config_window": {"status": True, "variable":controller.setDisableConfigWindow},
"/get/data/selected_tab_no": {"status": True, "variable":controller.getSelectedTabNo},
"/set/data/selected_tab_no": {"status": True, "variable":controller.setSelectedTabNo},
"/get/data/main_window_sidebar_compact_mode": {"status": True, "variable":controller.getMainWindowSidebarCompactMode},
"/set/enable/main_window_sidebar_compact_mode": {"status": True, "variable":controller.setEnableMainWindowSidebarCompactMode},
"/set/disable/main_window_sidebar_compact_mode": {"status": True, "variable":controller.setDisableMainWindowSidebarCompactMode},
"/get/data/translation_engines": {"status": True, "variable":controller.getTranslationEngines},
"/get/data/selectable_language_list": {"status": True, "variable":controller.getListLanguageAndCountry},
"/get/data/selected_translation_engines": {"status": False, "variable":controller.getSelectedTranslationEngines},
"/set/data/selected_translator_engines": {"status": True, "variable":controller.setSelectedTranslatorEngines},
"/get/data/selected_your_languages": {"status": True, "variable":controller.getSelectedYourLanguages},
"/set/data/selected_your_languages": {"status": True, "variable":controller.setSelectedYourLanguages},
"/get/data/selected_target_languages": {"status": True, "variable":controller.getSelectedTargetLanguages},
"/set/data/selected_target_languages": {"status": True, "variable":controller.setSelectedTargetLanguages},
"/get/data/selected_transcription_engine": {"status": False, "variable":controller.getSelectedTranscriptionEngine},
"/run/send_message_box": {"status": False, "variable":controller.sendMessageBox},
"/run/typing_message_box": {"status": False, "variable":controller.typingMessageBox},
"/run/stop_typing_message_box": {"status": False, "variable":controller.stopTypingMessageBox},
"/run/swap_your_language_and_target_language": {"status": True, "variable":controller.swapYourLanguageAndTargetLanguage},
# Config Window
# Appearance
"/get/data/version": {"status": True, "variable":controller.getVersion},
"/get/data/transparency_range": {"status": True, "variable":controller.getTransparencyRange},
"/get/data/transparency": {"status": True, "variable":controller.getTransparency},
"/set/data/transparency": {"status": True, "variable":controller.setTransparency},
"/get/data/appearance_theme_list": {"status": True, "variable":controller.getAppearanceThemesList},
"/get/data/appearance_theme": {"status": True, "variable":controller.getAppearanceTheme},
"/set/data/appearance_theme": {"status": True, "variable":controller.setAppearanceTheme},
"/get/data/ui_scaling_list": {"status": True, "variable":controller.getUiScalingList},
"/get/data/ui_scaling": {"status": True, "variable":controller.getUiScaling},
"/set/data/ui_scaling": {"status": True, "variable":controller.setUiScaling},
"/get/data/textbox_ui_scaling_range": {"status": True, "variable":controller.getTextboxUiScalingRange},
"/get/data/textbox_ui_scaling": {"status": True, "variable":controller.getTextboxUiScaling},
"/set/data/textbox_ui_scaling": {"status": True, "variable":controller.setTextboxUiScaling},
"/get/data/message_box_ratio_range": {"status": True, "variable":controller.getMessageBoxRatioRange},
"/get/data/message_box_ratio": {"status": True, "variable":controller.getMessageBoxRatio},
"/set/data/message_box_ratio": {"status": True, "variable":controller.setMessageBoxRatio},
"/get/data/font_family": {"status": True, "variable":controller.getFontFamily},
"/set/data/font_family": {"status": True, "variable":controller.setFontFamily},
"/get/data/ui_language": {"status": True, "variable":controller.getUiLanguage},
"/set/data/ui_language": {"status": True, "variable":controller.setUiLanguage},
"/get/data/restore_main_window_geometry": {"status": True, "variable":controller.getRestoreMainWindowGeometry},
"/set/enable/restore_main_window_geometry": {"status": True, "variable":controller.setEnableRestoreMainWindowGeometry},
"/set/disable/restore_main_window_geometry": {"status": True, "variable":controller.setDisableRestoreMainWindowGeometry},
"/get/data/main_window_geometry": {"status": True, "variable":controller.getMainWindowGeometry},
"/set/data/main_window_geometry": {"status": True, "variable":controller.setMainWindowGeometry},
# Translation
"/get/data/use_translation_feature": {"status": True, "variable":controller.getUseTranslationFeature},
"/set/enable/use_translation_feature": {"status": True, "variable":controller.setEnableUseTranslationFeature},
"/set/disable/use_translation_feature": {"status": True, "variable":controller.setDisableUseTranslationFeature},
"/get/data/selectable_ctranslate2_weight_type_dict": {"status": True, "variable":controller.getSelectableCtranslate2WeightTypeDict},
"/get/data/ctranslate2_weight_type": {"status": True, "variable":controller.getCtranslate2WeightType},
"/set/data/ctranslate2_weight_type": {"status": True, "variable":controller.setCtranslate2WeightType},
"/run/download_ctranslate2_weight": {"status": True, "variable":controller.downloadCtranslate2Weight},
"/get/data/deepl_auth_key": {"status": False, "variable":controller.getDeepLAuthKey},
"/set/data/deepl_auth_key": {"status": False, "variable":controller.setDeeplAuthKey},
"/delete/data/deepl_auth_key": {"status": False, "variable":controller.delDeeplAuthKey},
"/get/data/multi_language_translation": {"status": True, "variable":controller.getMultiLanguageTranslation},
"/set/enable/multi_language_translation": {"status": True, "variable":controller.setEnableMultiLanguageTranslation},
"/set/disable/multi_language_translation": {"status": True, "variable":controller.setDisableMultiLanguageTranslation},
"/get/data/convert_message_to_romaji": {"status": True, "variable":controller.getConvertMessageToRomaji},
"/set/enable/convert_message_to_romaji": {"status": True, "variable":controller.setEnableConvertMessageToRomaji},
"/set/disable/convert_message_to_romaji": {"status": True, "variable":controller.setDisableConvertMessageToRomaji},
"/get/data/convert_message_to_hiragana": {"status": True, "variable":controller.getConvertMessageToHiragana},
"/set/enable/convert_message_to_hiragana": {"status": True, "variable":controller.setEnableConvertMessageToHiragana},
"/set/disable/convert_message_to_hiragana": {"status": True, "variable":controller.setDisableConvertMessageToHiragana},
# Transcription
"/get/data/mic_host_list": {"status": True, "variable":controller.getMicHostList},
"/get/data/mic_device_list": {"status": True, "variable":controller.getMicDeviceList},
"/get/data/speaker_device_list": {"status": True, "variable":controller.getSpeakerDeviceList},
"/get/data/max_mic_threshold": {"status": True, "variable":controller.getMaxMicThreshold},
"/get/data/max_speaker_threshold": {"status": True, "variable":controller.getMaxSpeakerThreshold},
"/get/data/auto_mic_select": {"status": True, "variable":controller.getAutoMicSelect},
"/set/enable/auto_mic_select": {"status": True, "variable":controller.setEnableAutoMicSelect},
"/set/disable/auto_mic_select": {"status": True, "variable":controller.setDisableAutoMicSelect},
"/get/data/selected_mic_host": {"status": True, "variable":controller.getSelectedMicHost},
"/set/data/selected_mic_host": {"status": True, "variable":controller.setSelectedMicHost},
"/get/data/selected_mic_device": {"status": True, "variable":controller.getSelectedMicDevice},
"/set/data/selected_mic_device": {"status": True, "variable":controller.setSelectedMicDevice},
"/get/data/mic_threshold": {"status": True, "variable":controller.getMicThreshold},
"/set/data/mic_threshold": {"status": True, "variable":controller.setMicThreshold},
"/get/data/mic_automatic_threshold": {"status": True, "variable":controller.getMicAutomaticThreshold},
"/set/enable/mic_automatic_threshold": {"status": True, "variable":controller.setEnableMicAutomaticThreshold},
"/set/disable/mic_automatic_threshold": {"status": True, "variable":controller.setDisableMicAutomaticThreshold},
"/get/data/mic_record_timeout": {"status": True, "variable":controller.getMicRecordTimeout},
"/set/data/mic_record_timeout": {"status": True, "variable":controller.setMicRecordTimeout},
"/get/data/mic_phrase_timeout": {"status": True, "variable":controller.getMicPhraseTimeout},
"/set/data/mic_phrase_timeout": {"status": True, "variable":controller.setMicPhraseTimeout},
"/get/data/mic_max_phrases": {"status": True, "variable":controller.getMicMaxPhrases},
"/set/data/mic_max_phrases": {"status": True, "variable":controller.setMicMaxPhrases},
"/get/data/mic_avg_logprob": {"status": True, "variable":controller.getMicAvgLogprob},
"/set/data/mic_avg_logprob": {"status": True, "variable":controller.setMicAvgLogprob},
"/get/data/mic_no_speech_prob": {"status": True, "variable":controller.getMicNoSpeechProb},
"/set/data/mic_no_speech_prob": {"status": True, "variable":controller.setMicNoSpeechProb},
"/set/enable/check_mic_threshold": {"status": True, "variable":controller.setEnableCheckMicThreshold},
"/set/disable/check_mic_threshold": {"status": True, "variable":controller.setDisableCheckMicThreshold},
"/get/data/mic_word_filter": {"status": True, "variable":controller.getMicWordFilter},
"/set/data/mic_word_filter": {"status": True, "variable":controller.setMicWordFilter},
"/delete/data/mic_word_filter": {"status": True, "variable":controller.delMicWordFilter},
"/get/data/auto_speaker_select": {"status": True, "variable":controller.getAutoSpeakerSelect},
"/set/enable/auto_speaker_select": {"status": True, "variable":controller.setEnableAutoSpeakerSelect},
"/set/disable/auto_speaker_select": {"status": True, "variable":controller.setDisableAutoSpeakerSelect},
"/get/data/selected_speaker_device": {"status": True, "variable":controller.getSelectedSpeakerDevice},
"/set/data/selected_speaker_device": {"status": True, "variable":controller.setSelectedSpeakerDevice},
"/get/data/speaker_threshold": {"status": True, "variable":controller.getSpeakerThreshold},
"/set/data/speaker_threshold": {"status": True, "variable":controller.setSpeakerThreshold},
"/get/data/speaker_automatic_threshold": {"status": True, "variable":controller.getSpeakerAutomaticThreshold},
"/set/enable/speaker_automatic_threshold": {"status": True, "variable":controller.setEnableSpeakerAutomaticThreshold},
"/set/disable/speaker_automatic_threshold": {"status": True, "variable":controller.setDisableSpeakerAutomaticThreshold},
"/get/data/speaker_record_timeout": {"status": True, "variable":controller.getSpeakerRecordTimeout},
"/set/data/speaker_record_timeout": {"status": True, "variable":controller.setSpeakerRecordTimeout},
"/get/data/speaker_phrase_timeout": {"status": True, "variable":controller.getSpeakerPhraseTimeout},
"/set/data/speaker_phrase_timeout": {"status": True, "variable":controller.setSpeakerPhraseTimeout},
"/get/data/speaker_max_phrases": {"status": True, "variable":controller.getSpeakerMaxPhrases},
"/set/data/speaker_max_phrases": {"status": True, "variable":controller.setSpeakerMaxPhrases},
"/get/data/speaker_avg_logprob": {"status": True, "variable":controller.getSpeakerAvgLogprob},
"/set/data/speaker_avg_logprob": {"status": True, "variable":controller.setSpeakerAvgLogprob},
"/get/data/speaker_no_speech_prob": {"status": True, "variable":controller.getSpeakerNoSpeechProb},
"/set/data/speaker_no_speech_prob": {"status": True, "variable":controller.setSpeakerNoSpeechProb},
"/set/enable/check_speaker_threshold": {"status": True, "variable":controller.setEnableCheckSpeakerThreshold},
"/set/disable/check_speaker_threshold": {"status": True, "variable":controller.setDisableCheckSpeakerThreshold},
"/get/data/selectable_whisper_weight_type_dict": {"status": True, "variable":controller.getSelectableWhisperModelTypeDict},
"/get/data/whisper_weight_type": {"status": True, "variable":controller.getWhisperWeightType},
"/set/data/whisper_weight_type": {"status": True, "variable":controller.setWhisperWeightType},
"/get/data/use_whisper_feature": {"status": True, "variable":controller.getUseWhisperFeature},
"/set/enable/use_whisper_feature": {"status": True, "variable":controller.setEnableUseWhisperFeature},
"/set/disable/use_whisper_feature": {"status": True, "variable":controller.setDisableUseWhisperFeature},
"/run/download_whisper_weight": {"status": True, "variable":controller.downloadWhisperWeight},
# VR
"/get/data/overlay_settings": {"status": True, "variable":controller.getOverlaySettings},
"/set/data/overlay_settings": {"status": True, "variable":controller.setOverlaySettings},
"/get/data/overlay_small_log_settings": {"status": True, "variable":controller.getOverlaySmallLogSettings},
"/set/data/overlay_small_log_settings": {"status": True, "variable":controller.setOverlaySmallLogSettings},
"/get/data/overlay_small_log": {"status": True, "variable":controller.getOverlaySmallLog},
"/set/enable/overlay_small_log": {"status": True, "variable":controller.setEnableOverlaySmallLog},
"/set/disable/overlay_small_log": {"status": True, "variable":controller.setDisableOverlaySmallLog},
# Others
"/get/data/auto_clear_message_box": {"status": True, "variable":controller.getAutoClearMessageBox},
"/set/enable/auto_clear_message_box": {"status": True, "variable":controller.setEnableAutoClearMessageBox},
"/set/disable/auto_clear_message_box": {"status": True, "variable":controller.setDisableAutoClearMessageBox},
"/get/data/send_only_translated_messages": {"status": True, "variable":controller.getSendOnlyTranslatedMessages},
"/set/enable/send_only_translated_messages": {"status": True, "variable":controller.setEnableSendOnlyTranslatedMessages},
"/set/disable/send_only_translated_messages": {"status": True, "variable":controller.setDisableSendOnlyTranslatedMessages},
"/get/data/send_message_button_type": {"status": True, "variable":controller.getSendMessageButtonType},
"/set/data/send_message_button_type": {"status": True, "variable":controller.setSendMessageButtonType},
"/get/data/logger_feature": {"status": True, "variable":controller.getLoggerFeature},
"/set/enable/logger_feature": {"status": True, "variable":controller.setEnableLoggerFeature},
"/set/disable/logger_feature": {"status": True, "variable":controller.setDisableLoggerFeature},
"/run/open_filepath_logs": {"status": True, "variable":controller.openFilepathLogs},
"/get/data/vrc_mic_mute_sync": {"status": True, "variable":controller.getVrcMicMuteSync},
"/set/enable/vrc_mic_mute_sync": {"status": True, "variable":controller.setEnableVrcMicMuteSync},
"/set/disable/vrc_mic_mute_sync": {"status": True, "variable":controller.setDisableVrcMicMuteSync},
"/get/data/send_message_to_vrc": {"status": True, "variable":controller.getSendMessageToVrc},
"/set/enable/send_message_to_vrc": {"status": True, "variable":controller.setEnableSendMessageToVrc},
"/set/disable/send_message_to_vrc": {"status": True, "variable":controller.setDisableSendMessageToVrc},
"/get/data/send_message_format": {"status": True, "variable":controller.getSendMessageFormat},
"/set/data/send_message_format": {"status": True, "variable":controller.setSendMessageFormat},
"/get/data/send_message_format_with_t": {"status": True, "variable":controller.getSendMessageFormatWithT},
"/set/data/send_message_format_with_t": {"status": True, "variable":controller.setSendMessageFormatWithT},
"/get/data/received_message_format": {"status": True, "variable":controller.getReceivedMessageFormat},
"/set/data/received_message_format": {"status": True, "variable":controller.setReceivedMessageFormat},
"/get/data/received_message_format_with_t": {"status": True, "variable":controller.getReceivedMessageFormatWithT},
"/set/data/received_message_format_with_t": {"status": True, "variable":controller.setReceivedMessageFormatWithT},
"/get/data/speaker2chatbox_pass": {"status": True, "variable":controller.getSpeaker2ChatboxPass},
"/set/data/speaker2chatbox_pass": {"status": True, "variable":controller.setSpeaker2ChatboxPass},
"/get/data/send_received_message_to_vrc": {"status": True, "variable":controller.getSendReceivedMessageToVrc},
"/set/enable/send_received_message_to_vrc": {"status": True, "variable":controller.setEnableSendReceivedMessageToVrc},
"/set/disable/send_received_message_to_vrc": {"status": True, "variable":controller.setDisableSendReceivedMessageToVrc},
# Advanced Settings
"/get/data/osc_ip_address": {"status": True, "variable":controller.getOscIpAddress},
"/set/data/osc_ip_address": {"status": True, "variable":controller.setOscIpAddress},
"/get/data/osc_port": {"status": True, "variable":controller.getOscPort},
"/set/data/osc_port": {"status": True, "variable":controller.setOscPort},
"/run/open_filepath_config_file": {"status": True, "variable":controller.openFilepathConfigFile},
# "/run/update_software": {"status": True, "variable":controller.updateSoftware},
# "/run/restart_software": {"status": True, "variable":controller.restartSoftware},
# "/run/start_watchdog": {"status": True, "variable":controller.startWatchdog},
"/run/feed_watchdog": {"status": True, "variable":controller.feedWatchdog},
# "/run/stop_watchdog": {"status": True, "variable":controller.stopWatchdog},
}
class Main:
def __init__(self) -> None:
self.queue = Queue()
self.main_loop = True
def receiver(self) -> None:
while True:
received_data = sys.stdin.readline().strip()
received_data = json.loads(received_data)
if received_data:
endpoint = received_data.get("endpoint", None)
data = received_data.get("data", None)
data = encodeBase64(data) if data is not None else None
printLog(endpoint, {"receive_data":data})
self.queue.put((endpoint, data))
def startReceiver(self) -> None:
th_receiver = Thread(target=self.receiver)
th_receiver.daemon = True
th_receiver.start()
def handleRequest(self, endpoint, data=None) -> tuple:
handler = mapping.get(endpoint)
if handler is None:
response = "Invalid endpoint"
status = 404
elif handler["status"] is False:
response = "Locked endpoint"
status = 423
else:
try:
response = handler["variable"](data)
status = response.get("status", None)
result = response.get("result", None)
except Exception as e:
result = str(e)
status = 500
return result, status
def handler(self) -> None:
while True:
if not self.queue.empty():
try:
endpoint, data = self.queue.get()
result, status = self.handleRequest(endpoint, data)
except Exception as e:
import traceback
with open('error.log', 'a') as f:
traceback.print_exc(file=f)
result = str(e)
status = 500
if status == 423:
self.queue.put((endpoint, data))
else:
printLog(endpoint, {"send_data":result})
printResponse(status, endpoint, result)
time.sleep(0.1)
def startHandler(self) -> None:
th_handler = Thread(target=self.handler)
th_handler.daemon = True
th_handler.start()
def start(self) -> None:
while self.main_loop:
time.sleep(1)
def stop(self) -> None:
self.main_loop = False
if __name__ == "__main__":
main = Main()
main.startReceiver()
main.startHandler()
controller.setWatchdogCallback(main.stop)
controller.init()
# mappingのすべてのstatusをTrueにする
for key in mapping.keys():
mapping[key]["status"] = True
process = "main"
match process:
case "main":
main.start()
case "test":
for _ in range(100):
time.sleep(0.5)
endpoint = "/get/data/mic_host_list"
result, status = main.handleRequest(endpoint)
printResponse(status, endpoint, result)
case "test_all":
import time
for endpoint, value in mapping.items():
printLog("endpoint", endpoint)
match endpoint:
case "/run/send_message_box":
# handleRequest("/set/enable/translation")
# handleRequest("/set/enable/convert_message_to_romaji")
data = {"id":"123456", "message":"テスト"}
case "/set/data/selected_translator_engines":
data = {
"1":"CTranslate2",
"2":"CTranslate2",
"3":"CTranslate2",
}
case "/set/data/selected_your_languages":
data = {
"1":{
"primary":{
"language": "English",
"country": "Hong Kong"
},
},
"2":{
"primary":{
"language":"Japanese",
"country":"Japan"
},
},
"3":{
"primary":{
"language":"Japanese",
"country":"Japan"
},
},
}
case "/set/data/selected_target_languages":
data ={
"1":{
"primary": {
"language": "Japanese",
"country": "Japan"
},
"secondary": {
"language": "English",
"country": "United States"
},
"tertiary": {
"language": "Chinese Simplified",
"country": "China"
}
},
"2":{
"primary":{
"language":"English",
"country":"United States",
},
"secondary":{
"language":"English",
"country":"United States"
},
"tertiary":{
"language":"English",
"country":"United States"
},
},
"3":{
"primary":{
"language":"English",
"country":"United States",
},
"secondary":{
"language":"English",
"country":"United States"
},
"tertiary":{
"language":"English",
"country":"United States"
},
},
}
case "/set/data/transparency":
data = 0.5
case "/set/appearance":
data = "Dark"
case "/set/data/ui_scaling":
data = 1.5
case "/set/data/appearance_theme":
data = "Dark"
case "/set/data/textbox_ui_scaling":
data = 1.5
case "/set/data/message_box_ratio":
data = 0.5
case "/set/data/font_family":
data = "Yu Gothic UI"
case "/set/data/ui_language":
data = "ja"
case "/set/data/ctranslate2_weight_type":
data = "Small"
case "/set/data/deepl_auth_key":
data = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:fx"
case "/set/data/selected_mic_host":
data = "MME"
case "/set/data/selected_mic_device":
data = "マイク (Realtek High Definition Audio)"
case "/set/data/mic_threshold":
data = 0.5
case "/set/data/mic_record_timeout":
data = 1
case "/set/data/mic_phrase_timeout":
data = 5
case "/set/data/mic_max_phrases":
data = 5
case "/set//data/mic_word_filter":
data = "test0, test1, test2"
case "/delete/data/mic_word_filter":
data = "test1"
case "/set/data/selected_speaker_device":
data = "スピーカー (Realtek High Definition Audio)"
case "/set/data/speaker_threshold":
data = 0.5
case "/set/data/speaker_record_timeout":
data = 5
case "/set/data/speaker_phrase_timeout":
data = 5
case "/set/data/speaker_max_phrases":
data = 5
case "/set/data/whisper_weight_type":
data = "base"
case "/set/data/overlay_settings":
data = {
"opacity": 0.5,
"ui_scaling": 1.5,
}
case "/set/data/overlay_small_log_settings":
data = {
"x_pos": 0,
"y_pos": 0,
"z_pos": 0,
"x_rotation": 0,
"y_rotation": 0,
"z_rotation": 0,
"display_duration": 5,
"fadeout_duration": 0.5,
}
case "/set/data/send_message_button_type":
data = "show"
case "/set/data/send_message_format":
data = "[message]"
case "/set/data/send_message_format_with_t":
data = "[message]([translation])"
case "/set/data/received_message_format":
data = "[message]"
case "/set/data/received_message_format_with_t":
data = "[message]([translation])"
case "/set/data/osc_ip_address":
data = "127.0.0.1"
case "/set/data/osc_port":
data = 8000
case "/set/data/speaker_no_speech_prob":
data = 0.5
case "/set/data/speaker_avg_logprob":
data = 0.5
case "/set/data/mic_no_speech_prob":
data = 0.5
case "/set/data/mic_avg_logprob":
data = 0.5
case _:
data = None
result, status = main.handleRequest(endpoint, data)
printResponse(status, endpoint, result)
time.sleep(0.5)