funkwlmpv/src/settings.py

105 lines
3.1 KiB
Python

import json
import os
from os.path import exists
from loguru import logger
from pyfzf.pyfzf import FzfPrompt
fzf = FzfPrompt()
conf_file = 'config.json'
default_conf = {
'instance': 'fw.ponychord.rocks',
'public_list_instances_extended':
{
"open.audio": None,
"audio.liberta.vip": None,
"dance.with.tewi.and.reisen": None,
"tanukitunes.com": None,
"funkwhale.juniorjpdj.pl": None,
"audio.securetown.in.ua": None,
"funkwhale.thurk.org": None,
"buzzworkers.com": None,
"soundship.de": None,
"funkwhale.kameha.click": None,
"music.chosto.me": None,
"zik.goe.land": None,
"music.humanoids.be": None,
"music.hempton.us": None,
"mizik.o-k-i.net": None,
"klh.radiolivre.org": None,
"hudba.feildel.fr": None,
"funk.deko.cloud": None,
"audio.graz.social": None,
"funkwhale.desmu.fr": None,
"listen.knsm.cc": None,
"funkwhale.gegeweb.eu": None,
},
'automatic_fetch_new_instances': False,
'enable_server_transcoding': False,
'external_transcoder_http_proxy_path': "",
'share_to_fediverse_token': "",
'share_to_fediverse_instance': "",
'prefetch_playlist': True,
'enable_persistent_cache': False,
'mpv_volume': 100,
'show_like_button': True,
'show_artist_name_in_albums': False,
'termux_handle_track_switch_by_volume': False
}
def set_defaults(corrected_config=None):
conf_rewrite = default_conf
if corrected_config:
conf_rewrite = corrected_config
descriptor = os.open(
path=conf_file,
flags=(
os.O_WRONLY # access mode: write only
| os.O_CREAT # create if not exists
| os.O_TRUNC # truncate the file to zero
),
mode=0o600)
with open(descriptor, 'wt') as f:
f.write(json.dumps(conf_rewrite, indent=4))
def check_config():
'''Check config and remove or add keys if not found in default config'''
with open(conf_file, 'rt') as f:
loaded_config = json.loads(f.read())
correct_conf = {}
for k, v in loaded_config.items():
if k in default_conf.keys():
correct_conf[k] = v
else:
logger.warning(f'{k} from config will be removed. Value: {v}')
for k, v in default_conf.items():
if k not in correct_conf.keys():
correct_conf[k] = v
logger.warning(f'{k} added in config. Value: {v}')
set_defaults(correct_conf)
return correct_conf
if not exists(conf_file):
set_defaults()
else:
check_config()
def get_config(key):
'''return value from config by key'''
with open(conf_file, 'rt') as f:
loaded_config = json.loads(f.read())
return loaded_config.get(key)
def set_config(key, value):
'''set value new value config by key'''
read_conf = check_config()
with open(conf_file, 'wt') as f:
read_conf[key] = value
f.write(json.dumps(read_conf, indent=4))