真正入库取决于媒体服务器有没有扫到,本工具只负责整理(元数据、NFO 与图片、按规则归到目录)。 界面与面向用户的服务端文案里「已入库 / 未入库 / 部分入库 / 入库失败 / 入库中 / 入库后 / 原地入库…」 改为「已整理 / 未整理 / 部分整理 / 整理失败 / 整理中 / 整理后 / 原地整理…」;文件管理快速筛选「已整理」、 目录副行「n 个已整理 / 未整理」、季卡片「已整理 x/y」。代码标识符不改,「Emby 已有」这类媒体服务器状态保留。 glossary 加「整理」口径条目;check:copy 拦处理状态语境的「入库」搭配,其它线待替换的文件暂列 TERM_PENDING。 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
84 lines
3.0 KiB
TypeScript
84 lines
3.0 KiB
TypeScript
import { IdParam } from "../common.ts";
|
|
import * as em from "../episode-mapping.ts";
|
|
import { ep } from "./shared.ts";
|
|
|
|
// 集数映射(docs/plan/episode-resolution.md 批次 4):作品的映射规则增删改、模拟预览。
|
|
// 写入后立即按作品重算已绑定资源(返回受影响数量);待处理 episode_mapping 的确认 / 忽略走 /decisions/{id}/resolve 的选项。
|
|
|
|
export const episodeMappingApi = {
|
|
episodeMapping: {
|
|
listRules: ep({
|
|
method: "get",
|
|
path: "/media-entities/{id}/episode-mapping-rules",
|
|
scope: "read",
|
|
summary: "作品的集数映射规则(含停用的与停用原因)",
|
|
params: IdParam,
|
|
response: em.EpisodeMappingRuleList,
|
|
}),
|
|
createRule: ep({
|
|
method: "post",
|
|
path: "/media-entities/{id}/episode-mapping-rules",
|
|
scope: "organize.execute",
|
|
summary: "新建集数映射规则并按作品重算(同作品 + 季 + 发布组只能有一条启用的规则)",
|
|
params: IdParam,
|
|
body: em.EpisodeMappingRuleCreate,
|
|
response: em.EpisodeMappingRuleWriteResult,
|
|
}),
|
|
updateRule: ep({
|
|
method: "patch",
|
|
path: "/episode-mapping-rules/{id}",
|
|
scope: "organize.execute",
|
|
summary: "修改 / 停用 / 启用集数映射规则并按作品重算",
|
|
params: IdParam,
|
|
body: em.EpisodeMappingRuleUpdate,
|
|
response: em.EpisodeMappingRuleWriteResult,
|
|
}),
|
|
deleteRule: ep({
|
|
method: "delete",
|
|
path: "/episode-mapping-rules/{id}",
|
|
scope: "organize.execute",
|
|
summary: "删除集数映射规则并按作品重算",
|
|
params: IdParam,
|
|
response: em.EpisodeMappingRuleWriteResult,
|
|
}),
|
|
preview: ep({
|
|
method: "post",
|
|
path: "/media-entities/{id}/episode-mapping/preview",
|
|
scope: "read",
|
|
summary: "模拟预览:近期资源的原始季集 → 当前结果 → 套用草稿规则后的结果(纯读)",
|
|
params: IdParam,
|
|
body: em.EpisodeMappingPreviewInput,
|
|
response: em.EpisodeMappingPreview,
|
|
}),
|
|
},
|
|
episodeGroups: {
|
|
list: ep({
|
|
method: "get",
|
|
path: "/media-entities/{id}/episode-groups",
|
|
scope: "read",
|
|
summary: "作品可选的季集结构:TMDB 剧集组列表与当前选择",
|
|
params: IdParam,
|
|
response: em.EpisodeGroupList,
|
|
}),
|
|
seasons: ep({
|
|
method: "get",
|
|
path: "/media-entities/{id}/episode-structure",
|
|
scope: "read",
|
|
summary: "某套季集结构(TMDB 默认季或剧集组)的季卡片与每集,带本地已整理情况(纯读)",
|
|
params: IdParam,
|
|
query: em.EpisodeStructureQuery,
|
|
response: em.EpisodeStructureSeasons,
|
|
}),
|
|
set: ep({
|
|
method: "put",
|
|
path: "/media-entities/{id}/episode-group",
|
|
scope: "organize.execute",
|
|
summary:
|
|
"切换作品的季集结构:按 TMDB 原季集原地迁移集单元(引用不动),重建季表,按作品重算已绑定资源并刷新元数据",
|
|
params: IdParam,
|
|
body: em.EpisodeGroupSetInput,
|
|
response: em.EpisodeGroupSetResult,
|
|
}),
|
|
},
|
|
} as const;
|