Merge branch 'main' into copy/c6
This commit is contained in:
commit
8a9cbaff6a
146 files changed
+949
-577
No files matched your search
@@ -1,4 +1,5 @@
|
||||
import { join } from "node:path";
|
||||
import { simplifiedChineseTagline } from "@umt/adapters";
|
||||
import {
|
||||
type AcquisitionPlan,
|
||||
type AcquisitionSlot,
|
||||
@@ -405,6 +406,7 @@ export function registerLibraryRoutes(app: ModuleApp, d: AoDeps) {
|
||||
finishedAt: r.finished_at ? new Date(r.finished_at).toISOString() : null,
|
||||
})),
|
||||
scrape: await latestEntityScrape(d, id),
|
||||
displayTagline: heroTagline(e!.metadata),
|
||||
};
|
||||
return detail;
|
||||
},
|
||||
@@ -642,3 +644,11 @@ export function registerLibraryRoutes(app: ModuleApp, d: AoDeps) {
|
||||
{ tag: TAG },
|
||||
);
|
||||
}
|
||||
|
||||
/** 详情页头部的标语:只显示简体中文(见 simplifiedChineseTagline);存储的标语与语言不变 */
|
||||
function heroTagline(metadata: unknown): string | null {
|
||||
const m = (metadata ?? {}) as Record<string, { value?: unknown; language?: string | null } | undefined>;
|
||||
const text = typeof m.tagline?.value === "string" ? m.tagline.value : null;
|
||||
const orig = typeof m.originalLanguage?.value === "string" ? m.originalLanguage.value : null;
|
||||
return simplifiedChineseTagline(text, m.tagline?.language ?? null, orig);
|
||||
}
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
fetchRichDetail,
|
||||
fetchRichSeason,
|
||||
type MetadataCandidate,
|
||||
simplifiedChineseTagline,
|
||||
TmdbError,
|
||||
type TmdbRichDetail,
|
||||
} from "@umt/adapters";
|
||||
@@ -453,7 +454,7 @@ export function registerSearchRoutes(app: ModuleApp, ctx: ServerContext, d: Sear
|
||||
out.title = rich.title || out.title;
|
||||
out.overview = rich.overview ?? out.overview;
|
||||
out.titleZh = rich.titleZh;
|
||||
out.tagline = rich.tagline;
|
||||
out.tagline = simplifiedChineseTagline(rich.tagline, rich.taglineLanguage, rich.originalLanguage);
|
||||
out.genres = rich.genres;
|
||||
out.voteAverage = rich.voteAverage;
|
||||
out.voteCount = rich.voteCount;
|
||||
|
||||
@@ -336,4 +336,32 @@ describe.skipIf(!hasPg)("LIBV-1 入库版本", () => {
|
||||
expect(response.body.data.downloads).toHaveLength(105);
|
||||
expect(response.body.data.droppedPlans).toHaveLength(51);
|
||||
});
|
||||
|
||||
it("作品详情头部标语只给简体中文(displayTagline);存储的 metadata.tagline 不变", async () => {
|
||||
const field = (value: unknown, language: string | null = null) => ({
|
||||
value,
|
||||
source: "tmdb",
|
||||
language,
|
||||
at: "2026-10-01T00:00:00.000Z",
|
||||
locked: false,
|
||||
});
|
||||
const cases: [string, string, string | null][] = [
|
||||
["我们注定要离开地球", "en", "我们注定要离开地球"],
|
||||
["我們註定要離開地球", "en", null],
|
||||
["Mankind was born on Earth.", "en", null],
|
||||
["我們註定要離開地球", "zh", "我們註定要離開地球"],
|
||||
];
|
||||
for (const [tagline, orig, want] of cases) {
|
||||
const entityId = await seedEntity(h.db, { kind: "movie", title: `标语 ${tagline}`, year: 2026 });
|
||||
await h.db
|
||||
.updateTable("media_entity")
|
||||
.set({ metadata: JSON.stringify({ tagline: field(tagline), originalLanguage: field(orig) }) })
|
||||
.where("id", "=", entityId)
|
||||
.execute();
|
||||
const r = await h.api("GET", `/library/${entityId}`);
|
||||
expect(r.status).toBe(200);
|
||||
expect(r.body.data.displayTagline).toBe(want);
|
||||
expect(r.body.data.entity.metadata.tagline.value).toBe(tagline);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -33,6 +33,7 @@ function detail(
|
||||
overview: null,
|
||||
overviewLanguage: null,
|
||||
tagline: null,
|
||||
taglineLanguage: null,
|
||||
year: null,
|
||||
releaseDate: null,
|
||||
lastAirDate: null,
|
||||
|
||||
@@ -68,6 +68,7 @@ const detail = (entityType: "movie" | "tv", externalId: string): TmdbRichDetail
|
||||
overview: null,
|
||||
overviewLanguage: null,
|
||||
tagline: null,
|
||||
taglineLanguage: null,
|
||||
year: 2022,
|
||||
releaseDate: null,
|
||||
lastAirDate: null,
|
||||
|
||||
Reference in new issue
Block a user