177 Commits

Author SHA1 Message Date
晨叶梦春 adb9fac563 build: move icons from assets/ to src/tchmaterial-parser/assets/
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
v4.0
2026-08-04 23:08:15 +08:00
晨叶梦春 0daae32296 deps: update
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-04 21:16:28 +08:00
晨叶梦春 8b70fb11a6 feat: improve
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-04 13:19:44 +08:00
晨叶梦春 88f18d6ac1 feat: improve
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-04 13:00:21 +08:00
晨叶梦春 c7ebf2a443 feat(about_window): update declaration
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-04 12:32:36 +08:00
晨叶梦春 4ec6750ef6 Merge pull request #73 from Mr-Neutr0n/agent/issue-43-建议添加音频下载
fix: 建议添加音频下载
2026-08-04 02:58:36 +08:00
晨叶梦春 f15531c1fe Merge pull request #72 from Mr-Neutr0n/agent/issue-45-支持下载导学案
fix: 支持下载导学案
2026-08-04 02:58:23 +08:00
晨叶梦春 2c5dd1c942 feat(ui): add about window
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-04 02:53:09 +08:00
晨叶梦春 f57a81d678 docs(license): add Microsoft Fluent Emoji License
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-04 01:05:54 +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
Mr-Neutr0n 3dc48cbadc Fix #45: 支持下载导学案
Signed-off-by: Mr-Neutr0n <64578610+Mr-Neutr0n@users.noreply.github.com>
2026-08-03 08:38:54 +00:00
晨叶梦春 f70137b552 feat(ui): replace theme icon fallback with image
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-03 01:26:03 +08:00
晨叶梦春 7bdd2030da feat: 添加对课程资源、精品课的下载支持
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-03 00:58:26 +08:00
晨叶梦春 1bf83d4bba feat: add headers, optimize download logic
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-01 23:45:54 +08:00
晨叶梦春 c574ce283c feat: improve
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-01 15:40:24 +08:00
晨叶梦春 600ba5cfa7 feat: improve types & menus
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-08-01 01:08:04 +08:00
晨叶梦春 95a9fc68cd feat(ui): improve fallback emoji icon
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-07-31 18:40:06 +08:00
晨叶梦春 267869eb74 docs: improve
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-07-31 18:39:23 +08:00
晨叶梦春 aa8510fe9f feat: add pyproject.toml, replace VERSION with __version__
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-07-31 17:33:49 +08:00
晨叶梦春 dc1dd67047 feat(ui): add system theme option
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-07-31 02:41:07 +08:00
肥宅水水呀 4a5060dbeb docs(readme): 重排版式、更新截图并补充项目成就
原 README 首屏只有三个静态徽章,没有项目标识与状态信息;内容增长后也缺少
导航入口。本次改动只涉及呈现方式,正文措辞、警告框、致谢与 issue 编号均
保持原样,未删减任何信息。

- 新增居中头部:Logo、一句话简介,以及版本、下载量、Star 数、Python 版本、
  支持平台、许可证徽章,并加入 Trendshift 徽章与快捷导航
- 新增目录。锚点按 GitHub 的生成规则处理:🛠️、⚖️ 这类带变体选择符的 emoji
  会被剥离图形部分但保留 U+FE0F,因此对应锚点为 #️-使用方法、#️-免责声明
- 新增「项目成就」章节:2025 年 5 月 GitHub Trending 总榜第 3 名、Trendshift
  Python 日榜第 3 名
- 浅色/深色截图由表格改为并排 <img width="48%">:GitHub 会强制为 markdown
  表格渲染单元格边框,border="0" 亦无效,只有脱离表格才能去掉边框
