feat: 添加依赖自动检测与安装、选项记忆、KDocs登录优化
- 新增依赖检测模块:启动时自动检测wkhtmltoimage和Playwright Chromium - 新增依赖安装对话框:缺失时提示用户一键下载安装 - 修复选项记忆功能:浏览类型、自动截图、自动上传选项现在会保存 - 优化KDocs登录检测:未登录时自动切换到金山文档页面并显示二维码 - 简化日志输出:移除debug信息,保留用户友好的状态提示 - 新增账号变化信号:账号管理页面的修改会自动同步到浏览任务页面 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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):
|
||||
"""窗口关闭事件"""
|
||||
# 保存配置
|
||||
|
||||
Reference in New Issue
Block a user