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))