voicemeeter-compact/vmcompact/configurations.py

92 lines
2.5 KiB
Python
Raw Permalink Normal View History

import logging
2022-04-11 18:35:28 +01:00
from pathlib import Path
try:
import tomllib
except ModuleNotFoundError:
import tomli as tomllib
2023-06-26 13:53:38 +01:00
logger = logging.getLogger(__name__)
2022-04-11 18:35:28 +01:00
configuration = {}
2023-06-26 13:53:38 +01:00
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")
2023-06-26 13:53:38 +01:00
except tomllib.TOMLDecodeError:
logger.error(f"Invalid TOML config: configs/{filename.stem}")
configuration |= configs
break
_defaults = {
"configs": {
"config": None,
},
"theme": {
"enabled": True,
"mode": "light",
},
"extends": {
"extended": True,
"extends_horizontal": True,
},
"channel": {
"width": 80,
"height": 130,
"xpadding": 3,
},
"mwscroll_step": {
"size": 3,
},
"submixes": {
"default": 0,
},
"navigation": {"show": True},
}
if "app" in configuration:
for key in _defaults:
if key in configuration["app"]:
configuration["app"][key] = _defaults[key] | configuration["app"][key]
else:
configuration["app"][key] = _defaults[key]
else:
configuration["app"] = _defaults
def get_configuration(key):
if key in configuration:
return configuration[key]
def loader(kind_id):
configs = {}
userconfigpath = Path.home() / ".config" / "vm-compact" / "configs" / kind_id
if userconfigpath.exists():
filepaths = list(userconfigpath.glob("*.toml"))
for filepath in filepaths:
identifier = filepath.with_suffix("").stem
try:
with open(filepath, "rb") as f:
configs[identifier] = tomllib.load(f)
logger.info(f"loader: {identifier} loaded into memory")
except tomllib.TOMLDecodeError:
logger.error(f"Invalid TOML config: configs/{filename.stem}")
return configs