diff --git a/src/pilgrim/application.py b/src/pilgrim/application.py index e7b5419..7ab3acf 100644 --- a/src/pilgrim/application.py +++ b/src/pilgrim/application.py @@ -1,20 +1,20 @@ from pilgrim.database import Database from pilgrim.service.servicemanager import ServiceManager from pilgrim.ui.ui import UIApp -from pilgrim.utils import DirectoryManager, ConfigManager +from pilgrim.utils import ConfigManager class Application: def __init__(self): - self.config_dir = DirectoryManager.get_config_directory() - self.database = Database() self.config_manager = ConfigManager() + self.database = Database(self.config_manager) session = self.database.session() session_manager = ServiceManager() session_manager.set_session(session) self.ui = UIApp(session_manager,self.config_manager) def run(self): + self.config_manager.read_config() self.database.create() self.ui.run() diff --git a/src/pilgrim/database.py b/src/pilgrim/database.py index 5f8bd97..fd144a0 100644 --- a/src/pilgrim/database.py +++ b/src/pilgrim/database.py @@ -5,16 +5,17 @@ from pathlib import Path import os import shutil +from pilgrim.utils import ConfigManager Base = declarative_base() class Database: - def __init__(self,): - db_path = "./" + def __init__(self,config_manager:ConfigManager): + db_path = config_manager.database_url self.engine = create_engine( - f"sqlite:///{db_path}", + f"sqlite:///{config_manager.database_url}", echo=False, connect_args={"check_same_thread": False}, ) diff --git a/src/pilgrim/utils/config_manager.py b/src/pilgrim/utils/config_manager.py index 05b821f..66d643c 100644 --- a/src/pilgrim/utils/config_manager.py +++ b/src/pilgrim/utils/config_manager.py @@ -1,8 +1,13 @@ +import os.path +from os import PathLike from threading import Lock import tomli +import tomli_w + from pilgrim.utils import DirectoryManager + class SingletonMeta(type): _instances = {} _lock: Lock = Lock() @@ -14,22 +19,78 @@ class SingletonMeta(type): cls._instances[cls] = instance return cls._instances[cls] + class ConfigManager(metaclass=SingletonMeta): def __init__(self): self.database_url = None self.database_type = None self.auto_open_diary = None self.auto_open_new_diary = None - @staticmethod - def read_config(): + self.config_dir = DirectoryManager.get_config_directory() + self.__data = None + + def read_config(self): + if os.path.exists(f"{DirectoryManager.get_config_directory()}/config.toml"): + try: + with open(f"{DirectoryManager.get_config_directory()}/config.toml", "rb") as f: + data = tomli.load(f) + print(data) + except FileNotFoundError: + print("Error: config.toml not found.") + except tomli.TOMLDecodeError as e: + print(f"Error decoding TOML: {e}") + + self.__data = data + self.database_url = self.__data["database"]["url"] + self.database_type = self.__data["database"]["type"] + + if self.__data["settings"]["diary"]["auto_open_diary_on_startup"] == "": + self.auto_open_diary = None + self.auto_open_new_diary = self.__data["settings"]["diary"]["auto_open_on_creation"] + else: + print("Error: config.toml not found.") + self.create_config() + self.read_config() + + def create_config(self, config: dict = None): + default = { + "database": { + "url": f"{DirectoryManager.get_config_directory()}/database.db", + "type": "sqlite" + }, + "settings": { + "diary": { + "auto_open_diary_on_startup": "", + "auto_open_on_creation": False + } + } + } + if config is None: + config = default try: - with open(f"{DirectoryManager.get_config_directory()}/config.toml", "rb") as f: - data = tomli.load(f) - print(data) + with open(f"{DirectoryManager.get_config_directory()}/config.toml", "wb") as f: + tomli_w.dump(config, f) except FileNotFoundError: print("Error: config.toml not found.") - except tomli.TOMLDecodeError as e: - print(f"Error decoding TOML: {e}") - def set_database_url(self): - pass \ No newline at end of file + def save_config(self): + if self.__data is None: + self.read_config() + self.__data["database"]["url"] = self.database_url + self.__data["database"]["type"] = self.database_type + self.__data["settings"]["diary"]["auto_open_diary_on_startup"] = self.auto_open_diary or "" + self.__data["settings"]["diary"]["auto_open_on_creation"] = self.auto_open_new_diary + + self.create_config(self.__data) + + def set_config_dir(self, value): + self.config_dir = value + + def set_database_url(self, value: str): + self.database_url = value + + def set_auto_open_diary(self, value: str): + self.auto_open_diary = value + + def set_auto_open_new_diary(self, value: bool): + self.auto_open_new_diary = value