userconfigs now returns target.configs

patch bump
This commit is contained in:
onyx-and-iris 2023-07-08 00:22:07 +01:00
parent e4068277f7
commit 6d46d9a9a5
4 changed files with 61 additions and 81 deletions

View File

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "voicemeeter-compact" name = "voicemeeter-compact"
version = "1.8.3" version = "1.8.4"
description = "A Compact Voicemeeter Remote App" description = "A Compact Voicemeeter Remote App"
authors = ["onyx-and-iris <code@onyxandiris.online>"] authors = ["onyx-and-iris <code@onyxandiris.online>"]
license = "MIT" license = "MIT"

View File

@ -145,7 +145,7 @@ class App(tk.Tk):
@cached_property @cached_property
def userconfigs(self): def userconfigs(self):
self._configs = loader(self.kind.name) self._configs = loader(self.kind.name, self.target)
return self._configs return self._configs

View File

@ -10,28 +10,32 @@ logger = logging.getLogger(__name__)
configuration = {} configuration = {}
configpaths = [
Path.cwd() / "configs",
Path.home() / ".config" / "vm-compact" / "configs",
Path.home() / "Documents" / "Voicemeeter" / "configs",
]
for configpath in configpaths:
if configpath.is_dir():
filepaths = list(configpath.glob("*.toml"))
if any(f.stem in ("app", "vban") for f in filepaths):
configs = {}
for filepath in filepaths:
filename = filepath.with_suffix("").stem
if filename in ("app", "vban"):
try:
with open(filepath, "rb") as f:
configs[filename] = tomllib.load(f)
logger.info(f"configuration: {filename} loaded into memory")
except tomllib.TOMLDecodeError:
logger.error(f"Invalid TOML config: configs/{filename.stem}")
configuration |= configs def get_configpath():
break configpaths = [
Path.cwd() / "configs",
Path.home() / ".config" / "vm-compact" / "configs",
Path.home() / "Documents" / "Voicemeeter" / "configs",
]
for configpath in configpaths:
if configpath.exists():
return configpath
if configpath := get_configpath():
filepaths = list(configpath.glob("*.toml"))
if any(f.stem in ("app", "vban") for f in filepaths):
configs = {}
for filepath in filepaths:
filename = filepath.with_suffix("").stem
if filename in ("app", "vban"):
try:
with open(filepath, "rb") as f:
configs[filename] = tomllib.load(f)
logger.info(f"configuration: {filename} loaded into memory")
except tomllib.TOMLDecodeError:
logger.error(f"Invalid TOML config: configs/{filename.stem}")
configuration |= configs
_defaults = { _defaults = {
"configs": { "configs": {
@ -75,17 +79,20 @@ def get_configuration(key):
return configuration[key] return configuration[key]
def loader(kind_id): def loader(kind_id, target):
configs = {} configs = {"reset": target.configs["reset"]}
userconfigpath = Path.home() / ".config" / "vm-compact" / "configs" / kind_id if configpath := get_configpath():
if userconfigpath.exists(): userconfigpath = configpath / kind_id
filepaths = list(userconfigpath.glob("*.toml")) if userconfigpath.exists():
for filepath in filepaths: filepaths = list(userconfigpath.glob("*.toml"))
identifier = filepath.with_suffix("").stem for filepath in filepaths:
try: identifier = filepath.with_suffix("").stem
with open(filepath, "rb") as f: try:
configs[identifier] = tomllib.load(f) with open(filepath, "rb") as f:
logger.info(f"loader: {identifier} loaded into memory") configs[identifier] = tomllib.load(f)
except tomllib.TOMLDecodeError: logger.info(f"loader: {identifier} loaded into memory")
logger.error(f"Invalid TOML config: configs/{filename.stem}") except tomllib.TOMLDecodeError:
return configs logger.error(f"Invalid TOML config: configs/{filename.stem}")
target.configs = configs
return target.configs

View File

@ -85,24 +85,16 @@ class Menus(tk.Menu):
self.menu_configs_load = tk.Menu(self.menu_configs, tearoff=0) self.menu_configs_load = tk.Menu(self.menu_configs, tearoff=0)
self.menu_configs.add_cascade(menu=self.menu_configs_load, label="Load config") self.menu_configs.add_cascade(menu=self.menu_configs_load, label="Load config")
self.config_defaults = {"reset"} self.config_defaults = {"reset"}
if len(self.target.configs) > len(self.config_defaults) and all( if len(self.parent.userconfigs) > len(self.config_defaults) and all(
key in self.target.configs for key in self.config_defaults key in self.parent.userconfigs for key in self.config_defaults
): ):
[ [
self.menu_configs_load.add_command( self.menu_configs_load.add_command(
label=profile, command=partial(self.load_profile, profile) label=profile, command=partial(self.load_profile, profile)
) )
for profile in self.target.configs.keys() for profile in self.parent.userconfigs.keys()
if profile not in self.config_defaults if profile not in self.config_defaults
] ]
elif self.parent.userconfigs:
[
self.menu_configs_load.add_command(
label=name, command=partial(self.load_custom_profile, data)
)
for name, data in self.parent.userconfigs.items()
if name not in self.config_defaults
]
else: else:
self.menu_configs.entryconfig(0, state="disabled") self.menu_configs.entryconfig(0, state="disabled")
self.menu_configs.add_command( self.menu_configs.add_command(
@ -315,21 +307,13 @@ class Menus(tk.Menu):
def menu_teardown(self, i): def menu_teardown(self, i):
# remove config load menus # remove config load menus
removed = [] if len(self.parent.userconfigs) > len(self.config_defaults):
for key in self.target.configs.keys(): for profile in self.parent.userconfigs:
if key not in self.config_defaults: if profile not in self.config_defaults:
try: try:
self.menu_configs_load.delete(key) self.menu_configs_load.delete(profile)
removed.append(key) except tk._tkinter.tclError as e:
except tk._tkinter.tclError as e: self.logger.warning(f"{type(e).__name__}: {e}")
self.logger.warning(f"{type(e).__name__}: {e}")
for key in self.parent.userconfigs.keys():
if key not in self.config_defaults and key not in removed:
try:
self.menu_configs_load.delete(key)
except tk._tkinter.tclError as e:
self.logger.warning(f"{type(e).__name__}: {e}")
[ [
self.menu_vban.entryconfig(j, state="disabled") self.menu_vban.entryconfig(j, state="disabled")
@ -338,24 +322,13 @@ class Menus(tk.Menu):
] ]
def menu_setup(self): def menu_setup(self):
if len(self.target.configs) > len(self.config_defaults) and all( if len(self.parent.userconfigs) > len(self.config_defaults):
key in self.target.configs for key in self.config_defaults for profile in self.parent.userconfigs:
): if profile not in self.config_defaults:
[ self.menu_configs_load.add_command(
self.menu_configs_load.add_command( label=profile, command=partial(self.load_profile, profile)
label=profile, command=partial(self.load_profile, profile) )
) self.menu_configs.entryconfig(0, state="normal")
for profile in self.target.configs.keys()
if profile not in self.config_defaults
]
elif self.parent.userconfigs:
[
self.menu_configs_load.add_command(
label=name, command=partial(self.load_custom_profile, data)
)
for name, data in self.parent.userconfigs.items()
if name not in self.config_defaults
]
else: else:
self.menu_configs.entryconfig(0, state="disabled") self.menu_configs.entryconfig(0, state="disabled")