Files
UHD_Media_Tool/docs/runbook/organize.md
T
2026-09-30 23:57:19 +08:00

6.3 KiB

整理记录(/console/organize,HIS-1)

整理记录页列出每次整理(复制 / 移动 / 硬链接)以及文件管理的改名、删除、还原。HIS-1 按 MoviePilot 历史记录页逐项补齐。

实现:

  • 列表 / 统计 / 详情:apps/server/src/modules/acquisition-organize/routes/organization.ts(筛选 recordFilters,通配 likePattern);公开字段在 services/organize.ts 的 loadRecordsPublic。
  • 删除:apps/server/src/modules/file-manager/record-delete.ts(复用文件管理删除 deleteFiles)。
  • 契约: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" } 来源。

与 MP 的对照

MP 对照源:MoviePilot-Frontend/src/views/reorganize/TransferHistoryView.vue、components/dialog/TransferHistoryDeleteDialog.vue、app/api/endpoints/history.py、app/db/models/transferhistory.py。

MP 功能 我们 说明
海报 新增 作品海报(media.posterPath),没有时显示首字占位
标题 / 年份 / 季集 已有 作品 (年) S01E02;未识别的显示「未识别 · 源文件名」
二级分类(华语电影等) 不做 我们没有二级分类;按类型(电影 / 剧集)筛选代替
源路径 → 目标路径 新增 列表加「源 → 目标」列(只显示末两段,悬停看全路径);详情「整理前 / 整理后」已有
存储标签(本地 / SMB…) 不做 只有本地存储,标签不提供信息
整理方式 复制 / 移动 / 硬链接 已有 列表「方式」列;文件管理的改名、移入回收站、还原也在这里
软链接、Rclone 复制 / 移动 不做 整理服务不支持这几种方式
大小 新增 逐文件源大小之和(sizeBytes)
状态 成功 / 失败 + 失败原因 已有,改 加「部分成功」「执行中」;成功不加徽章;失败原因走 reasons.ts 一句话,原码进详情「技术信息」
时间 已有,改 相对时间,悬停看完整时间
来源 下载器 / 手动 / 自动 新增下载器 来源列加下载器名称;详情加「下载任务」一行,种子 hash 进「技术信息」
关键字搜索(标题、源、目标;* ? 通配) 已有,补 补通配、逐文件的源 / 目标路径、种子 hash
搜「成功」「失败」切状态 不做 有状态筛选和计数按钮
状态筛选 已有
类型筛选 新增 电影 / 剧集 / 未识别(kind=movie|series|none)
时间筛选 新增 今天 / 最近 7 天 / 最近 30 天(since)。MP 没有,任务单要求
统计(总数 / 成功 / 失败) 新增 列表上方一行计数,只列非零项,点一下按该状态筛选(GET /organization-records/stats)
分页、每页条数 已有(不同) 游标「加载更多」,MP 手机端同样是触底加载;不做页码与每页条数
列排序 不做 按时间倒序;分组模式下按作品聚合
分组模式(按标题) 新增 「按作品分组」,组头可折叠
筛选写进地址栏 新增 状态 / 类型 / 来源 / 时间 / 关键字 / 分组都在 URL,刷新不丢
单条:重新整理 已有,补 详情已有;列表行菜单新增。走整理向导(识别 → 选项 → 预览执行)
单条:智能助手整理 已有(不同) 「让智能体排查」:失败 / 部分成功的记录在行菜单和详情里
单条:删除(只删记录 / 连源文件 / 连媒体库文件 / 全部) 新增 确认框里两个勾选项,先核对再执行,写清删几个文件、多大、哪些删不了、会不会被自动整理再处理
查看详情 已有 详情加海报、大小、下载任务、删除按钮
批量选择 / 全选 新增 「批量」进入选择模式,表头全选
批量删除 新增 同单条删除确认框;删不了的逐条列出,其余照删
批量重新整理 新增 选中记录的源文件一起进整理向导;同属一个作品时预选作品
清空整理记录 不做 整理记录同时是文件变更的追溯记录;清理按保留期由计划页负责

删除

POST /organization-records/delete {ids[≤200], deleteSource, deleteTarget, dryRun},scope organize.execute。

  • 文件一律移入回收站,走文件管理删除(deleteFiles,mode=trash,retireAssets=true):已入库文件同时从媒体库移除(位置 removed、资产 retired、满足的收录版本转需关注 + 待处理)。回收站里能还原。
  • 源文件 = 该记录逐文件结果的 source_path(只认执行进程本地视图);媒体库文件 = 成功文件的 target_path(相对库根时按库根拼)。已经不在的文件跳过、不拦。
  • 只有复制 / 移动 / 硬链接记录有文件可删;改名、移入回收站、还原类记录只删记录本身。
  • 一条记录的任一文件不能删(做种未满足或下载中 download_active、绑定目录 needs_unbind、不在登记目录 outside_roots、目录离线等),这条记录连同它的文件都不动;还在整理的记录(running)不删。其余照删。
  • 文件移入回收站会写一条「移入回收站」整理记录(同文件管理删除),trashRecordId 返回它。
  • 下载器里的任务不删(同文件管理删除原则)。
  • 删文件只允许管理员(控制台会话 / DEV key);API Key 只能删记录,删文件 403,需先走 /files/delete 的一次性审批。
  • autoRetry:下载已完成但没入库(download_task.status=completed、本工具管理、没从下载器删除)且删完没有别的整理记录的下载任务数。自动整理扫描(index.ts 的补漏)会在几分钟后重新整理它们——与 MP 删失败记录后重新整理一致;已入库(imported)的不会。
  • 删除不写增量读取的墓碑(/organization-records/changes 不会出现被删的记录);文件变化通过「移入回收站」记录可见。审计 files.organize_records_delete。

已知缺口

  • 删媒体库文件只删整理记录里的文件,目录里的 NFO、图片与空目录保留(MP 在没有剩余视频时会连目录删掉)。
  • 分组只对已加载的记录生效(同 MP 分组模式)。
  • 统计的「进行中」= 排队 + 执行中;点它时列表只筛执行中。