feat: use file sort tags (sortAlbum/sortArtist/sortName) as display override when romaji is on
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
961511b3d0
commit
25d80eb559
1 file changed
+10
-1
+10
-1
@@ -152,11 +152,14 @@ export function romajiLookup(id) { return _romajiMap?.get(String(id)) ?? null; }
|
|||||||
|
|
||||||
// Display helpers — return romaji when showRomaji is on and the song is in the index,
|
// Display helpers — return romaji when showRomaji is on and the song is in the index,
|
||||||
// otherwise fall back to the original Navidrome values.
|
// otherwise fall back to the original Navidrome values.
|
||||||
// Overrides (localStorage) always take priority over auto-converted index values.
|
// Priority: override list > file sort tag (OpenSubsonic) > auto-romaji index > original
|
||||||
|
const _isJp = (s) => /[ぁ-んァ-ン一-龯]/.test(s);
|
||||||
export function dispTitle(s) {
|
export function dispTitle(s) {
|
||||||
if (!S.cfg.showRomaji) return s.title || '';
|
if (!S.cfg.showRomaji) return s.title || '';
|
||||||
const ov = getRomajiOverrides();
|
const ov = getRomajiOverrides();
|
||||||
if (s.title && ov[s.title]) return ov[s.title];
|
if (s.title && ov[s.title]) return ov[s.title];
|
||||||
|
const st = s.sortName || s.titleSort;
|
||||||
|
if (st && !_isJp(st)) return st;
|
||||||
return romajiLookup(s.id)?.titleRomaji || s.title || '';
|
return romajiLookup(s.id)?.titleRomaji || s.title || '';
|
||||||
}
|
}
|
||||||
export function dispArtist(s) {
|
export function dispArtist(s) {
|
||||||
@@ -164,12 +167,16 @@ export function dispArtist(s) {
|
|||||||
const ov = getRomajiOverrides();
|
const ov = getRomajiOverrides();
|
||||||
if (s.artist && ov[s.artist]) return ov[s.artist];
|
if (s.artist && ov[s.artist]) return ov[s.artist];
|
||||||
if (s.albumArtist && ov[s.albumArtist]) return ov[s.albumArtist];
|
if (s.albumArtist && ov[s.albumArtist]) return ov[s.albumArtist];
|
||||||
|
const st = s.sortArtist || s.artistSort;
|
||||||
|
if (st && !_isJp(st)) return st;
|
||||||
return romajiLookup(s.id)?.artistRomaji || s.artist || '';
|
return romajiLookup(s.id)?.artistRomaji || s.artist || '';
|
||||||
}
|
}
|
||||||
export function dispAlbum(s) {
|
export function dispAlbum(s) {
|
||||||
if (!S.cfg.showRomaji) return s.album || '';
|
if (!S.cfg.showRomaji) return s.album || '';
|
||||||
const ov = getRomajiOverrides();
|
const ov = getRomajiOverrides();
|
||||||
if (s.album && ov[s.album]) return ov[s.album];
|
if (s.album && ov[s.album]) return ov[s.album];
|
||||||
|
const st = s.sortAlbum || s.albumSort;
|
||||||
|
if (st && !_isJp(st)) return st;
|
||||||
return romajiLookup(s.id)?.albumRomaji || s.album || '';
|
return romajiLookup(s.id)?.albumRomaji || s.album || '';
|
||||||
}
|
}
|
||||||
// Returns [{name, id}] like parseArtists but with romaji display names when showRomaji is on.
|
// Returns [{name, id}] like parseArtists but with romaji display names when showRomaji is on.
|
||||||
@@ -180,6 +187,8 @@ export function dispArtistParts(s, parseArtistsFn) {
|
|||||||
const ov = getRomajiOverrides();
|
const ov = getRomajiOverrides();
|
||||||
if (s.artist && ov[s.artist]) return [{ name: ov[s.artist], originalName: s.artist, id: parts[0]?.id || '' }];
|
if (s.artist && ov[s.artist]) return [{ name: ov[s.artist], originalName: s.artist, id: parts[0]?.id || '' }];
|
||||||
if (s.albumArtist && ov[s.albumArtist]) return [{ name: ov[s.albumArtist], originalName: s.albumArtist, id: parts[0]?.id || '' }];
|
if (s.albumArtist && ov[s.albumArtist]) return [{ name: ov[s.albumArtist], originalName: s.albumArtist, id: parts[0]?.id || '' }];
|
||||||
|
const st = s.sortArtist || s.artistSort;
|
||||||
|
if (st && !_isJp(st)) return [{ name: st, originalName: s.artist || parts[0]?.name || '', id: parts[0]?.id || '' }];
|
||||||
const info = romajiLookup(s.id);
|
const info = romajiLookup(s.id);
|
||||||
if (!info?.artistRomaji) return parts;
|
if (!info?.artistRomaji) return parts;
|
||||||
return [{ name: info.artistRomaji, originalName: s.artist || parts[0]?.name || '', id: parts[0]?.id || '' }];
|
return [{ name: info.artistRomaji, originalName: s.artist || parts[0]?.name || '', id: parts[0]?.id || '' }];
|
||||||
|
|||||||
Reference in new issue
Block a user