mirror of
https://github.com/KenanZhu/AutoLibrary.git
synced 2026-08-02 06:09:36 +08:00
44dbde3355
启动恢复: - _initializeAppearance 自定义主题加载失败时调用 clearTheme 回退配色方案 列表校验: - listThemes 同时校验 info.json 和 theme.qss 完整性 - 损坏的主题文件记录 LogManager 警告并跳过 - 按 (名称, 作者) 去重,同一作者同名主题仅保留一个 导入保护: - importTheme 新增 (名称, 作者) 冲突检查 - applyTheme 缺少 theme.qss 时抛出明确 ValueError 状态一致性: - saveAndApply 在 syncRadioFromNeedTheme 后重新采集 THEME 再保存 - __original_theme / __original_custom_theme 随每次 Apply 同步更新 - Reset 按钮恢复组合框到原始位置并刷新状态标签 代码质量: - 提取 _colorSchemeFor 静态方法消除 applyTheme/clearTheme 中的重复映射 - 移除未使用的 _applyTheme 死代码 - _active_style_name 默认值从 '' 改为 'Fusion' - 日志调用统一使用 LogManager - _applyCustomTheme 异常时通过 LogManager 记录详细错误 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
112 lines
3.7 KiB
Python
112 lines
3.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Copyright (c) 2026 KenanZhu.
|
|
All rights reserved.
|
|
|
|
This software is provided "as is", without any warranty of any kind.
|
|
You may use, modify, and distribute this file under the terms of the MIT License.
|
|
See the LICENSE file for details.
|
|
"""
|
|
import os
|
|
|
|
from PySide6.QtCore import QStandardPaths, QDir
|
|
from PySide6.QtWidgets import QApplication
|
|
|
|
from interfaces.ConfigProvider import CfgKey
|
|
from managers.config.ConfigManager import instance as configInstance
|
|
from managers.driver.WebDriverManager import instance as webdriverInstance
|
|
from managers.log.LogManager import instance as logInstance
|
|
from managers.theme.ThemeManager import(
|
|
setActiveStyle,
|
|
instance as themeInstance
|
|
)
|
|
|
|
|
|
def _initializeLogManager(
|
|
) -> bool:
|
|
|
|
app_dir = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.AppDataLocation)
|
|
log_dir = os.path.join(app_dir, "logs")
|
|
if not QDir(log_dir).exists():
|
|
if not QDir().mkpath(log_dir):
|
|
return False
|
|
logInstance(log_dir)
|
|
return True
|
|
|
|
def _initializeConfigManager(
|
|
) -> bool:
|
|
|
|
logger = logInstance().getLogger("AppInitializer")
|
|
|
|
app_dir = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.AppDataLocation)
|
|
old_config_dir = os.path.join(app_dir, "config")
|
|
new_config_dir = os.path.join(app_dir, "configs")
|
|
if QDir(old_config_dir).exists(): # old config dir exists
|
|
#we rename it to compatible with new version
|
|
logger.info("存在旧配置目录 %s,将其重命名为 %s", old_config_dir, new_config_dir)
|
|
if not QDir().rename(old_config_dir, new_config_dir):
|
|
logger.error("重命名旧配置目录 %s 到 %s 失败", old_config_dir, new_config_dir)
|
|
return False
|
|
elif not QDir(new_config_dir).exists():
|
|
logger.info("初始化配置目录 %s", new_config_dir)
|
|
if not QDir().mkpath(new_config_dir):
|
|
logger.error("创建配置目录 %s 失败", new_config_dir)
|
|
return False
|
|
configInstance(new_config_dir)
|
|
return True
|
|
|
|
def _initializeWebDriverManager(
|
|
) -> bool:
|
|
|
|
logger = logInstance().getLogger("AppInitializer")
|
|
|
|
app_dir = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.AppDataLocation)
|
|
driver_dir = os.path.join(app_dir, "drivers")
|
|
if not QDir(driver_dir).exists():
|
|
logger.info("初始化驱动目录 %s", driver_dir)
|
|
if not QDir().mkpath(driver_dir):
|
|
logger.error("创建驱动目录 %s 失败", driver_dir)
|
|
return False
|
|
webdriverInstance(driver_dir)
|
|
return True
|
|
|
|
def _initializeAppearance(
|
|
):
|
|
|
|
app = QApplication.instance()
|
|
if not app:
|
|
return
|
|
cfg = configInstance()
|
|
saved_style = cfg.get(CfgKey.GLOBAL.APPEARANCE.STYLE, "Fusion")
|
|
saved_theme = cfg.get(CfgKey.GLOBAL.APPEARANCE.THEME, "system")
|
|
saved_custom_theme = cfg.get(CfgKey.GLOBAL.APPEARANCE.CUSTOM_THEME, "")
|
|
app.setStyle(saved_style)
|
|
setActiveStyle(saved_style)
|
|
logger = logInstance().getLogger("AppInitializer")
|
|
if saved_custom_theme:
|
|
try:
|
|
themeInstance().applyTheme(saved_custom_theme)
|
|
except Exception:
|
|
logger.warning("无法应用自定义主题 '%s',回退到默认外观", saved_custom_theme)
|
|
themeInstance().clearTheme(saved_theme)
|
|
return
|
|
themeInstance().clearTheme(saved_theme)
|
|
|
|
def initializeApp(
|
|
) -> bool:
|
|
"""
|
|
Initialize the application components
|
|
|
|
Order:
|
|
LogManager -> ConfigManager -> WebDriverManager -> Appearance
|
|
"""
|
|
|
|
if not _initializeLogManager():
|
|
return False
|
|
if not _initializeConfigManager():
|
|
return False
|
|
if not _initializeWebDriverManager():
|
|
return False
|
|
_initializeAppearance()
|
|
return True
|