Skip to content

feat(frontend): add batch note workflow and note management - #441

Open
Shibo-Zhu wants to merge 4 commits into
JefferyHcool:masterfrom
Shibo-Zhu:feature/frontend-note-workspace
Open

feat(frontend): add batch note workflow and note management#441
Shibo-Zhu wants to merge 4 commits into
JefferyHcool:masterfrom
Shibo-Zhu:feature/frontend-note-workspace

Conversation

@Shibo-Zhu

Copy link
Copy Markdown

背景

B 站课程经常以多 P 视频组织。当前用户需要逐集重复粘贴链接并等待生成,生成后的大量课程笔记也缺少分类、排序和后续编辑能力。本 PR 将这条学习工作流补齐:按分集范围并行生成独立笔记,再按项目管理、编辑和浏览。

已有 PR #408 面向 YouTube playlist;本 PR 面向 Bilibili 多 P 视频,并沿用现有首页和任务历史。

改动内容

Bilibili 分集范围批量生成

  • 首页支持输入起止 P,例如 P2-P5,后端校验课程总集数后为每集创建独立任务。
  • 新增 /api/generate_note_batch,批量任务共享受控线程池,默认最多并行 3 个,可由 TASK_MAX_WORKERS 调整。
  • 每集使用独立音视频 ID、截图目录、状态文件和 Markdown 结果,避免并行任务互相覆盖。
  • Bilibili 分集元数据和媒体下载保留 p 参数,并清理分享链接中的追踪参数。
  • 单次最多 100 集,超范围、反向范围和非 Bilibili 平台会返回明确错误。

历史项目与排序

  • 可创建、重命名、删除项目,并将一个或多个历史笔记移动到项目中。
  • 支持按最近生成、最早生成、标题自然顺序排序。
  • Zustand 持久化数据升级到 v2,并为旧任务补充兼容字段。

Markdown 编辑和图片管理

  • 增加 Markdown 源码编辑、实时预览、常用格式工具栏和代码块编辑。
  • 支持选择/拖放/剪贴板粘贴图片,默认保存到 backend/data/note_images,也可选择本地目录。
  • 图片使用后端生成的 ID 访问,不在 Markdown 中暴露真实文件路径;取消编辑会清理未使用的新上传图片。
  • 编辑前内容保留最多 20 份历史备份,并可重新载入后端原始生成稿。

阅读和数据安全

  • 顶部目录离开视口后显示可折叠/隐藏的右侧悬浮目录,展开时正文自动让出空间。
  • 切换笔记或版本时正文回到顶部。
  • 正文直接从当前任务推导,并在保存时校验任务 ID,避免热更新或快速切换导致上一篇内容写入下一篇。
  • 对批量任务检测“任务分集与正文来源分集不一致”,从后端原始结果恢复并先备份错误内容。

测试

  • npm run build:通过(Vite 生产构建)。
  • python -m py_compile:新增/修改的后端模块通过。
  • python -m unittest tests.test_note_batch tests.test_note_image tests.test_task_serial_executor tests.test_video_url_support -v:10 项通过。
  • 浏览器回归:构造 P3 任务持有 P2 正文,重新打开后自动恢复 P3,P2 写入编辑备份;P2 滚动后切换 P3,首帧内容正确且 scrollTop = 0

仓库目前没有 typecheck script;直接运行 tsc --noEmit 会被主分支既有 TypeScript 错误阻断,因此本 PR 以仓库可用的 Vite build 作为前端编译验证。

风险与部署说明

  • 同时修改 Web 前端和 Python 后端,需要同步部署两者。
  • 新增后端 API 和默认图片目录,不需要数据库迁移;已有浏览器历史通过 Zustand migrate 兼容。
  • 批量生成会提高 CPU、网络和 LLM 并发压力,默认限制为 3;资源较小的环境可设置 TASK_MAX_WORKERS=1
  • Bilibili 下载路径改为官方 view/playurl API,以稳定区分多 P 的 cid;相关下载逻辑是本 PR 的主要回归关注点。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant