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( listed?: T | null, detailed?: T | null, ): T | null { const source = detailed || listed || null; return source && isQuickCreateBusy(source) ? source : null; } export function withQuickCreateStatus( 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 */ } }