mirror of
https://github.com/onyx-and-iris/voicemeeter-compact.git
synced 2025-01-18 20:20:47 +00:00
99 lines
2.7 KiB
Python
99 lines
2.7 KiB
Python
import logging
|
|
from pathlib import Path
|
|
|
|
try:
|
|
import tomllib
|
|
except ModuleNotFoundError:
|
|
import tomli as tomllib
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
configuration = {}
|
|
|
|
|
|
def get_configpath():
|
|
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 = {
|
|
'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, target):
|
|
configs = {'reset': target.configs['reset']}
|
|
if configpath := get_configpath():
|
|
userconfigpath = configpath / 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}')
|
|
|
|
target.configs = configs
|
|
return target.configs
|