56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
const QUICK_JOB_KEY = "airshelf:quick-create-job";
|
|
const QUICK_CREATE_SUFFIX = / · (?:极速成片|一键成片)$/;
|
|
|
|
export function hasQuickCreateSuffix(name?: string) {
|
|
return QUICK_CREATE_SUFFIX.test(name || "");
|
|
}
|
|
|
|
export function stripQuickCreateSuffix(name: string) {
|
|
return name.replace(QUICK_CREATE_SUFFIX, "");
|
|
}
|
|
|
|
export function isQuickCreateBusy(project?: { quick_create_status?: string } | null) {
|
|
return project?.quick_create_status === "queued" || project?.quick_create_status === "running";
|
|
}
|
|
|
|
export function lockedQuickCreateProject<T extends { quick_create_status?: string }>(
|
|
listed?: T | null,
|
|
detailed?: T | null,
|
|
): T | null {
|
|
const source = detailed || listed || null;
|
|
return source && isQuickCreateBusy(source) ? source : null;
|
|
}
|
|
|
|
export function withQuickCreateStatus<T extends { id: string; quick_create_status?: string }>(
|
|
items: T[],
|
|
projectId: string,
|
|
status: string,
|
|
): T[] {
|
|
return items.map((item) => (item.id === projectId ? { ...item, quick_create_status: status } : item));
|
|
}
|
|
|
|
export function readQuickCreateJobId() {
|
|
try {
|
|
return localStorage.getItem(QUICK_JOB_KEY) || "";
|
|
} catch {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
export function rememberQuickCreateJob(jobId?: string) {
|
|
if (!jobId) return;
|
|
try {
|
|
localStorage.setItem(QUICK_JOB_KEY, jobId);
|
|
} catch {
|
|
/* ignore */
|
|
}
|
|
}
|
|
|
|
export function forgetQuickCreateJob() {
|
|
try {
|
|
localStorage.removeItem(QUICK_JOB_KEY);
|
|
} catch {
|
|
/* ignore */
|
|
}
|
|
}
|