- 同步更新浅色/深色界面截图
- 常见问题改为 <details> 折叠块,首条默认展开
- 下载与安装方法新增速查表,集中列出各平台的安装命令
- 更新 Star History 的 sealed_token:GitHub 已将 stargazers 数据限制为仓库
  管理员与协作者可读,图表 URL 需随附凭证

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 16:49:20 +08: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
肥宅水水呀 af01f72b58 fix(ui): 加宽 Access Token 帮助窗口 2026-07-30 15:15:43 +08:00
肥宅水水呀 717be19763 feat(ui): 优化教材封面展示 2026-07-30 15:13:22 +08:00
肥宅水水呀 04aa7472b5 fix(ui): 加快资源列表横向滚动 2026-07-30 15:03:15 +08:00
肥宅水水呀 5de8c9221a feat(ui): 添加资源搜索并优化教材名称展示 2026-07-30 15:01:18 +08:00
肥宅水水呀 4d12189dcc feat(ui): 重构界面并支持深浅主题
引入 sv-ttk,优化 Win11 风格布局与系统 Emoji 显示。

统一跨平台配置存储,外置窗口图标并同步打包规则、截图和文档。
2026-07-30 14:42:43 +08:00
肥宅水水呀 365eb3eee0 refactor: 将顶层界面代码收进 main() 函数
此前 GUI 在模块顶层直接创建并调用 mainloop(),导致该文件一经导入就会
弹出窗口并阻塞,无法被 import,因而也无法为其中的任何函数编写测试。
同时文件名中的连字符不是合法的 Python 模块名,即使补上入口函数仍无法导入。

- 将 tchMaterial-parser.py 更名为 tchmaterial_parser.py
- 把原第 777 行起的顶层代码移入 main(),并补充 if __name__ == "__main__" 保护
- 界面说明文字提为模块级常量 DESCRIPTION,避免其作为三引号字符串
  随缩进变动而在界面上多出空格

需要注意的是,download、download_file、parse_and_copy 等函数定义在前,
却依赖后面创建的控件,这些名字移入 main() 后会变为局部变量,导致点击按钮时
抛出 NameError(启动阶段不报错,仅在触发时暴露)。为此在 main() 中为
root、ui_font_family、url_text、bookmark_var、download_btn、
download_progress_bar、progress_label 共 7 个名字声明 global。
其余控件由随之成为嵌套函数的 build_tree_items、on_tree_select 通过闭包访问,
无需声明。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 12:12:04 +08:00
肥宅水水呀 5f03944343 build: 图标资源移入 assets/ 并重新生成多尺寸 icon.ico
src/ 目录此前混放了 5 个图标文件,与代码难以区分;且 favicon_* 的命名
源自网页图标的概念,与其实际用途(可执行文件图标、窗口图标)不符。
现统一移入 assets/ 并改用能说明用途的名称:
- favicon_48x48.ico  -> icon.ico        (Windows 可执行文件图标)
- favicon_223x223.png -> window_icon.png(运行时窗口图标,源码中以 base64 内嵌)

原 icon.ico 仅含单张 48x48 的图,Windows 在标题栏(16x16)、桌面(32x32)
与超大图标视图(256x256)下只能拉伸缩放,显示模糊。现由 1024x1024 母版
重新生成,包含 16/24/32/48/64/128/256 共 7 个尺寸。

另将 version.txt 更名为 version_info.txt,与其内容(PyInstaller 的
版本信息资源)相符,并新增 assets/README.md 说明各文件的用途、
使用者及更换图标时的重新生成步骤。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 12:11:07 +08:00
肥宅水水呀 be119194b9 chore: 添加 Issue 模板并补齐 .gitignore 结尾换行
「下载失败」类问题多数需要系统版本、获取方式、是否已设置 Access Token
等信息才能定位,此前需逐一追问。现添加问题报告与功能建议两个表单,
在提交时即收集这些信息,并提醒用户切勿粘贴自己的 Access Token。

保留空白 Issue 入口,以免挡住只想随手提问的用户,
另附指向常见问题的引导链接。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 12:10:30 +08:00
肥宅水水呀 ed25338de8 docs: 补充「从源码运行」章节与免责声明
此前文档只说明了如何使用程序,未说明如何从源码运行,
希望参与开发的用户需自行摸索。现补充依赖安装、运行与打包命令,
并提示部分 Linux 发行版需单独安装 Tkinter。

