76 lines
3.2 KiB
Python
76 lines
3.2 KiB
Python
from PyQt6.QtCore import QSettings
|
|
from app.core.observer_manager import NotificationType
|
|
from os import path
|
|
import app.utils.paths as paths
|
|
import json
|
|
|
|
class SettingsManager:
|
|
"""
|
|
Gestion des paramètres utilisateurs avec sauvegarde persistante via QSettings.
|
|
Notifie les changements via ObserverManager.
|
|
"""
|
|
def __init__(self, observer_manager, theme_manager):
|
|
self.observer_manager = observer_manager
|
|
self.theme_manager = theme_manager
|
|
|
|
# Load default settings from JSON file
|
|
defaults_path = path.join(paths.get_data_dir(), "others", "defaults_settings.json")
|
|
with open(defaults_path, 'r', encoding='utf-8') as f:
|
|
self.default_settings = json.load(f)
|
|
|
|
config_path = path.join(paths.get_current_dir(), "config.json")
|
|
with open(config_path, 'r', encoding='utf-8') as f:
|
|
self.config = json.load(f)
|
|
|
|
self.settings = QSettings(path.join(paths.get_user_data_dir(self.get_config("app_name")), self.get_config("app_name") + ".ini"), QSettings.Format.IniFormat)
|
|
|
|
self.theme_manager.set_theme(self.get_theme())
|
|
|
|
# Config
|
|
def get_config(self, key: str):
|
|
return self.config.get(key, None)
|
|
|
|
# Theme
|
|
def get_theme(self) -> str:
|
|
return self.settings.value("theme", self.default_settings.get("theme"))
|
|
|
|
def set_theme(self, mode: str) -> None:
|
|
if mode != self.get_theme():
|
|
self.settings.setValue("theme", mode)
|
|
self.theme_manager.set_theme(mode)
|
|
self.observer_manager.notify(NotificationType.THEME)
|
|
|
|
# Language
|
|
def get_language(self) -> str:
|
|
return self.settings.value("lang", self.default_settings.get("lang"))
|
|
|
|
def set_language(self, lang_code: str) -> None:
|
|
if lang_code != self.get_language():
|
|
self.settings.setValue("lang", lang_code)
|
|
self.observer_manager.notify(NotificationType.LANGUAGE)
|
|
|
|
# Window size and fullscreen
|
|
def get_window_size(self) -> dict:
|
|
return self.settings.value("window_size", self.default_settings.get("window_size"))
|
|
|
|
def set_window_size(self, width: int, height: int) -> None:
|
|
current_size = self.get_window_size()
|
|
if current_size["width"] != width or current_size["height"] != height:
|
|
new_size = {"width": width, "height": height}
|
|
self.settings.setValue("window_size", new_size)
|
|
|
|
def get_fullscreen(self) -> bool:
|
|
return self.settings.value("fullscreen", self.default_settings.get("fullscreen"))
|
|
|
|
def set_fullscreen(self, fullscreen: bool, width: int, height: int):
|
|
self.settings.setValue("fullscreen", fullscreen)
|
|
self.settings.setValue("fullscreen_size", {"width": width, "height": height})
|
|
|
|
def get_fullscreen_size(self) -> dict:
|
|
return self.settings.value("fullscreen_size", self.default_settings.get("fullscreen_size"))
|
|
|
|
def set_fullscreen_size(self, width: int, height: int) -> None:
|
|
current_size = self.get_fullscreen_size()
|
|
if current_size["width"] != width or current_size["height"] != height:
|
|
new_size = {"width": width, "height": height}
|
|
self.settings.setValue("fullscreen_size", new_size) |