fix(docs+web): "NN-NN im Dateinamen" war kein Bug — Navidromes fakePath
Der Pfad Rising Insane/DEATHRACE/01-02 - DEATHRACE.mp3 existiert so nicht
auf der Platte. Navidrome gibt über Subsonic standardmäßig nicht den
echten Pfad heraus, sondern baut ihn per fakePath() aus den Tags:
{AlbumArtist}/{Album}/{DD}-{TT} - {Titel}.{ext} — 01 ist die Disc, 02 die
Tracknummer. An der Künstlerstelle steht also kein kaputter Wert, dort
steht gar kein Künstler.
Known-Bug-Eintrag entsprechend widerlegt statt gelöscht, samt Hinweis auf
"Report Real Path" am Player novasonic — das ist die Wurzel der
Datei-Ratearbeit im Backend und damit auch des Fehlers "Metadaten springen
zurück". Das Backend nimmt einen absoluten Pfad bereits ohne Änderung.
Info-Dialog beschriftet das Feld jetzt als "Pfad (Navidrome)".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ac69d259d5
commit
4ee20de359
2 files changed
+21
-17
No files matched your search
+17
-16
@@ -826,22 +826,23 @@ Polish release: Android navigation and offline resilience, download accuracy for
|
|||||||
und ignoriert Akzente sowie Apostrophe (2.3). Ein Rest bleibt: steht derselbe Song unter einem
|
und ignoriert Akzente sowie Apostrophe (2.3). Ein Rest bleibt: steht derselbe Song unter einem
|
||||||
**deutlich anderen** Künstlernamen (etwa vor einer Namenskorrektur), wird er weiterhin nicht
|
**deutlich anderen** Künstlernamen (etwa vor einer Namenskorrektur), wird er weiterhin nicht
|
||||||
erkannt und erneut geladen.
|
erkannt und erneut geladen.
|
||||||
- **Backend (Dateinamen)** — Statt `{Tracknummer} - {Künstler} - {Titel}` entsteht gelegentlich
|
- ~~**Backend (Dateinamen)** — `NN-NN - {Titel}` statt `{Tracknummer} - {Künstler} - {Titel}`~~
|
||||||
ein Name der Form `NN-NN - {Titel}`, etwa
|
**Kein Bug — am 11.9.2026 widerlegt.** Der Pfad `Rising Insane/DEATHRACE/01-02 - DEATHRACE.mp3`
|
||||||
`Rising Insane/DEATHRACE/01-02 - DEATHRACE.mp3`: an der Stelle des **Künstlers** steht `01-02`,
|
steht so **nirgends auf der Platte**. Navidrome gibt über die Subsonic-API standardmäßig gar nicht
|
||||||
und die Tracknummer fehlt ganz. Der Ordner (`Künstler/Album`) stimmt dabei, es betrifft nur den
|
den echten Pfad heraus, sondern baut einen aus den Tags zusammen
|
||||||
Dateinamen. Gebaut wird er in [ytdlp.js](../backend/lib/ytdlp.js) als
|
([`fakePath()` in `server/subsonic/helpers.go`](https://github.com/navidrome/navidrome/blob/master/server/subsonic/helpers.go)):
|
||||||
`fileBase = {trackPrefix}{artist} - {title}` — das `01-02` muss also im **Künstlerfeld** der
|
`{AlbumArtist}/{Album}/{DD}-{TT} - {Titel}.{Endung}` — `01` ist die **Disc**, `02` die
|
||||||
Quelle gestanden haben; `trackPrefix` kann diese Form gar nicht erzeugen (`padStart(2,'0')` auf
|
**Tracknummer**. An der Stelle des Künstlers steht also nichts Kaputtes, dort steht überhaupt kein
|
||||||
eine Zahl). Dieselbe Form ist als Testfall festgehalten
|
Künstler. Der Info-Dialog zeigte diesen Pfad nur unbeschriftet als „Pfad" an (`s.path` aus
|
||||||
(`01-01 - Kingdom Hearts 2 - …`, [metadata.test.js:20](../backend/test/metadata.test.js)), dort
|
`getSong`), was wie ein falscher Dateiname aussah.
|
||||||
ausdrücklich als „garbage artist prefix" — die Dublettenprüfung kommt damit zurecht, der
|
**Folge fürs Backend:** dass Navidrome den echten Pfad verschweigt, ist die Wurzel der ganzen
|
||||||
Dateiname bleibt aber falsch.
|
Datei-Ratearbeit in `metadata.js` — und damit auch der „Metadaten springen zurück"-Fehler (2.3),
|
||||||
Nächster Schritt zur Eingrenzung: Tags der betroffenen Datei auslesen (`ffprobe -show_format`) und
|
bei dem die Suche nach Ähnlichkeit die falsche Kopie traf. Navidrome hat dafür einen Schalter:
|
||||||
klären, über welchen Weg sie kam (Album-Download, Einzeltrack oder Importer) — daraus ergibt sich,
|
**Einstellungen → Players → Zeile `novasonic` → „Report Real Path"**. Ist er an, liefert `getSong`
|
||||||
welche Quelle das Künstlerfeld mit `NN-NN` füllt. Sinnvolle Absicherung unabhängig davon: einen
|
den echten absoluten Pfad; das Backend nimmt den bereits ohne Codeänderung direkt
|
||||||
Künstlernamen, der nur aus Ziffern und Bindestrichen besteht, verwerfen und auf den Album-Künstler
|
([novasonic-server.js:1638](../backend/novasonic-server.js)), und das Raten entfällt. Es gibt zwei
|
||||||
zurückfallen, statt ihn in den Dateinamen zu übernehmen.
|
Player-Zeilen, weil Web/Android als `NovaSonic` und das Backend als `novasonic` anfragen —
|
||||||
|
entscheidend ist die des **Backends**.
|
||||||
- **Backend (download)** — Der Variantenfilter nutzt `\b`-Wortgrenzen, und die zählen den Unterstrich
|
- **Backend (download)** — Der Variantenfilter nutzt `\b`-Wortgrenzen, und die zählen den Unterstrich
|
||||||
als Wortzeichen. Titel wie `song_instrumental_cover` oder `Easy_live` rutschen deshalb durch,
|
als Wortzeichen. Titel wie `song_instrumental_cover` oder `Easy_live` rutschen deshalb durch,
|
||||||
während `Easy (Instrumental)` korrekt abgewiesen wird.
|
während `Easy (Instrumental)` korrekt abgewiesen wird.
|
||||||
|
|||||||
+4
-1
@@ -38,7 +38,10 @@ function _renderInfoModal(s) {
|
|||||||
['Bitrate', s.bitRate ? s.bitRate+' kbps' : null],
|
['Bitrate', s.bitRate ? s.bitRate+' kbps' : null],
|
||||||
['Format', s.suffix?.toUpperCase()],
|
['Format', s.suffix?.toUpperCase()],
|
||||||
['Dateigröße', s.size ? Math.round(s.size/1024/1024*10)/10+' MB' : null],
|
['Dateigröße', s.size ? Math.round(s.size/1024/1024*10)/10+' MB' : null],
|
||||||
['Pfad', s.path],
|
// Navidrome gibt den echten Pfad nur heraus, wenn beim Player "Report Real Path" gesetzt ist;
|
||||||
|
// sonst baut es ihn per fakePath() aus den Tags: AlbumArtist/Album/DD-TT - Titel.ext. Das sah
|
||||||
|
// unbeschriftet nach einem kaputten Dateinamen aus, deshalb die Quellenangabe im Label.
|
||||||
|
['Pfad (Navidrome)', s.path],
|
||||||
['Plays', s.playCount],
|
['Plays', s.playCount],
|
||||||
].filter(([,v]) => v!=null && v!=='' && v!==undefined);
|
].filter(([,v]) => v!=null && v!=='' && v!==undefined);
|
||||||
document.getElementById('info-rows').innerHTML = fields.map(([l,v]) =>
|
document.getElementById('info-rows').innerHTML = fields.map(([l,v]) =>
|
||||||
|
|||||||
Reference in new issue
Block a user