同时补充免责声明,说明本工具不存储也不分发教材内容、
资源版权归原平台所有,且与国家中小学智慧教育平台无隶属关系。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 12:10:29 +08:00
肥宅水水呀 41899d745e build: 为依赖添加宽松的版本上限
发布流程在 CI 中现场安装依赖后打包,此前依赖未作任何版本约束,
意味着每次发版都会拉取当时的最新版本。若上游发布不兼容的大版本,
构建会突然失败或产出无法运行的程序,且仓库中查不到任何相应变更。

现为各依赖添加下一个大版本作为上限。pywin32 使用递增的 build 号
而非语义化版本,故仅指定下限。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 12:10:11 +08:00
肥宅水水呀 8b075b0670 ci: 将 6 个重复的发布任务合并为构建矩阵
原先 Windows/Linux/macOS 各 x64 与 Arm64 共 6 个 job 内容几乎逐字相同,
仅 runs-on 与打包命令不同,修改任何构建步骤都需同步改 6 处,易漏改导致
某一平台的产物静默损坏。

改用 strategy.matrix 后由 242 行缩减至 82 行,产物文件名保持不变。
附带两处调整:
- 增加 fail-fast: false,避免单个平台失败时取消其余平台的构建
- 移除创建 venv 的步骤,setup-python 已提供隔离环境,且该步骤正是
  Windows 与 Linux 激活命令差异的来源

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 12:10:10 +08:00
肥宅水水呀 3a6260cb71 ci: 精简 lint 工作流,仅保留能拦截真实错误的检查
原工作流沿用 GitHub 默认模板,会跑两遍 flake8:第二遍带 --exit-zero,
无论发现多少问题都返回成功,因此只是把告警打印到日志里,从不使代码检查失败。

移除该无效的第二遍检查,保留 E9/F63/F7/F82(语法错误、未定义的变量名等
必然是 bug 的问题),并为保留的规则补充说明。同时将文件与 job 更名为 lint,
与其实际用途保持一致。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 12:10:10 +08:00
肥宅水水呀 ac9b2eff33 chore: 忽略规则 DevFile 改为 .devfiles 2026-07-30 10:06:24 +08:00
肥宅水水呀 818fd6c218 docs: 将截图目录由 res/ 迁移至 docs/images/
res/ 并非通行命名,且其内容全为文档用截图,归入 docs/ 更符合惯例。
同步更新 README 中的三处图片链接。
2026-07-30 10:06:14 +08:00
肥宅水水呀 9dbe4161d2 build: 将主脚本扩展名由 .pyw 改为 .py
flake8 默认仅收集 *.py 文件,此前 CI 中的 `flake8 .` 匹配不到任何文件,
Lint 工作流实际从未生效。改名后静态检查方可真正覆盖主脚本。

同步更新 PyInstaller spec 中的入口路径。
2026-07-30 10:06:00 +08:00
晨叶梦春 c06d4276c0 fix: incorrect format, close #71
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-07-30 00:26:09 +08:00
晨叶梦春 e7bba12e71 fix(README.md): star history
Added responsive star history chart to README.
2026-07-07 02:34:18 +08:00
晨叶梦春 4e53a3b5fa Merge branch 'main' of https://github.com/happycola233/tchMaterial-parser 2026-07-04 14:43:52 +08:00
晨叶梦春 5a3fdee036 fix(download): add authorization headers, close #69
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-07-04 14:43:36 +08:00
晨叶梦春 231419131f docs: improve 2026-07-01 13:58:57 +08:00
晨叶梦春 a3cea6a007 docs: add WinGet, close #64 2026-07-01 13:53:30 +08:00
晨叶梦春 6dd1eeaea4 feat: improve function
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-06-24 17:02:43 +08:00
晨叶梦春 561358a5e2 feat: improve function
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-06-24 07:03:16 +08:00
晨叶梦春 56b7b1f2fb improve: add labels
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-06-23 17:55:49 +08:00
晨叶梦春 ddc1d7bb9b feat: add preview image, close #10
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-06-23 16:58:19 +08:00
晨叶梦春 b031641f0a feat: replace menus with treeview, close #7
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-06-23 16:17:12 +08:00
晨叶梦春 cad455643d build: support Windows Arm64 & macOS x64, close #63, close #65
Signed-off-by: 晨叶梦春 <wuziqian211@126.com>
2026-06-21 22:58:02 +08:00