feat(canvas): 画布能力 - 完善 LibTV 导入与资源预览
This commit is contained in:
1 parent
4b9d510129
commit
d2a089f1ec
36 files changed
+1722
-68
No files matched your search
@@ -0,0 +1,36 @@
|
||||
const LIBTV_PROJECT_UUID_PATTERN = /^[a-f0-9]{32}$/i;
|
||||
const LIBTV_RESOURCE_HOST = "libtv-res.liblib.art";
|
||||
const LIBTV_PREVIEW_WIDTH = 960;
|
||||
|
||||
export function parseLibTVProjectUUID(value: string) {
|
||||
const trimmed = value.trim();
|
||||
if (!trimmed) return "";
|
||||
let candidate = trimmed;
|
||||
try {
|
||||
const parsed = new URL(trimmed);
|
||||
candidate = parsed.searchParams.get("projectId") || parsed.searchParams.get("uuid") || parsed.pathname.split("/").filter(Boolean).at(-1) || "";
|
||||
} catch {
|
||||
candidate = trimmed;
|
||||
}
|
||||
return LIBTV_PROJECT_UUID_PATTERN.test(candidate) ? candidate.toLowerCase() : "";
|
||||
}
|
||||
|
||||
export function formatLibTVBatchTime(value: string) {
|
||||
const date = new Date(value);
|
||||
if (Number.isNaN(date.getTime())) return "未知";
|
||||
const pad = (part: number) => String(part).padStart(2, "0");
|
||||
return `${date.getFullYear()}${pad(date.getMonth() + 1)}${pad(date.getDate())}${pad(date.getHours())}${pad(date.getMinutes())}`;
|
||||
}
|
||||
|
||||
export function buildLibTVImagePreviewUrl(rawUrl: string) {
|
||||
try {
|
||||
const url = new URL(rawUrl);
|
||||
if (url.protocol !== "https:" || url.hostname !== LIBTV_RESOURCE_HOST) return rawUrl;
|
||||
if (!url.searchParams.has("x-oss-process")) {
|
||||
url.searchParams.set("x-oss-process", `image/resize,w_${LIBTV_PREVIEW_WIDTH}`);
|
||||
}
|
||||
return url.toString();
|
||||
} catch {
|
||||
return rawUrl;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user