fix(ui): die Pfad-Warnung sagt jetzt, was zu tun ist - und bietet einen Knopf
Ampel / ampel (push) Successful in 29s
Ampel / ampel (push) Successful in 29s
Commander: "Das ist ja quatsch. Mein PC hat das Ziel als Worker direkt auf dem
PC eingebunden."
Nachgemessen: Die Warnung hatte SACHLICH recht, war aber unbrauchbar. Sein PC hat
die Freigabe wirklich als Netzlaufwerk (X:) gemountet - nur lag das
ARBEITSVERZEICHNIS darauf und die ABLAGE nicht. Das Ziel war weiter
/app/media/movies, also die VM-Platte, und dorthin kommt sein PC nicht. Beleg aus
der Worker-Meldung:
pfad_map = /app/media/rippy=\192.168.178.62\rippy
Ziel = /app/media/movies <- nicht abgedeckt, richtig gewarnt
Die alte Meldung nannte den Container-Pfad und die Mapping-Zeichenkette - also
genau die zwei Dinge, die ein Nicht-Entwickler nicht deuten kann. Jetzt steht der
Handgriff drin, mit dem NAMEN der Freigabe, die dieser Worker wirklich erreicht
("Einstellungen -> Ripping -> Ablage auf 'rippy' stellen").
Dazu ein Knopf, der das Ziel NUR FUER DIESEN RIP auf die Freigabe legt
(/app/media/movies -> /app/media/rippy/movies), ohne die globale Ablage
anzufassen. Wer den Rip jetzt starten will, will jetzt eine Loesung und keine
Wegbeschreibung.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b4a0dd551a
commit
a448ebc4de
@@ -100,6 +100,18 @@ export function pfadAbgedeckt(pfad: string, mapping: string): boolean {
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Namen der Speicherziele, die dieser Worker über sein Mapping erreicht.
|
||||
* Aus „/app/media/rippy=\\NAS\rippy" wird ["rippy"].
|
||||
*/
|
||||
export function freigabenAusMapping(mapping?: string): string[] {
|
||||
return (mapping || '').split(';')
|
||||
.map(p => p.split('=', 1)[0])
|
||||
.filter(Boolean)
|
||||
.map(p => p.replace(/^\/app\/media\//, ''))
|
||||
.filter(n => n && !n.includes('/'))
|
||||
}
|
||||
|
||||
/**
|
||||
* Warnt, BEVOR gerippt wird, wenn der gewählte Encoder die Pfade nicht
|
||||
* erreichen kann. null = alles in Ordnung (oder der Worker läuft im Container,
|
||||
@@ -128,14 +140,41 @@ export function externWarnung(
|
||||
+ 'von außen nicht erreichbar. Oben eine Netzwerk-Freigabe als '
|
||||
+ 'Arbeitsverzeichnis wählen.'
|
||||
}
|
||||
const fehlt: string[] = []
|
||||
if (!pfadAbgedeckt(arbeitsPfad, mapping)) fehlt.push(`Rohdaten (${arbeitsPfad})`)
|
||||
if (!pfadAbgedeckt(zielPfad, mapping)) fehlt.push(`Ziel (${zielPfad})`)
|
||||
if (fehlt.length === 0) return null
|
||||
return `„${worker.name}" erreicht ${fehlt.join(' und ')} nicht — seine `
|
||||
+ `Übersetzung deckt nur „${mapping}" ab. Beides muss auf einer Freigabe `
|
||||
+ 'liegen, die diese Maschine sieht, sonst scheitert die Kompression '
|
||||
+ '(die Rohdaten bleiben dabei erhalten).'
|
||||
const zielFehlt = !pfadAbgedeckt(zielPfad, mapping)
|
||||
const arbeitFehlt = !pfadAbgedeckt(arbeitsPfad, mapping)
|
||||
if (!zielFehlt && !arbeitFehlt) return null
|
||||
|
||||
/*
|
||||
* Die Meldung muss sagen, WAS ZU TUN IST — nicht nur, was klemmt.
|
||||
*
|
||||
* Commander-Rückmeldung 26.07.2026: „Das ist ja quatsch. Mein PC hat das Ziel
|
||||
* als Worker direkt auf dem PC eingebunden." Er hatte die Freigabe wirklich
|
||||
* als Netzlaufwerk gemountet — nur war das ARBEITSVERZEICHNIS darauf gelegt
|
||||
* und die ABLAGE nicht. Das Ziel lag weiter auf der VM-Platte
|
||||
* (/app/media/movies), und dorthin kommt sein PC nicht.
|
||||
*
|
||||
* Die alte Meldung war sachlich richtig und trotzdem unbrauchbar: Sie nannte
|
||||
* den Container-Pfad und die Mapping-Zeichenkette, also genau die zwei Dinge,
|
||||
* die ein Nicht-Entwickler nicht deuten kann. Jetzt steht der Handgriff drin,
|
||||
* inklusive des Namens der Freigabe, die dieser Worker wirklich erreicht.
|
||||
*/
|
||||
const freigabe = freigabenAusMapping(mapping)[0] || ''
|
||||
|
||||
const teile: string[] = []
|
||||
if (zielFehlt) {
|
||||
teile.push(`Die Ablage (${zielPfad}) liegt nicht auf der Freigabe.`)
|
||||
if (freigabe) {
|
||||
teile.push(`Abhilfe: Einstellungen → Ripping → „Ablage" auf `
|
||||
+ `„${freigabe}" stellen — das ist die Freigabe, die „${worker.name}" `
|
||||
+ 'wirklich erreicht.')
|
||||
}
|
||||
}
|
||||
if (arbeitFehlt) {
|
||||
teile.push(`Das Arbeitsverzeichnis (${arbeitsPfad || 'Container-Platte'}) `
|
||||
+ 'liegt nicht auf der Freigabe — oben umstellen.')
|
||||
}
|
||||
teile.push('Ohne das scheitert die Kompression (die Rohdaten bleiben erhalten).')
|
||||
return teile.join(' ')
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user