Releases
20260803
Compare
Sorry, something went wrong.
No results found
Changelog
v2.0.3 (2026-08-03) 当前版本
功能
演员库维护工具改为直接操作 xlsx :移除「输入演员名单 / 选择 nfo 目录」输入方式,新增三个独立按钮——补全中文名(按已有 TMDB ID 补中/英繁体翻译)、补全 LibreDMM 链接(补信息链接)、同步别名(用 TMDB 最新 also_known_as 刷新 keyword 列),统一扫描 actor_database.xlsx,每个按钮带独立防重入
同步别名与刮削共用同一规则 :run_actor_db_xlsx 的 sync_aliases 改为复用 _merge_keyword_values,与刮削写入 actor 库的别名合并逻辑保持一致,永不同步偏差
工具页工具排序调整 :按用户偏好重排为 Emby 演员管理 → 演员库维护 → 单文件刮削 → 裁剪图片 → 封面补图 → 软链接助手 → 移动视频字幕 → 检查演员缺失番号
打开演员数据库按钮 :演员库维护工具新增「打开演员数据库」按钮,用系统默认程序打开 actor_database.xlsx 供查看与手工编辑;文件不存在或打开失败时提示先安装 Excel/WPS 等办公软件
并发提速 :演员库维护(补全中文名/链接/同步别名)改为滑动窗口并发模式,TMDB 请求并发 5、LibreDMM 请求并发 2,串行 150s+ 降至约 30s
修复
单 exe 按钮无提示退出 :修复「打开演员数据库」按钮点击后程序直接退出(根因:_open_actor_db_file 误作实例方法调用导致 AttributeError,被 onefile 无控制台吞掉为静默退出)
executor.submit 传参错误 :AsyncBackgroundExecutor.submit() 只接受单协程参数,executor.submit(asyncio.run, run()) 写法导致 TypeError。修复 main_window.py 的 _run_actor_db_tool 及 tool_handlers.py 的 cover_backfill 两处同源 bug
跨线程 Qt 不安全操作 :_run_actor_db_tool 协程内直接 btn.setEnabled() 跨线程操作 QWidget。改为 actor_db_finished pyqtSignal 主线程恢复,消除潜在 segfault 风险
日志通道不通 :_log_line 仅写内存 LogBuffer,不显示在 GUI 日志页/文件,用户看到「开始扫描」后无后续输出误以为卡死。改为同时调用 signal_qt.show_log_text 实时显示
工程质量
崩溃转储埋点 :main.py 注册 faulthandler + sys.excepthook + stdout/stderr 重定向到 MAIN_PATH/crash/ 目录, onefile 无控制台环境下的 Python 异常不再被静默吞掉
死代码清理 :移除 init.py 重复 setText 接线、tool_handlers.py/main_window.py 旧 pushButton_actor_db_pick_dir/start_clicked 引用已删除控件的死代码
记忆文件写入 :.monkeycode/MEMORY.md 记录 9 条经验:onefile 静默退出诊断方法、日志通道一致性、executor.submit 正确用法、跨线程 Qt 安全模式、刮削并发架构参考
v2.0.2 (2026-08-02)
重构
工具页槽函数抽取 :将 main_window.py 中的 21 个工具/设置页槽函数抽取至独立模块 tool_handlers.py,main_window.py 从 3539 行减至约 3350 行
目录选择模式统一 :新增 _pick_folder 公共 helper,9 个目录选择方法统一为一行 delegate 调用
删除 2 个废弃 import :emby_actor_image/emby_actor_info 改为延迟导入
性能
行索引缓存 :update_actor_db_row 新增 _ACTOR_DB_ROW_INDEX 全局索引(jp_name → row_index),消除 O(n²) workbook 全表扫描,三个调用点(actor_db_tool/tmdb_actor/scraper)直接受益
读取模式批量落盘 :scraper.py 读取模式下演员 TMDB ID 补充改为共享 workbook,集中一次落盘,避免每个演员独立 load/save
格式化跳过 :_format_db_worksheet 检测表头是否已格式化,首次后跳过边框/字体/列宽设置,每次 save 减少 5 次全表遍历,CI 测试耗时从 20.8s 降至 10.7s
工程质量
移除 7 个文件的 network 标记 :test_tmdb_actor.py 等 7 个文件的 93 个测试全部为纯离线 mock 测试,移除 pytestmark = pytest.mark.network 使其进入 CI
修复 9 个预存陈旧测试 :test_network_lifecycle.py 的 _FakeLimiter/_FakeResponse mock 修复(添加 async context manager 支持),test_web_amazon_data.py 的 mock 路径修正(mdcx.utils.rate_limit.random),test_amazon_database.py freeze_panes assert 修正
新增 14 个测试用例 :行索引缓存 6 个、_load_actor_db_wb/_flush_actor_db_wb 4 个、目录选择/gfriends 同步 8 个
CI 离线测试通过数从 530 提升至 635 (+105),全量 627 passed,4 skipped
打包配置补充 :build.py 新增 mdcx.tools.emby_actor_image/emby_actor_info/sync_gfriends/scripts.cover_backfill 的 hidden-import,排除 6 个开发期包(playwright/setuptools/mypy 等),预估单 exe 体积减少约 200MB
You can’t perform that action at this time.