fix: romaji for album names + Japanese playlist track matching

- ytdlp.js + novasonic-server.js: apply romajiForStorage to album tag
  and folder/rename paths (was only applied to artist/title before)
- ui.js: _createNdPlaylist falls back to romaji index for Japanese titles
  since Navidrome search3 doesn't index Japanese text properly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Sonnet 4.6 committed 2026-05-25 00:36:16 +02:00
1 parent 88533b8835
commit 392da7e021
3 files changed
+23 -9

No files matched your search

+5 -4
View File
@@ -613,6 +613,7 @@ app.post('/api/edit-metadata', async (req, res) => {
const romajiArtist = normalArtist ? romajiForStorage(normalArtist) || normalArtist : normalArtist;
const romajiAlbumArtist = normalAlbumArtist ? romajiForStorage(normalAlbumArtist) || normalAlbumArtist : normalAlbumArtist;
const romajiTitle = title ? romajiForStorage(title) || title : title;
const romajiAlbum = album ? romajiForStorage(album) || album : album;
// Resolve file path from Navidrome
let filePath;
@@ -682,7 +683,7 @@ app.post('/api/edit-metadata', async (req, res) => {
if (romajiArtist) ffArgs.push('-metadata', `artist=${romajiArtist}`);
const resolvedAlbumArtist = romajiAlbumArtist || (romajiArtist ? romajiArtist.split(';')[0].trim() : null);
if (resolvedAlbumArtist) ffArgs.push('-metadata', `album_artist=${resolvedAlbumArtist}`);
if (album) ffArgs.push('-metadata', `album=${album}`);
if (romajiAlbum) ffArgs.push('-metadata', `album=${romajiAlbum}`);
if (year) ffArgs.push('-metadata', `date=${year}`);
if (trackNum) ffArgs.push('-metadata', `track=${totalTracks ? `${trackNum}/${totalTracks}` : String(trackNum)}`);
if (totalTracks) ffArgs.push('-metadata', `totaltracks=${String(totalTracks)}`);
@@ -724,7 +725,7 @@ app.post('/api/edit-metadata', async (req, res) => {
// 2. Move to new artist/album folder when albumArtist or album changed
const oldAlbumDir = path.dirname(currentFile);
const oldArtistDir = path.dirname(oldAlbumDir);
const newAlbumName = album ? sanitize(album) : path.basename(oldAlbumDir);
const newAlbumName = romajiAlbum ? sanitize(romajiAlbum) : path.basename(oldAlbumDir);
const newArtistName = romajiAlbumArtist ? sanitize(romajiAlbumArtist.split(/[,;&]/)[0].trim()) : path.basename(oldArtistDir);
const newDir = path.join(CONFIG.musicPath, newArtistName, newAlbumName);
@@ -746,9 +747,9 @@ app.post('/api/edit-metadata', async (req, res) => {
} catch {}
}
} catch (e) { console.error('[edit-metadata] move:', e.message); }
} else if (album && path.basename(oldAlbumDir) !== sanitize(album)) {
} else if (romajiAlbum && path.basename(oldAlbumDir) !== sanitize(romajiAlbum)) {
// Only album name changed (no artist move) — rename album folder in place
const renamedDir = path.join(oldArtistDir, sanitize(album));
const renamedDir = path.join(oldArtistDir, sanitize(romajiAlbum));
if (!fs.existsSync(renamedDir)) {
try { fs.renameSync(oldAlbumDir, renamedDir); }
catch (e) { console.error('[edit-metadata] folder rename:', e.message); }