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:
@@ -4,7 +4,7 @@ import { api } from '../lib/api'
|
||||
import { Modal } from './ui/Modal'
|
||||
import { Button } from './ui/Button'
|
||||
import { Input, Select } from './ui/Input'
|
||||
import { automatikWarnung, externWarnung, sprachName } from '../lib/encoder'
|
||||
import { automatikWarnung, externWarnung, freigabenAusMapping, sprachName } from '../lib/encoder'
|
||||
|
||||
interface TargetConfig {
|
||||
id: string
|
||||
@@ -244,6 +244,20 @@ export default function RipTargetModal({ isOpen, initialType, discTitle, deviceI
|
||||
// erreicht (Punkt 6 des Savepoints v3.16). Am 26.07.2026 fiel genau das erst
|
||||
// NACH dem Rip auf, weil nur der Worker selbst prüfte.
|
||||
const gewaehlterWorker = workers.find(w => w.node === encoderNode)
|
||||
/*
|
||||
* Ein-Klick-Abhilfe: dasselbe Ziel, aber auf der Freigabe, die der gewählte
|
||||
* Worker erreicht. Aus /app/media/movies wird /app/media/<freigabe>/movies.
|
||||
*
|
||||
* Nur wenn es überhaupt eine Freigabe gibt und das Ziel noch nicht darauf
|
||||
* liegt — sonst stünde ein Knopf da, der nichts tut.
|
||||
*/
|
||||
const zielAufFreigabe = (() => {
|
||||
const freigabe = freigabenAusMapping(gewaehlterWorker?.info?.pfad_map)[0]
|
||||
if (!freigabe || !zielPfad) return ''
|
||||
const unterordner = zielPfad.split('/').filter(Boolean).pop() || ''
|
||||
const neu = `/app/media/${freigabe}/${unterordner}`
|
||||
return neu === zielPfad ? '' : neu
|
||||
})()
|
||||
const pfadWarnung = selectedType === 'music'
|
||||
? null
|
||||
: encoderNode
|
||||
@@ -411,6 +425,21 @@ export default function RipTargetModal({ isOpen, initialType, discTitle, deviceI
|
||||
<div className="text-xs p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 text-amber-700 dark:text-amber-300">
|
||||
<strong>⚠️ Dieser Encoder kann so nicht arbeiten.</strong>
|
||||
<p className="mt-1">{pfadWarnung}</p>
|
||||
{/* Ein Knopf statt einer Wegbeschreibung: Er legt das Ziel NUR FÜR
|
||||
DIESEN RIP auf die Freigabe, die der Worker erreicht — ohne die
|
||||
globale Ablage anzufassen. „Geh in die Einstellungen" mitten im
|
||||
Dialog ist lästig, und wer den Rip jetzt starten will, will
|
||||
jetzt eine Lösung. */}
|
||||
{zielAufFreigabe && (
|
||||
<Button
|
||||
variant="secondary"
|
||||
size="sm"
|
||||
className="mt-2"
|
||||
onClick={() => { setCustomPath(zielAufFreigabe); setBrowserOffen(false) }}
|
||||
>
|
||||
Ziel für diesen Rip auf die Freigabe legen
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user