refactor(web): simplify organize defaults and restore historical options

This commit is contained in:
root committed 2026-10-13 20:34:30 +08:00
1 parent acf68ee03b
commit c85b139ec4
11 files changed
+661 -439

No files matched your search

+4
View File
@@ -99,6 +99,10 @@ curl -H "Authorization: Bearer umt-dev-admin-key" "localhost:4390/api/v1/events?
整理恢复区分两种情况:文件执行中断从原冻结计划和持久文件结果继续;作品或季集事实纠正后,通过 `retryOrganizeRecord` 从原业务请求重新规划。同一原记录的重规划串行,避免事件和巡检同时冻结重复计划。原请求保存一次性目标、操作方式和覆写,函数、任务身份与路径守卫不序列化,恢复时重新检查来源边界。已成功文件与资产保持原状,恢复主文件失败状态时也恢复其附属文件依赖。
来源身份复用既有 `external_identity`,只持久化经过 TMDB 校验的辅助来源映射。Bangumi/豆瓣允许同一作品有多个分季身份,来源 ID 的全局唯一归属保持不变;需要单值 ID 的命名、刮削等消费者必须显式处理多值,不能随机取一条。身份解析不顺带改写资源季集,季集继续由所属模块换算。
历史记录恢复仍走现有整理入口:从原请求、可信旧任务输入到冻结计划依次提取事实,区分可直接重试与需要补齐的预填。文件管理通过 `recoveryRecordId` 交给业务层恢复下载关联、洗版与未编辑覆写,表单只覆盖明确支持的本次选项;来源范围和隐含参数共同参与预览校验。前端共用恢复选项的纯转换,不另造恢复向导或第二套请求模型;默认开始整理和手动预览共用冻结计划与入队函数。
季集计算和识别词归 sources-identity,整理请求、文件操作与入库状态归 acquisition-organize。整理把真实失败文件和同批正常文件样本交给映射事项,模拟与写入共用同一判断;映射重算后以 `media.episode_mapping_changed` 通知整理模块,只有季集已经确定的未完成记录重新规划。恢复预检与规划复用 `planFileEpisodes`,保留原资源的发布时间等解析上下文。Agent 的调查运行、预算和授权沿用现有机制,不另外创建恢复框架;身份补齐、重新排队和实际入库完成分别按业务事实核实。
维护时先验证真实的成功、失败和恢复路径,尤其是授权、文件替换、取消与外部副作用;删除空壳或无使用者的机制时同步删除其专属测试与文档。不要为了目录对称增加转发层,也不要把不同阶段的状态合并成一个枚举。
+4
View File
@@ -36,6 +36,10 @@
作品有已接受的外部身份,且同一种文字(中文 / 拉丁)下已有确认的外部标题(主标题 / 原标题 / TMDB 译名与别名),这个名称对不上
(`conflicts_external_title`);这个名称已经挂在别的作品上(`owned_by_other`)。
已通过 TMDB 结果验证的 Bangumi/豆瓣身份保存到现有外部身份表,后续发布和发现页优先复用 accepted 映射,避免重复访问辅助源。动漫的不同季可各有 Bangumi/豆瓣 ID,但关联同一 TMDB 剧集;撤销按单条身份处理。一个来源 ID 仍只能属于一个作品,有冲突时不会自动抢占或合并。命名、刮削等只能接收一个作品级 ID 的地方,存在多个分季 ID 时不任选其中一个。
资源的来源季集与作品身份分别处理。辅助源用于定位 TMDB 作品,不用辅助源的分季覆盖原资源季集;之后继续通过现有作品识别词与季集映射换算。含明确外部 ID 的资源即使复杂标题没有解析出名称,也先尝试 ID 链路。BT 仍沿用现有适配器与解析器,不另建动漫执行流程。
标题更新(RSS 标题与列表标题不同、站点改标题):按新标题重新解析,发 `release.observed(isNew=false)`,以 `force` 重新识别
(已识别的也不短路,触发来源仍是 observed);重新识别不能确认时撤销原自动绑定、进池。人工锁定的不动。
+4 -4
View File
@@ -12,9 +12,9 @@
- 契约:`packages/contracts/src/organization.ts`(`OrganizationListQuery`、`OrganizationStats*`、`OrganizationDelete*`),端点 `Api.organization.stats / remove`。
- 前端:`apps/web/app/routes/console/organize.tsx`、`organize.$id.tsx`,`components/organize/`(删除确认框、标题 / 季集小件),批量重新整理走共用整理弹窗的 `{ kind: "records" }` 来源。
## 统一整理弹窗(v0.3.13)
## 统一整理弹窗
手动选目录、文件管理器、下载详情与历史重新整理打开同一个弹窗。单文件只处理该文件,目录递归展开视频,多选合并去重。媒体类型可自动、电影或剧集;作品可自动识别、搜索本地/TMDB,也可选定类型后输入 TMDB ID 定位。手动指定作品与季号作用于整个本次范围,混合批次中需单独纠正的作品另行选取;文件明细可核对和修正季集、排除文件,没有另一套批量勾选语义。
手动选目录、文件管理器、下载详情与历史重新整理打开同一个弹窗。默认展示识别作品、方式与目标摘要,点击「开始整理」先冻结预览,全部可执行时直接加入队列;有冲突或失败则展开预览,不自动提交。预览也可主动打开。作品、季号、目标和其他一次性设置收在「高级选项」,来源匹配不唯一或旧记录缺设置时自动展开。没有来源配置时直接选目录,不经过空的来源选择页。单文件只处理该文件,目录递归展开视频,多选合并去重。媒体类型可自动、电影或剧集;作品可自动识别、搜索本地/TMDB,也可选定类型后输入 TMDB ID 定位。手动指定作品与季号作用于整个本次范围,混合批次中需单独纠正的作品另行选取;文件明细可核对和修正季集、排除文件,没有另一套批量勾选语义。
各入口匹配相同来源配置,唯一匹配自动带出方式和分类/目标,多个匹配在弹窗内选定;不使用来源配置时沿用全局默认并手动指定。下载详情优先按已有 qB 标签匹配覆盖当前路径的来源。历史原配置仍覆盖可用输入时优先采用;成功移动后的目标不再属于旧来源时显示当前匹配配置或手动选项。
@@ -22,7 +22,7 @@
手动来源发现真正成功历史时显示数量及「跳过成功记录」,**默认关闭**,开启后仅本次跳过;失败/部分成功记录不算完整成功,最新失败也不会遮盖较早成功。目标已存在策略单独处理。从历史记录进入直接采用重新整理语义。修改识别或选项后旧预览失效,需重新生成。
确认预览后只提供「加入整理队列」。后台受理成功后弹窗自动关闭,可以继续操作,进度到队列查看,整理后的刮削任务也显示在队列,整理详情单独展示刮削结果;部分受理时已受理文件从本次范围移除,剩余文件可修改后再预览提交。队列复用现有后台调度,不要求浏览器停留到文件处理结束。记录、队列及弹窗明细均复用统一分页。
主动打开预览后使用「加入队列」,明确显示本次可提交组数。后台受理成功后弹窗自动关闭,可以继续操作,进度到队列查看,整理后的刮削任务也显示在队列,整理详情单独展示刮削结果;部分受理时已受理文件从本次范围移除,剩余文件可修改后再预览提交。队列复用现有后台调度,不要求浏览器停留到文件处理结束。记录、队列及弹窗明细均复用统一分页。
## 整理时指定剧集组
@@ -51,7 +51,7 @@
整理记录保留本次业务请求。没识别出作品时,下载来源和按路径来源都能由人工或智能体指定作品,再沿用原来的目标目录、复制/移动、命名和文件覆写重新整理。只有重新规划已接受才算身份事项处理成功,实际入库结果仍看后续整理记录;重新规划失败会留下原因。
季集待确认按作品、来源季和发布组归集真实文件样本,资源站标题与文件名不同的情况也参与模拟。作品识别词必须同时解决待确认文件且不破坏已对上的资源,写入后同类文件沿用这条规则。映射或季表重算后,季集已确定的整理自动继续剩余文件;本次临时选择的季集结构保持原约定,缺少原请求的旧记录由人工重新选择来源。
季集待确认按作品、来源季和发布组归集真实文件样本,资源站标题与文件名不同的情况也参与模拟。作品识别词必须同时解决待确认文件且不破坏已对上的资源,写入后同类文件沿用这条规则。映射或季表重算后,季集已确定的整理自动继续剩余文件;本次临时选择的季集结构保持原约定,旧记录先恢复原请求或可信的历史任务输入;只有冻结计划时预填已知设置并提示确认缺项,来源确实丢失才补选目录。原下载关联、版本、洗版与未编辑的文件覆写由后端恢复,不靠前端重新拼一份不完整请求。
设置中的整理自动识别控制作品与季集的单次调查。身份有把握时可重新整理;季集规则自动写入仍需要有效持续授权,没有授权则保留模拟建议供确认。无法确认的交还人工,不改变收录分辨率、版本优先级或洗版条件。