diff --git a/poetry.lock b/poetry.lock index 8904b27..6f1919c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -84,7 +84,7 @@ python-versions = ">=3.7" [[package]] name = "vban-cmd" -version = "1.4.2" +version = "1.4.3" description = "Python interface for the VBAN RT Packet Service (Sendtext)" category = "main" optional = false @@ -107,31 +107,16 @@ tomli = {version = ">=2.0.1,<3.0.0", markers = "python_version < \"3.11\""} [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "738f40473a635574dc00427d128af1c3bf45f4290aca9b4d8ae78b6992a486c7" +content-hash = "df755b86361b6c58978bcdc7875d8d8e5f4d554d13b189823347d64994ba1507" [metadata.files] black = [] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] +click = [] +colorama = [] +mypy-extensions = [] pathspec = [] -platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] +platformdirs = [] sv-ttk = [] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] +tomli = [] vban-cmd = [] voicemeeter-api = [] diff --git a/pyproject.toml b/pyproject.toml index 7fe9dc2..57f8ef2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "voicemeeter-compact" -version = "1.5.1" +version = "1.5.2" description = "A Compact Voicemeeter Remote App" authors = ["onyx-and-iris "] license = "MIT" @@ -17,7 +17,7 @@ python = "^3.10" sv-ttk = "^2.0" tomli = { version = "^2.0.1", python = "<3.11" } voicemeeter-api = "^0.7.0" -vban-cmd = "^1.4.2" +vban-cmd = "^1.4.3" [tool.poetry.dev-dependencies] black = {version = "^22.6.0", allow-prereleases = true} diff --git a/vmcompact/menu.py b/vmcompact/menu.py index 203a677..153733f 100644 --- a/vmcompact/menu.py +++ b/vmcompact/menu.py @@ -268,11 +268,11 @@ class Menus(tk.Menu): if isinstance(menu, tk.Menu) ] - def vban_connect(self, i): + def menu_teardown(self, i): # remove config load menus [ self.menu_configs_load.delete(key) - for key in self.vmr.configs.keys() + for key in self.target.configs.keys() if key not in self.config_defaults ] @@ -282,12 +282,35 @@ class Menus(tk.Menu): if j != i ] + def menu_setup(self): + if len(self.target.configs) > len(self.config_defaults) and all( + key in self.target.configs for key in self.config_defaults + ): + [ + self.menu_configs_load.add_command( + label=profile, command=partial(self.load_profile, profile) + ) + for profile in self.target.configs.keys() + if profile not in self.config_defaults + ] + else: + self.menu_configs.entryconfig(0, state="disabled") + + def vban_connect(self, i): opts = {} opts |= self.vban_config[f"connection-{i+1}"] kind_id = opts.pop("kind") self.vban = vban_cmd.api(kind_id, **opts) # login to vban interface - self.vban.login() + try: + self.vban.login() + except TimeoutError as e: + messagebox.showerror( + "Connection Error", f"Unable to establish connection with {opts['ip']}" + ) + self.after(1, self.enable_vban_menus) + return + self.menu_teardown(i) self.vban.event.add("ldirty") # destroy the current App frames self.parent._destroy_top_level_frames() @@ -303,27 +326,10 @@ class Menus(tk.Menu): self.menu_layout.entryconfig( 0, state=f"{'normal' if kind.name == 'potato' else 'disabled'}" ) - # rebuild config load menus - if len(self.target.configs) > len(self.config_defaults) and all( - key in self.target.configs for key in self.config_defaults - ): - [ - self.menu_configs_load.add_command( - label=profile, command=partial(self.load_profile, profile) - ) - for profile in self.target.configs.keys() - if profile not in self.config_defaults - ] - else: - self.menu_configs.entryconfig(0, state="disabled") + self.menu_setup() def vban_disconnect(self, i): - # remove config load menus - [ - self.menu_configs_load.delete(key) - for key in self.vban.configs.keys() - if key not in self.config_defaults - ] + self.menu_teardown(i) # destroy the current App frames self.parent._destroy_top_level_frames() @@ -340,19 +346,7 @@ class Menus(tk.Menu): self.menu_layout.entryconfig( 0, state=f"{'normal' if kind.name == 'potato' else 'disabled'}" ) - # rebuild config load menus - if len(self.target.configs) > len(self.config_defaults) and all( - key in self.target.configs for key in self.config_defaults - ): - [ - self.menu_configs_load.add_command( - label=profile, command=partial(self.load_profile, profile) - ) - for profile in self.target.configs.keys() - if profile not in self.config_defaults - ] - else: - self.menu_configs.entryconfig(0, state="disabled") + self.menu_setup() self.after(15000, self.enable_vban_menus)