We need config and session data. config is what the user changes. Only read by the app. session is what the app remembers. Read and written by the app.
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
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 _config_file() -> str:
|
|
return join(Path.home(), ".ravenlog", "settings.ini")
|
|
|
|
@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:
|
|
|
|
config = SettingsStore._load_config()
|
|
session = SettingsStore._load_session()
|
|
return Settings(config, session)
|
|
|
|
@staticmethod
|
|
def _load_config() -> ConfigParser:
|
|
config_file = SettingsStore._config_file()
|
|
config = ConfigParser()
|
|
config.read(config_file)
|
|
return config
|
|
|
|
@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.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)
|