# common/config_manager.py import os import configparser from PySide6.QtCore import QTimer, QMutex, Signal, QObject class ConfigManager(QObject): _instance = None _mutex = QMutex() _initialized = False # 是否已完成初始化 # 方量调节控制器的参数变化 (新的最小值、新的最大值、新的初始值) adjuster_params_changed = Signal(float, float, float) # 消息清理间隔变化(新时间间隔 单位:秒) msg_clean_interval_changed = Signal(int) def __new__(cls): cls._mutex.lock() try: if not cls._instance: cls._instance = super().__new__(cls) finally: cls._mutex.unlock() return cls._instance def __init__(self): # __init__ 只执行一次 if self._initialized: return super().__init__() # 执行初始化逻辑 self._init_config() self._start_refresh_timer() self._initialized = True def _init_config(self): """初始化配置(加载默认值或配置文件)""" self.config_path = "config/constant_config.ini" # 默认配置 # 系统状态消息 和 预警消息相关的默认配置 self.MSG_KEEP_DAYS = 14 # 消息保留天数 单位: 天 self.CLEAN_INTERVAL = 7 * 24 * 3600 # 清理周期(秒) 单位: 秒 # 方量调节控件(ValueAdjuster)默认值 self.ADJUSTER_MIN = 0.0 # 最小值 self.ADJUSTER_MAX = 99.0 # 最大值 self.ADJUSTER_INITIAL = 2.5 # 初始值 # 首次加载配置文件 self._load_config() def _load_config(self): """从配置文件加载参数(覆盖默认值)""" if os.path.exists(self.config_path): config = configparser.ConfigParser() config.read(self.config_path, encoding='utf-8') # 消息相关的参数 # 读取消息保留天数 self.MSG_KEEP_DAYS = config.getint( "message_clean", "keep_days", fallback=self.MSG_KEEP_DAYS ) # 读取清理周期(天→秒) self.CLEAN_INTERVAL = config.getint( "message_clean", "interval_days", fallback=self.CLEAN_INTERVAL // (24 * 3600) ) * 24 * 3600 self.msg_clean_interval_changed.emit(self.CLEAN_INTERVAL) # 方量调节控件(ValueAdjuster)参数 # 读取最小值(fallback为当前默认值) min_value = config.getfloat( "adjuster_value", "min", fallback=self.ADJUSTER_MIN ) # 读取最大值 max_value = config.getfloat( "adjuster_value", "max", fallback=self.ADJUSTER_MAX ) # 读取初始值 initial_value = config.getfloat( "adjuster_value", "initial", fallback=self.ADJUSTER_INITIAL ) # 验证配置的值的有效性 if min_value <= max_value and min_value <= initial_value <= max_value: self.ADJUSTER_MIN = min_value self.ADJUSTER_MAX = max_value self.ADJUSTER_INITIAL = initial_value self.adjuster_params_changed.emit(self.ADJUSTER_MIN, self.ADJUSTER_MAX, self.ADJUSTER_INITIAL) def _start_refresh_timer(self): """启动定时刷新, 每5分钟刷新一次配置""" self.refresh_timer = QTimer() self.refresh_timer.timeout.connect(self._load_config) # 定时重新加载 self.refresh_timer.start(5 * 60 * 1000) # 5分钟(毫秒) # 测试 30秒刷新一次 # self.refresh_timer.start(30 * 1000) def manual_refresh(self): """手动刷新配置: 供立即生效使用""" # print("手动刷新配置...") self._load_config() # 获取消息保存天数 def get_msg_keep_days(self): return self.MSG_KEEP_DAYS # 获取消息清理间隔 def get_clean_interval(self): return self.CLEAN_INTERVAL # 获取方量调节器的最小值 def get_adjuster_min(self): return self.ADJUSTER_MIN # 获取方量调节器的最大值 def get_adjuster_max(self): return self.ADJUSTER_MAX # 获取方量调节器的初始值 def get_adjuster_initial(self): return self.ADJUSTER_INITIAL