6.3 KiB
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 分组模式)。
- 统计的「进行中」= 排队 + 执行中;点它时列表只筛执行中。