feat(copy): 处理状态的「入库」改为「整理」,术语表与 check:copy 同步
真正入库取决于媒体服务器有没有扫到,本工具只负责整理(元数据、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
This commit is contained in:
1 parent
79c3b8c9b9
commit
550ac285f4
67 files changed
+171
-143
No files matched your search
@@ -717,7 +717,7 @@ export default function FilesPage() {
|
||||
key: "scrape",
|
||||
label: "刷新元数据",
|
||||
icon: RefreshCw,
|
||||
disabled: selected.every((e) => e.asset) ? null : "只对已入库的文件",
|
||||
disabled: selected.every((e) => e.asset) ? null : "只对已整理的文件",
|
||||
onSelect: () => act("scrape", selected),
|
||||
});
|
||||
items.push({
|
||||
|
||||
@@ -141,7 +141,7 @@ function PathsPanel({ detail }: { detail: LibraryDetail }) {
|
||||
<EmptyState
|
||||
plain
|
||||
icon={FolderTree}
|
||||
title="还没有入库文件"
|
||||
title="还没有整理过的文件"
|
||||
description="收录版本满足后,文件位置显示在这里。"
|
||||
className="py-8"
|
||||
/>
|
||||
@@ -608,7 +608,7 @@ function UnitsPanel({ entity, detail }: { entity: ReturnType<typeof useEntityDet
|
||||
hideBelow: "sm",
|
||||
cell: (u) =>
|
||||
covered.has(u.id) ? (
|
||||
<StatusBadge tone="success">已入库</StatusBadge>
|
||||
<StatusBadge tone="success">已整理</StatusBadge>
|
||||
) : (
|
||||
<span className="text-muted-foreground">—</span>
|
||||
),
|
||||
@@ -711,10 +711,10 @@ function EpisodesPanel({ detail, units }: { detail: LibraryDetail; units: Conten
|
||||
if (hit) return hit;
|
||||
const season = seasonUnitOf(u.seasonNumber!);
|
||||
if (covered.has(u.id) || (season && covered.has(season.id)))
|
||||
return { label: "已入库", tone: "success", have: true };
|
||||
return { label: "已整理", tone: "success", have: true };
|
||||
const air = finalOf(u, "airDate")?.value ?? u.airDate;
|
||||
if (typeof air === "string" && air > today()) return { label: "未播出", tone: "neutral", have: false };
|
||||
return { label: sub ? "缺失" : "未入库", tone: sub ? "destructive" : "neutral", have: false };
|
||||
return { label: sub ? "缺失" : "未整理", tone: sub ? "destructive" : "neutral", have: false };
|
||||
};
|
||||
const haveIn = (n: number) => episodes.filter((u) => u.seasonNumber === n && statusOf(u)?.have).length;
|
||||
const initial =
|
||||
@@ -747,7 +747,7 @@ function EpisodesPanel({ detail, units }: { detail: LibraryDetail; units: Conten
|
||||
description={
|
||||
sub
|
||||
? "库内状态按订阅的覆盖矩阵;标题与简介按语言回退链取值"
|
||||
: "没有订阅时只看是否已入库;标题与简介按语言回退链取值"
|
||||
: "没有订阅时只看是否已整理;标题与简介按语言回退链取值"
|
||||
}
|
||||
actions={
|
||||
<Button variant="outline" size="sm" disabled={refresh.isPending} onClick={refreshFull}>
|
||||
@@ -817,7 +817,7 @@ function EpisodesPanel({ detail, units }: { detail: LibraryDetail; units: Conten
|
||||
})(),
|
||||
summary: (
|
||||
<StatusBadge tone={total && have >= total ? "success" : "neutral"}>
|
||||
已入库 {have}/{total ?? "?"}
|
||||
已整理 {have}/{total ?? "?"}
|
||||
</StatusBadge>
|
||||
),
|
||||
}}
|
||||
|
||||
@@ -166,7 +166,7 @@ function WorksView() {
|
||||
},
|
||||
{
|
||||
key: "org",
|
||||
header: "最近入库",
|
||||
header: "最近整理",
|
||||
hideBelow: "lg",
|
||||
cell: (r) => <span className="text-meta text-muted-foreground">{relTime(r.lastOrganizedAt)}</span>,
|
||||
},
|
||||
|
||||
@@ -208,7 +208,7 @@ function InventoryPanel({ d }: { d: TmdbMediaDetail }) {
|
||||
) : (
|
||||
<>
|
||||
<p>
|
||||
{inv.versionCount} 个版本已入库
|
||||
{inv.versionCount} 个版本已整理
|
||||
{inv.downloadingCount ? ` · ${inv.downloadingCount} 个正在下载` : ""}
|
||||
{inv.subscribed ? " · 已订阅" : ""}
|
||||
</p>
|
||||
@@ -284,7 +284,7 @@ function SeasonsPanel({ d }: { d: TmdbMediaDetail }) {
|
||||
});
|
||||
const seasons = [...d.seasons].sort((a, b) => (a.seasonNumber || 999) - (b.seasonNumber || 999));
|
||||
return (
|
||||
<Panel title="季与集" description={d.localEntityId ? "本地一列是已入库集数" : "不在媒体库"}>
|
||||
<Panel title="季与集" description={d.localEntityId ? "本地一列是已整理集数" : "不在媒体库"}>
|
||||
<PaginatedList rows={seasons} label="季列表" resetKey={d.externalId} className="space-y-2">
|
||||
{(s) => (
|
||||
<SeasonSection
|
||||
@@ -299,7 +299,7 @@ function SeasonsPanel({ d }: { d: TmdbMediaDetail }) {
|
||||
summary:
|
||||
d.localEntityId && s.localHave !== null ? (
|
||||
<StatusBadge tone={s.localHave >= s.episodeCount && s.episodeCount > 0 ? "success" : "neutral"}>
|
||||
已入库 {s.localHave}/{s.episodeCount}
|
||||
已整理 {s.localHave}/{s.episodeCount}
|
||||
</StatusBadge>
|
||||
) : undefined,
|
||||
}}
|
||||
|
||||
@@ -48,7 +48,7 @@ const TOTAL_SOURCE: Record<string, string> = {
|
||||
tmdb: "TMDB",
|
||||
injected: "注入",
|
||||
manual: "手动",
|
||||
covered_floor: "按已入库",
|
||||
covered_floor: "按已整理",
|
||||
previous: "沿用",
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user