肥宅水水呀
|
bb55628250
|
fix: 避免下载文件名过长及同名资源冲突 (#80)
* fix: 避免重复拼接资源标题 (#76)
* fix: 为同名下载任务分配唯一路径
|
2026-08-16 12:36:44 +08:00 |
|
肥宅水水呀
|
2efcd89fed
|
fix: 修复私有资源下载鉴权与镜像重试 (#79)
* fix: 为私有资源请求附加访问令牌
* feat: 支持私有下载镜像自动重试
* fix: 完善私有资源鉴权错误提示
|
2026-08-16 11:54:25 +08:00 |
|
Mr-Neutr0n
|
b4e26651e4
|
Fix #43: 建议添加音频下载
Signed-off-by: Mr-Neutr0n <64578610+Mr-Neutr0n@users.noreply.github.com>
|
2026-08-03 08:47:12 +00:00 |
|
肥宅水水呀
|
82416e8b35
|
fix(download): 修正失败原因的运算符优先级,避免非 401/403 错误被静默吞掉
条件表达式的优先级低于 +,原写法把「服务器返回 HTTP 状态码 N」也一起裹进了
if 分支,导致 401/403 之外的状态码得到空字符串。而完成时的失败汇总用
`if state["failed_reason"]` 过滤,空字符串是 falsy,于是 404、500 等失败被
整条丢弃:这条分支既不会创建 .tmp 文件,也不会提示,用户只看到「下载完成」,
去目标目录却找不到文件。
改为只把 Token 提示放进条件分支,并顺带把重复的 == 比较收敛为 in。
新增 tests/test_download.py 覆盖两种状态码(该测试在修复前会失败)。
|
2026-07-30 16:06:32 +08:00 |
|
肥宅水水呀
|
ac0a83e8ad
|
refactor: 将单文件拆分为模块化包
原 src/tchmaterial_parser.py 已增长到 1608 行,其中 main() 占 541 行并声明
8 个 global,导致前面的函数反向依赖 main() 运行时才创建的对象;资源树部分
的 12 个闭包共享 8 个 nonlocal 变量;测试为取 3 个纯函数被迫拉起整个 GUI 栈。
现拆分为 15 个模块,最大 311 行,并保持原有的全局状态模型不变:每个全局
变量归属到拥有它的模块,由 app.py 在创建控件后通过 bind_* 函数写入。函数名、
参数、逻辑与注释均未改动,未启用的 fetch_lesson_list() 亦原样保留。
- 非 GUI 层:platform_utils、network、config、api、catalog、bookmarks、images
- 界面层:ui/runtime、theme、widgets、download_panel、token_window、resource_tree
- app.py 收容 main() 剩余部分,从 541 行降至 278 行且不再使用 global
- 资源树整体搬入 build_resource_tree(),闭包与 nonlocal 链保持原样
- 新增 runtime.scaled(),收敛全项目约 60 处 round(n * ui_scale)
- 入口改为包外的 src/main.py,spec 增加 pathex=['src']:PyInstaller 会把入口
当作 __main__ 分析,包内脚本的相对导入在此情形下不成立
- resource_path() 上溯层级 +1;测试改为直接导入 catalog 与 images,不再连带
拉起 tkinter/sv_ttk,headless CI 现在可以跑测试
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-07-30 16:00:45 +08:00 |
|
肥宅水水呀
|
717be19763
|
feat(ui): 优化教材封面展示
|
2026-07-30 15:13:22 +08:00 |
|
肥宅水水呀
|
5de8c9221a
|
feat(ui): 添加资源搜索并优化教材名称展示
|
2026-07-30 15:01:18 +08:00 |
|