feat: 添加依赖自动检测与安装、选项记忆、KDocs登录优化

- 新增依赖检测模块:启动时自动检测wkhtmltoimage和Playwright Chromium
- 新增依赖安装对话框:缺失时提示用户一键下载安装
- 修复选项记忆功能:浏览类型、自动截图、自动上传选项现在会保存
- 优化KDocs登录检测:未登录时自动切换到金山文档页面并显示二维码
- 简化日志输出:移除debug信息,保留用户友好的状态提示
- 新增账号变化信号:账号管理页面的修改会自动同步到浏览任务页面

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-19 01:28:06 +08:00
parent 83fef6dff2
commit 9743186a9e
11 changed files with 713 additions and 506 deletions

View File

@@ -9,7 +9,7 @@ from PyQt6.QtWidgets import (
QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
QPushButton, QStackedWidget, QFrame, QLabel, QSplitter
)
from PyQt6.QtCore import Qt
from PyQt6.QtCore import Qt, QTimer
from .styles import get_stylesheet, LIGHT_THEME, DARK_THEME
from .log_widget import LogWidget
@@ -157,6 +157,9 @@ class MainWindow(QMainWindow):
self.kdocs_widget.log_signal.connect(self.log_widget.append_log)
self.settings_widget.log_signal.connect(self.log_widget.append_log)
# 账号变化时自动刷新浏览任务页面的账号列表
self.account_widget.accounts_changed.connect(self.browse_widget._refresh_accounts)
def _switch_page(self, index: int):
"""切换页面"""
# 更新导航按钮状态
@@ -176,6 +179,64 @@ class MainWindow(QMainWindow):
"""记录日志"""
self.log_widget.append_log(message)
def init_kdocs_login_check(self):
"""启动时自动检测金山文档登录状态(后台无头模式)"""
from config import get_config
config = get_config()
# 如果金山文档未启用或未配置链接,直接显示就绪
if not config.kdocs.enabled or not config.kdocs.doc_url.strip():
self.log("✅ 环境准备就绪")
return
self.log("🔄 正在检测金山文档登录状态...")
self._kdocs_init_worker = None
# 延迟100ms执行让UI先显示出来
QTimer.singleShot(100, self._do_kdocs_login_check)
def _do_kdocs_login_check(self):
"""执行金山文档登录检测"""
from utils.worker import Worker
def check_kdocs_login(_signals=None, _should_stop=None):
from core.kdocs_uploader import get_kdocs_uploader
uploader = get_kdocs_uploader()
# 静默模式,不输出详细日志
uploader._log_callback = None
result = uploader.request_qr(force=False)
return result
def on_result(result):
if result and result.get("success"):
if result.get("logged_in"):
self.log("✅ 金山文档已登录")
self.log("✅ 环境准备就绪")
# 更新金山文档面板状态
self.kdocs_widget.status_label.setText("✅ 已登录")
from .constants import get_status_style
self.kdocs_widget.status_label.setStyleSheet(get_status_style(True))
else:
self.log("⚠️ 金山文档未登录,正在获取登录二维码...")
# 自动切换到金山文档页面并获取二维码
self._switch_page(3) # 索引3是金山文档页面
QTimer.singleShot(300, self.kdocs_widget._get_qr_code)
else:
error = result.get("error", "未知错误") if result else "检测失败"
self.log(f"⚠️ 金山文档检测失败: {error}")
self.log("✅ 环境准备就绪")
def on_error(error):
self.log(f"⚠️ 金山文档检测出错: {error}")
self.log("✅ 环境准备就绪")
self._kdocs_init_worker = Worker(check_kdocs_login)
self._kdocs_init_worker.signals.result.connect(on_result)
self._kdocs_init_worker.signals.error.connect(on_error)
self._kdocs_init_worker.start()
def closeEvent(self, event):
"""窗口关闭事件"""
# 保存配置