change(backend): nur noch der erste Kuenstler im Dateinamen
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8d25bf0404
commit
073593d963
5 files changed
+84
-6
No files matched your search
+14
-1
@@ -6,6 +6,19 @@ function sanitize(s) {
|
||||
return (s || 'Unknown').replace(/[\\/:*?"<>|]/g, '_').trim().slice(0, 100);
|
||||
}
|
||||
|
||||
// Welcher Kuenstler in den DATEINAMEN gehoert. Bisher stand dort die vollstaendige Gaesteliste
|
||||
// ("K_DA,Madison Beer,i-dle,Lexie Liu,Jaira Burns,Seraphine,League of Legends"). Das ist nirgends
|
||||
// ueblich — Picard, beets und Lidarr schreiben hoechstens einen Kuenstler in den Namen —, und es
|
||||
// hatte zwei handfeste Nachteile: sanitize() schneidet bei 100 Zeichen hart ab, also mitten im
|
||||
// letzten Namen, und mit dem Dateisystemlimit von 255 Byte wird es bei mehrbytigen Namen eng.
|
||||
// Die vollstaendige Liste steht ohnehin im artist-Tag, und nur den liest Navidrome.
|
||||
// Genommen wird der ERSTE Kuenstler — bei gemischten Alben der des Titels, nicht der des Albums,
|
||||
// damit ein Soundtrack-Titel im Namen weiterhin seinen eigenen Interpreten traegt.
|
||||
function dateinamensKuenstler(artist, fallback) {
|
||||
const erster = (s) => String(s || '').split(/[;,]|\s+&\s+/)[0].trim();
|
||||
return erster(artist) || erster(fallback) || '';
|
||||
}
|
||||
|
||||
function navidromeArtist(name) {
|
||||
if (!name) return name;
|
||||
return name
|
||||
@@ -202,7 +215,7 @@ async function fetchLyrics(artist, title, album) {
|
||||
// fetchAlbumTracks, searchAlbumTracks and fetchArtistAlbums.
|
||||
|
||||
module.exports = {
|
||||
sanitize, navidromeArtist,
|
||||
sanitize, navidromeArtist, dateinamensKuenstler,
|
||||
downloadArtwork, findExistingTrack,
|
||||
normStem, findFileByStem, albumDirFromTags,
|
||||
};
|
||||
@@ -4,7 +4,7 @@ const fs = require('fs');
|
||||
const CONFIG = require('./config');
|
||||
const { log } = require('./jobs');
|
||||
const {
|
||||
sanitize, navidromeArtist,
|
||||
sanitize, navidromeArtist, dateinamensKuenstler,
|
||||
downloadArtwork, findExistingTrack,
|
||||
} = require('./metadata');
|
||||
const { romajiForStorage, isTokenizerReady } = require('./romaji');
|
||||
@@ -140,8 +140,9 @@ async function downloadTrack({ jobId, artist, rawArtist, albumArtist, title, alb
|
||||
|
||||
const safeTitle = sanitize(cleanTitle);
|
||||
const trackPrefix = trackNum ? String(trackNum).padStart(2, '0') + ' - ' : '';
|
||||
// Filename format: "{01 - }Artist1, Artist2 - Title.ext"
|
||||
const safeArtistForFile = sanitize((artist || '').replace(/;/g, ','));
|
||||
// Filename format: "{01 - }Artist - Title.ext" — nur der erste Kuenstler, siehe
|
||||
// dateinamensKuenstler() in lib/metadata.js. Die volle Liste steht im artist-Tag.
|
||||
const safeArtistForFile = sanitize(dateinamensKuenstler(artist, mainArtist));
|
||||
const fileBase = `${trackPrefix}${safeArtistForFile} - ${safeTitle}`;
|
||||
|
||||
// Dublettenpruefung: findExistingTrack durchsucht NUR den Ordner des uebergebenen Kuenstlers.
|
||||
|
||||
Reference in new issue
Block a user