import os import sys from typing import Callable from settings import Settings from pathlib import Path from os.path import join, isfile from configparser import ConfigParser class SettingsStore(): def __init__(self): pass @staticmethod def _session_file() -> str: if sys.platform == 'win32' or sys.platform == 'cygwin': return join(Path.home(), "AppData", "Local", "ravenlog", "session.ini") else: return join(Path.home(), ".local", "share", "ravenlog", "session.ini") @staticmethod def load() -> Settings: session = SettingsStore._load_session() return Settings(session) @staticmethod def _load_session() -> ConfigParser: session_file = SettingsStore._session_file() session = ConfigParser() # apply default settings session.add_section('general') session.set('general', 'font_size', '12') session.set('general', 'highlight_search_term', 'True') session.read(session_file) return session @staticmethod def save(settings: Settings): session_file = SettingsStore._session_file() dir = os.path.dirname(session_file) os.makedirs(dir, exist_ok=True) with open(session_file, 'w+') as fp: settings.session.write(fp)