Merge branch 'config' into UI_2.0

This commit is contained in:
misyaguziya
2023-09-25 05:40:39 +09:00
2 changed files with 190 additions and 131 deletions

305
config.py
View File

@@ -11,6 +11,13 @@ from models.translation.translation_languages import translatorEngine, translati
from models.transcription.transcription_languages import transcription_lang
from models.transcription.transcription_utils import getInputDevices, getOutputDevices, getDefaultInputDevice, getDefaultOutputDevice
json_serializable_vars = {}
def json_serializable(var_name):
def decorator(func):
json_serializable_vars[var_name] = func
return func
return decorator
def saveJson(path, key, value):
with open(path, "r", encoding="utf-8") as fp:
json_data = load(fp)
@@ -28,6 +35,7 @@ class Config:
cls._instance.load_config()
return cls._instance
# Read Only
@property
def VERSION(self):
return self._VERSION
@@ -36,6 +44,27 @@ class Config:
def PATH_CONFIG(self):
return self._PATH_CONFIG
@property
def GITHUB_URL(self):
return self._GITHUB_URL
@property
def BOOTH_URL(self):
return self._BOOTH_URL
@property
def DOCUMENTS_URL(self):
return self._DOCUMENTS_URL
@property
def MAX_MIC_ENERGY_THRESHOLD(self):
return self._MAX_MIC_ENERGY_THRESHOLD
@property
def MAX_SPEAKER_ENERGY_THRESHOLD(self):
return self._MAX_SPEAKER_ENERGY_THRESHOLD
# Read Write
@property
def ENABLE_TRANSLATION(self):
return self._ENABLE_TRANSLATION
@@ -73,6 +102,88 @@ class Config:
self._ENABLE_FOREGROUND = value
@property
def SOURCE_COUNTRY(self):
return self._SOURCE_COUNTRY
@SOURCE_COUNTRY.setter
def SOURCE_COUNTRY(self, value):
if type(value) is str:
self._SOURCE_COUNTRY = value
@property
def SOURCE_LANGUAGE(self):
return self._SOURCE_LANGUAGE
@SOURCE_LANGUAGE.setter
def SOURCE_LANGUAGE(self, value):
if type(value) is str:
self._SOURCE_LANGUAGE = value
@property
def TARGET_COUNTRY(self):
return self._TARGET_COUNTRY
@TARGET_COUNTRY.setter
def TARGET_COUNTRY(self, value):
if type(value) is str:
self._TARGET_COUNTRY = value
@property
def TARGET_LANGUAGE(self):
return self._TARGET_LANGUAGE
@TARGET_LANGUAGE.setter
def TARGET_LANGUAGE(self, value):
if type(value) is str:
self._TARGET_LANGUAGE = value
@property
def CHOICE_TRANSLATOR(self):
return self._CHOICE_TRANSLATOR
@CHOICE_TRANSLATOR.setter
def CHOICE_TRANSLATOR(self, value):
if value in translatorEngine:
self._CHOICE_TRANSLATOR = value
# Save Json Data
## Main Window
@property
@json_serializable('SELECTED_TAB_NO')
def SELECTED_TAB_NO(self):
return self._SELECTED_TAB_NO
@SELECTED_TAB_NO.setter
def SELECTED_TAB_NO(self, value):
if type(value) is str:
self._SELECTED_TAB_NO = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('SELECTED_TAB_YOUR_LANGUAGES')
def SELECTED_TAB_YOUR_LANGUAGES(self):
return self._SELECTED_TAB_YOUR_LANGUAGES
@SELECTED_TAB_YOUR_LANGUAGES.setter
def SELECTED_TAB_YOUR_LANGUAGES(self, value):
if type(value) is dict:
self._SELECTED_TAB_YOUR_LANGUAGES = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('SELECTED_TAB_TARGET_LANGUAGES')
def SELECTED_TAB_TARGET_LANGUAGES(self):
return self._SELECTED_TAB_TARGET_LANGUAGES
@SELECTED_TAB_TARGET_LANGUAGES.setter
def SELECTED_TAB_TARGET_LANGUAGES(self, value):
if type(value) is dict:
self._SELECTED_TAB_TARGET_LANGUAGES = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
## Config Window
@property
@json_serializable('TRANSPARENCY')
def TRANSPARENCY(self):
return self._TRANSPARENCY
@@ -83,6 +194,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('APPEARANCE_THEME')
def APPEARANCE_THEME(self):
return self._APPEARANCE_THEME
@@ -93,6 +205,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('UI_SCALING')
def UI_SCALING(self):
return self._UI_SCALING
@@ -103,6 +216,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('FONT_FAMILY')
def FONT_FAMILY(self):
return self._FONT_FAMILY
@@ -116,6 +230,7 @@ class Config:
root.destroy()
@property
@json_serializable('UI_LANGUAGE')
def UI_LANGUAGE(self):
return self._UI_LANGUAGE
@@ -126,56 +241,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
def CHOICE_TRANSLATOR(self):
return self._CHOICE_TRANSLATOR
@CHOICE_TRANSLATOR.setter
def CHOICE_TRANSLATOR(self, value):
if value in translatorEngine:
self._CHOICE_TRANSLATOR = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
def SOURCE_LANGUAGE(self):
return self._SOURCE_LANGUAGE
@SOURCE_LANGUAGE.setter
def SOURCE_LANGUAGE(self, value):
if type(value) is str:
self._SOURCE_LANGUAGE = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
def SOURCE_COUNTRY(self):
return self._SOURCE_COUNTRY
@SOURCE_COUNTRY.setter
def SOURCE_COUNTRY(self, value):
if type(value) is str:
self._SOURCE_COUNTRY = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
def TARGET_LANGUAGE(self):
return self._TARGET_LANGUAGE
@TARGET_LANGUAGE.setter
def TARGET_LANGUAGE(self, value):
if type(value) is str:
self._TARGET_LANGUAGE = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
def TARGET_COUNTRY(self):
return self._TARGET_COUNTRY
@TARGET_COUNTRY.setter
def TARGET_COUNTRY(self, value):
if type(value) is str:
self._TARGET_COUNTRY = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('CHOICE_MIC_HOST')
def CHOICE_MIC_HOST(self):
return self._CHOICE_MIC_HOST
@@ -186,6 +252,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('CHOICE_MIC_DEVICE')
def CHOICE_MIC_DEVICE(self):
return self._CHOICE_MIC_DEVICE
@@ -196,6 +263,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_MIC_ENERGY_THRESHOLD')
def INPUT_MIC_ENERGY_THRESHOLD(self):
return self._INPUT_MIC_ENERGY_THRESHOLD
@@ -206,6 +274,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_MIC_DYNAMIC_ENERGY_THRESHOLD')
def INPUT_MIC_DYNAMIC_ENERGY_THRESHOLD(self):
return self._INPUT_MIC_DYNAMIC_ENERGY_THRESHOLD
@@ -216,6 +285,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_MIC_RECORD_TIMEOUT')
def INPUT_MIC_RECORD_TIMEOUT(self):
return self._INPUT_MIC_RECORD_TIMEOUT
@@ -226,6 +296,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_MIC_PHRASE_TIMEOUT')
def INPUT_MIC_PHRASE_TIMEOUT(self):
return self._INPUT_MIC_PHRASE_TIMEOUT
@@ -236,6 +307,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_MIC_MAX_PHRASES')
def INPUT_MIC_MAX_PHRASES(self):
return self._INPUT_MIC_MAX_PHRASES
@@ -246,6 +318,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_MIC_WORD_FILTER')
def INPUT_MIC_WORD_FILTER(self):
return self._INPUT_MIC_WORD_FILTER
@@ -256,6 +329,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('CHOICE_SPEAKER_DEVICE')
def CHOICE_SPEAKER_DEVICE(self):
return self._CHOICE_SPEAKER_DEVICE
@@ -268,6 +342,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_SPEAKER_ENERGY_THRESHOLD')
def INPUT_SPEAKER_ENERGY_THRESHOLD(self):
return self._INPUT_SPEAKER_ENERGY_THRESHOLD
@@ -278,6 +353,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_SPEAKER_DYNAMIC_ENERGY_THRESHOLD')
def INPUT_SPEAKER_DYNAMIC_ENERGY_THRESHOLD(self):
return self._INPUT_SPEAKER_DYNAMIC_ENERGY_THRESHOLD
@@ -288,6 +364,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_SPEAKER_RECORD_TIMEOUT')
def INPUT_SPEAKER_RECORD_TIMEOUT(self):
return self._INPUT_SPEAKER_RECORD_TIMEOUT
@@ -298,6 +375,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_SPEAKER_PHRASE_TIMEOUT')
def INPUT_SPEAKER_PHRASE_TIMEOUT(self):
return self._INPUT_SPEAKER_PHRASE_TIMEOUT
@@ -308,6 +386,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('INPUT_SPEAKER_MAX_PHRASES')
def INPUT_SPEAKER_MAX_PHRASES(self):
return self._INPUT_SPEAKER_MAX_PHRASES
@@ -318,6 +397,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('OSC_IP_ADDRESS')
def OSC_IP_ADDRESS(self):
return self._OSC_IP_ADDRESS
@@ -328,6 +408,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('OSC_PORT')
def OSC_PORT(self):
return self._OSC_PORT
@@ -338,6 +419,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('AUTH_KEYS')
def AUTH_KEYS(self):
return self._AUTH_KEYS
@@ -350,6 +432,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, self.AUTH_KEYS)
@property
@json_serializable('MESSAGE_FORMAT')
def MESSAGE_FORMAT(self):
return self._MESSAGE_FORMAT
@@ -360,6 +443,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('ENABLE_AUTO_CLEAR_MESSAGE_BOX')
def ENABLE_AUTO_CLEAR_MESSAGE_BOX(self):
return self._ENABLE_AUTO_CLEAR_MESSAGE_BOX
@@ -370,6 +454,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('ENABLE_NOTICE_XSOVERLAY')
def ENABLE_NOTICE_XSOVERLAY(self):
return self._ENABLE_NOTICE_XSOVERLAY
@@ -380,6 +465,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('ENABLE_SEND_MESSAGE_TO_VRC')
def ENABLE_SEND_MESSAGE_TO_VRC(self):
return self._ENABLE_SEND_MESSAGE_TO_VRC
@@ -390,6 +476,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('STARTUP_OSC_ENABLED_CHECK')
def STARTUP_OSC_ENABLED_CHECK(self):
return self._STARTUP_OSC_ENABLED_CHECK
@@ -400,52 +487,7 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
def GITHUB_URL(self):
return self._GITHUB_URL
# @property
# def BREAK_KEYSYM_LIST(self):
# return self._BREAK_KEYSYM_LIST
@property
def MAX_MIC_ENERGY_THRESHOLD(self):
return self._MAX_MIC_ENERGY_THRESHOLD
@property
def MAX_SPEAKER_ENERGY_THRESHOLD(self):
return self._MAX_SPEAKER_ENERGY_THRESHOLD
@property
def SELECTED_TAB_NO(self):
return self._SELECTED_TAB_NO
@SELECTED_TAB_NO.setter
def SELECTED_TAB_NO(self, value):
if type(value) is str:
self._SELECTED_TAB_NO = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
def SELECTED_TAB_YOUR_LANGUAGES(self):
return self._SELECTED_TAB_YOUR_LANGUAGES
@SELECTED_TAB_YOUR_LANGUAGES.setter
def SELECTED_TAB_YOUR_LANGUAGES(self, value):
if type(value) is dict:
self._SELECTED_TAB_YOUR_LANGUAGES = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
def SELECTED_TAB_TARGET_LANGUAGES(self):
return self._SELECTED_TAB_TARGET_LANGUAGES
@SELECTED_TAB_TARGET_LANGUAGES.setter
def SELECTED_TAB_TARGET_LANGUAGES(self, value):
if type(value) is dict:
self._SELECTED_TAB_TARGET_LANGUAGES = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('ENABLE_LOGGER')
def ENABLE_LOGGER(self):
return self._ENABLE_LOGGER
@@ -455,8 +497,8 @@ class Config:
self._ENABLE_LOGGER = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
# Config Window
@property
@json_serializable('IS_CONFIG_WINDOW_COMPACT_MODE')
def IS_CONFIG_WINDOW_COMPACT_MODE(self):
return self._IS_CONFIG_WINDOW_COMPACT_MODE
@@ -467,33 +509,58 @@ class Config:
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
def init_config(self):
self._VERSION = "1.3.2"
# Read Only
self._VERSION = "2.0.0"
self._PATH_CONFIG = os_path.join(os_path.dirname(sys.argv[0]), "config.json")
self._GITHUB_URL = "https://api.github.com/repos/misyaguziya/VRCT/releases/latest"
self._BOOTH_URL = "https://misyaguziya.booth.pm/"
self._DOCUMENTS_URL = "https://mzsoftware.notion.site/VRCT-Documents-be79b7a165f64442ad8f326d86c22246"
self._MAX_MIC_ENERGY_THRESHOLD = 2000
self._MAX_SPEAKER_ENERGY_THRESHOLD = 4000
# Read Write
self._ENABLE_TRANSLATION = False
self._ENABLE_TRANSCRIPTION_SEND = False
self._ENABLE_TRANSCRIPTION_RECEIVE = False
self._ENABLE_FOREGROUND = False
self._TRANSPARENCY = 100
self._APPEARANCE_THEME = "System"
self._UI_SCALING = "100%"
self._FONT_FAMILY = "Yu Gothic UI"
self._UI_LANGUAGE = "en"
# Save Json Data
self._CHOICE_TRANSLATOR = translatorEngine[0]
self._SOURCE_LANGUAGE = "Japanese"
self._SOURCE_COUNTRY = "Japan"
self._TARGET_LANGUAGE = "English"
self._TARGET_COUNTRY = "United States"
## Main Window
self._SELECTED_TAB_NO = "1"
self._SELECTED_TAB_YOUR_LANGUAGES = {
"1":"Japanese\n(Japan)",
"2":"Japanese\n(Japan)",
"3":"Japanese\n(Japan)",
}
self._SELECTED_TAB_TARGET_LANGUAGES = {
"1":"English\n(United States)",
"2":"English\n(United States)",
"3":"English\n(United States)",
}
## Config Window
self._TRANSPARENCY = 100
self._APPEARANCE_THEME = "System"
self._UI_SCALING = "100%"
self._FONT_FAMILY = "Yu Gothic UI"
self._UI_LANGUAGE = "en"
self._CHOICE_MIC_HOST = getDefaultInputDevice()["host"]["name"]
self._CHOICE_MIC_DEVICE = getDefaultInputDevice()["device"]["name"]
self._INPUT_MIC_ENERGY_THRESHOLD = 300
self._INPUT_MIC_DYNAMIC_ENERGY_THRESHOLD = True
self._INPUT_MIC_DYNAMIC_ENERGY_THRESHOLD = False
self._INPUT_MIC_RECORD_TIMEOUT = 3
self._INPUT_MIC_PHRASE_TIMEOUT = 3
self._INPUT_MIC_MAX_PHRASES = 10
self._INPUT_MIC_WORD_FILTER = []
self._CHOICE_SPEAKER_DEVICE = getDefaultOutputDevice()["name"]
self._INPUT_SPEAKER_ENERGY_THRESHOLD = 300
self._INPUT_SPEAKER_DYNAMIC_ENERGY_THRESHOLD = True
self._INPUT_SPEAKER_DYNAMIC_ENERGY_THRESHOLD = False
self._INPUT_SPEAKER_RECORD_TIMEOUT = 3
self._INPUT_SPEAKER_PHRASE_TIMEOUT = 3
self._INPUT_SPEAKER_MAX_PHRASES = 10
@@ -510,27 +577,7 @@ class Config:
self._ENABLE_NOTICE_XSOVERLAY = False
self._ENABLE_SEND_MESSAGE_TO_VRC = True
self._STARTUP_OSC_ENABLED_CHECK = True
self._GITHUB_URL = "https://api.github.com/repos/misyaguziya/VRCT/releases/latest"
# self._BREAK_KEYSYM_LIST = [
# "Delete", "Select", "Up", "Down", "Next", "End", "Print",
# "Prior","Insert","Home", "Left", "Clear", "Right", "Linefeed"
# ]
self._MAX_MIC_ENERGY_THRESHOLD = 2000
self._MAX_SPEAKER_ENERGY_THRESHOLD = 4000
self._SELECTED_TAB_NO = "1"
self._SELECTED_TAB_YOUR_LANGUAGES = {
"1":"Japanese\n(Japan)",
"2":"Japanese\n(Japan)",
"3":"Japanese\n(Japan)",
}
self._SELECTED_TAB_TARGET_LANGUAGES = {
"1":"English\n(United States)",
"2":"English\n(United States)",
"3":"English\n(United States)",
}
self._ENABLE_LOGGER = False
# Config Window
self._IS_CONFIG_WINDOW_COMPACT_MODE = False
def load_config(self):
@@ -542,13 +589,9 @@ class Config:
setattr(self, key, config[key])
with open(self.PATH_CONFIG, 'w', encoding="utf-8") as fp:
setter_methods = [
name for name, obj in vars(type(self)).items()
if isinstance(obj, property) and obj.fset is not None
]
config = {}
for method in setter_methods:
config[method] = getattr(self, method)
for var_name, var_func in json_serializable_vars.items():
config[var_name] = var_func(self)
json_dump(config, fp, indent=4, ensure_ascii=False)
config = Config()

16
main.py
View File

@@ -181,6 +181,20 @@ def messageBoxPressKeyAny(e):
model.oscStartSendTyping()
# func select languages
def initSetLanguageAndCountry():
select = config.SELECTED_TAB_YOUR_LANGUAGES[config.SELECTED_TAB_NO]
language, country = model.getLanguageAndCountry(select)
config.SOURCE_LANGUAGE = language
config.SOURCE_COUNTRY = country
select = config.SELECTED_TAB_TARGET_LANGUAGES[config.SELECTED_TAB_NO]
language, country = model.getLanguageAndCountry(select)
config.TARGET_LANGUAGE = language
config.TARGET_COUNTRY = country
config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE)
model.authenticationTranslator(callbackSetAuthKeys)
def setYourLanguageAndCountry(select):
languages = config.SELECTED_TAB_YOUR_LANGUAGES
languages[config.SELECTED_TAB_NO] = select
@@ -566,6 +580,8 @@ def callbackSetOscPort(value):
view.createGUI()
# init config
initSetLanguageAndCountry()
if model.authenticationTranslator(callbackSetAuthKeys) is False:
# error update Auth key
view.printToTextbox_AuthenticationError()