# coding: utf8 import os import sys import json from pathlib import Path def path_not_exist(path: str | Path) -> bool: """ 判断目标路径是否存在 如果参数为空或者 None,亦认为不存在 :param path: 目标路径 :return: """ if isinstance(path, str): return len(path) == 0 or not Path(path).exists() elif isinstance(path, Path): return not path.exists() else: return True def get_data_dir() -> str: plat = sys.platform if plat == "win32": data_dir = os.path.expandvars("%appdata%") elif plat == "darwin": data_dir = os.path.expanduser("~/Library/Application Support") else: raise OSError("Unsupported platform") return data_dir def get_app_dir(org_name: str, app_name: str) -> Path: data_dir = get_data_dir() app_dir = Path(data_dir, org_name, app_name) if not app_dir.exists(): app_dir.mkdir(parents=True, exist_ok=True) return app_dir def get_config_path(org_name: str, app_name: str) -> Path: data_dir = get_app_dir(org_name, app_name) return Path(data_dir, "config.json") def read_config(org_name: str, app_name: str) -> dict: config_path = get_config_path(org_name, app_name) if not config_path.exists(): config = { "table_name": "entries", "button_min_width": 120, "last_db_path": "", "loaded_memory": {} } config_path.write_text(json.dumps(config, ensure_ascii=False, indent=4), encoding="utf-8") return config else: return json.loads(config_path.read_text(encoding="utf-8")) def write_config(config: dict, org_name: str, app_name: str): config_path = get_config_path(org_name, app_name) config_path.write_text(json.dumps(config, ensure_ascii=False, indent=4), encoding="utf-8") def get_default_db_path(config: dict, org_name: str, app_name: str) -> str: if path_not_exist(config["last_db_path"]): app_dir = get_app_dir(org_name, app_name) return str(app_dir / f"default.db") return config["last_db_path"]