boxwart: Start wartet nie auf die Update-Suche im Netz, Verlauf am Handy kompakter
Ampel / ampel (push) Failing after 20s
Ampel / ampel (push) Failing after 20s
Nach einem MC2-Neustart hing /api/start, bis GitHub, apt und Hugging Face geantwortet hatten. Jetzt kommt der letzte Stand sofort, frisch geholt wird im Hintergrund; bis dahin steht "wird geprueft" da. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ed6948429a
commit
4b226d5d22
@@ -14,7 +14,12 @@ import type {
|
||||
const takt = (ms: number) => () => (stromVerbunden() ? ms * 5 : ms)
|
||||
|
||||
export const useStart = () =>
|
||||
useQuery({ queryKey: ["start"], queryFn: () => api<Start>("/api/start"), refetchInterval: takt(20_000) })
|
||||
useQuery({
|
||||
queryKey: ["start"],
|
||||
queryFn: () => api<Start>("/api/start"),
|
||||
// Sucht MC2 gerade noch nach Updates (nach einem Neustart), bald wieder nachsehen.
|
||||
refetchInterval: (q) => (q.state.data && !q.state.data.updates.gelesen ? 4000 : takt(20_000)()),
|
||||
})
|
||||
|
||||
export const useModelle = () =>
|
||||
useQuery({
|
||||
|
||||
@@ -67,6 +67,8 @@ export interface Start {
|
||||
bausteine: { id: string; name: string; neu: string }[]
|
||||
modelle: { role: string; title: string; repo: string }[]
|
||||
festgehalten: Festgehalten[]
|
||||
/** false, solange MC2 nach einem Neustart noch im Netz nach Updates sucht. */
|
||||
gelesen: boolean
|
||||
}
|
||||
flugplan: { gelaufen: FlugplanEintrag[]; geplant: FlugplanEintrag[] }
|
||||
}
|
||||
|
||||
@@ -19,9 +19,10 @@ const BAUSTEINE = [
|
||||
{ id: "hermes", name: "Hermes" },
|
||||
] as const
|
||||
|
||||
function BausteinZeile({ id, name, hatUpdate, fest, onStart, onFreigeben, laeuftGerade }: {
|
||||
function BausteinZeile({ id, name, gelesen, hatUpdate, fest, onStart, onFreigeben, laeuftGerade }: {
|
||||
id: string
|
||||
name: string
|
||||
gelesen: boolean
|
||||
hatUpdate: boolean
|
||||
fest: Festgehalten | undefined
|
||||
onStart: () => void
|
||||
@@ -31,7 +32,9 @@ function BausteinZeile({ id, name, hatUpdate, fest, onStart, onFreigeben, laeuft
|
||||
const { data, isPending } = useUpdateDetails(id)
|
||||
const v = versionen(id, data)
|
||||
const neu = hatUpdate ? v.neu ?? "neu" : null
|
||||
const was = !hatUpdate
|
||||
const was = !gelesen
|
||||
? "Wird gerade geprüft …"
|
||||
: !hatUpdate
|
||||
? "Aktuell."
|
||||
: data?.summary?.trim() || (id === "os" && data?.count ? "Paketliste unten in den Details." : isPending ? "Wird gelesen …" : "")
|
||||
const neuText = neu ? <span className="text-cyan">{neu}</span> : <span className="text-text-3">–</span>
|
||||
@@ -86,13 +89,13 @@ const PUNKT: Record<UpdateLauf["stufe"], string> = {
|
||||
function LaufEintrag({ lauf }: { lauf: UpdateLauf }) {
|
||||
return (
|
||||
<li className="flex flex-col gap-2 border-t border-linie py-3">
|
||||
<div className="grid grid-cols-[112px_minmax(0,1fr)_auto] items-center gap-3">
|
||||
<div className="grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 md:grid-cols-[112px_minmax(0,1fr)_auto]">
|
||||
<span className="ziffern text-sm text-text-3">{flugplanZeit(lauf.start)}</span>
|
||||
<span className="min-w-0 text-[15px]">{lauf.anlass}</span>
|
||||
<Chip art={LAUF_ART[lauf.stufe]}>{lauf.titel}</Chip>
|
||||
</div>
|
||||
{lauf.stufe !== "grau" && lauf.zeilen.length > 0 && (
|
||||
<ul className="m-0 flex list-none flex-col gap-1 p-0 sm:pl-[124px]">
|
||||
<ul className="m-0 flex list-none flex-col gap-1 p-0 md:pl-[124px]">
|
||||
{lauf.zeilen.map((z) => (
|
||||
<li key={`${z.baustein}-${z.text}`} className="flex items-baseline gap-2 text-sm leading-snug text-text-2">
|
||||
<span aria-hidden className={cn("size-1.5 shrink-0 -translate-y-px rounded-full", PUNKT[z.stufe])} />
|
||||
@@ -182,6 +185,7 @@ export function UpdatesSeite() {
|
||||
key={b.id}
|
||||
id={b.id}
|
||||
name={b.name}
|
||||
gelesen={start.data?.updates.gelesen ?? false}
|
||||
hatUpdate={mitUpdate.has(b.id)}
|
||||
fest={festgehalten.get(b.id)}
|
||||
laeuftGerade={laeuft}
|
||||
|
||||
Reference in New Issue
Block a user