import type { TFunction } from "i18next"; import type { JobResult } from "./api"; import { formatNumber } from "./format"; import { vocabKey } from "./vocab"; /** A scheduler job's result in the reader's language (E30): "új videó: 3 · sikertelen: 0". The server * stored "new=3, failed=0" — English keys, a Python dict repr for a nested phase. A count's key is * named from `scheduler.result`, a `skipped` / `reason` word from `scheduler.skip`; an unnamed key or * word shows as it is, and an `error` stays the upstream's own text (it is diagnostic). */ export function jobResultText(t: TFunction, result: JobResult): string { return Object.entries(result) .map(([key, value]) => { const label = t(`scheduler.result.${key}`, { defaultValue: key.replace(/_/g, " ") }); if (typeof value === "number") return `${label}: ${formatNumber(value)}`; if (typeof value === "string") return key === "error" ? `${label}: ${value}` : `${label}: ${t(`scheduler.skip.${vocabKey(value)}`, { defaultValue: value })}`; return `${label} (${jobResultText(t, value)})`; }) .join(" · "); }