fix: romaji display race on reload; iTunes search uses original Japanese name
- Await romaji overrides before restoring player bar so disp* functions have the cache ready on first render after reload - dispArtistParts now carries originalName so artist clicks pass the Japanese name to Navidrome/iTunes search while displaying romaji Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
ccdcda74ec
commit
8704a17b4f
5 files changed
+10
-10
No files matched your search
+3
-3
@@ -178,11 +178,11 @@ export function dispArtistParts(s, parseArtistsFn) {
|
||||
const parts = parseArtistsFn(s);
|
||||
if (!S.cfg.showRomaji) return parts;
|
||||
const ov = getRomajiOverrides();
|
||||
if (s.artist && ov[s.artist]) return [{ name: ov[s.artist], id: parts[0]?.id || '' }];
|
||||
if (s.albumArtist && ov[s.albumArtist]) return [{ name: ov[s.albumArtist], 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 || '' }];
|
||||
const info = romajiLookup(s.id);
|
||||
if (!info?.artistRomaji) return parts;
|
||||
return [{ name: info.artistRomaji, id: parts[0]?.id || '' }];
|
||||
return [{ name: info.artistRomaji, originalName: s.artist || parts[0]?.name || '', id: parts[0]?.id || '' }];
|
||||
}
|
||||
|
||||
export async function romajiConvert(texts) {
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ export function makeSongItem(s, idx, list, { noArtistLink = false } = {}) {
|
||||
const artistHtml = artistParts.length
|
||||
? artistParts.map(a => noArtistLink
|
||||
? `<span style="color:var(--text2)">${esc(a.name)}</span>`
|
||||
: `<span class="song-link" onclick="event.stopPropagation();s_goArtist(event,'${esc(a.name)}','${a.id||''}')">${esc(a.name)}</span>`
|
||||
: `<span class="song-link" onclick="event.stopPropagation();s_goArtist(event,'${esc(a.originalName||a.name)}','${a.id||''}')">${esc(a.name)}</span>`
|
||||
).join('<span style="color:var(--text3)"> • </span>')
|
||||
: '';
|
||||
|
||||
|
||||
+3
-3
@@ -96,8 +96,7 @@ async function startApp() {
|
||||
if (bnav) bnav.style.display = '';
|
||||
absLoadSettingsLibraries();
|
||||
}
|
||||
loadRomajiOverrides().catch(() => {}); // fire-and-forget — cache for dispArtist/dispAlbum/dispTitle
|
||||
if (S.cfg.showRomaji) fetchRomajiIndex().catch(() => {}); // fire-and-forget — don't block navigation
|
||||
if (S.cfg.showRomaji) fetchRomajiIndex().catch(() => {});
|
||||
if(_navLoad() && S._navCursor >= 0 && S._navStack[S._navCursor]) {
|
||||
const last = S._navStack[S._navCursor];
|
||||
S._navJumping = true;
|
||||
@@ -107,7 +106,8 @@ async function startApp() {
|
||||
navigate('home');
|
||||
}
|
||||
initNotifBell();
|
||||
_restoreLastPlayed();
|
||||
// Wait for overrides before restoring player bar so disp* functions have the cache ready
|
||||
loadRomajiOverrides().catch(() => {}).then(() => { _restoreLastPlayed(); });
|
||||
if(localStorage.getItem('ns_radio')==='1') { S.radioMode=true; _applyRadioBtn(); }
|
||||
const sr = localStorage.getItem('ns_repeat');
|
||||
if(sr === 'all' || sr === 'one') S.repeat = sr;
|
||||
|
||||
+2
-2
@@ -447,7 +447,7 @@ export function updatePlayerUI(s, _skipMediaSession = false) {
|
||||
document.getElementById('player-title').textContent = dispTitle(s);
|
||||
const artistParts = dispArtistParts(s, parseArtists);
|
||||
document.getElementById('player-artist-name').innerHTML = artistParts.length
|
||||
? artistParts.map(a => `<span style="cursor:pointer" onclick="s_goArtist(event,'${esc(a.name)}','${a.id||''}')">${esc(a.name)}</span>`)
|
||||
? artistParts.map(a => `<span style="cursor:pointer" onclick="s_goArtist(event,'${esc(a.originalName||a.name)}','${a.id||''}')">${esc(a.name)}</span>`)
|
||||
.join('<span style="color:var(--text3)"> • </span>')
|
||||
: '—';
|
||||
document.getElementById('player-album-name').textContent = dispAlbum(s);
|
||||
@@ -569,7 +569,7 @@ export function _syncNpDirect(s) {
|
||||
if(an) {
|
||||
const parts = dispArtistParts(s, parseArtists);
|
||||
an.innerHTML = parts.length
|
||||
? parts.map(a => `<span style="cursor:pointer" onclick="closeNowPlaying();s_goArtist(event,'${esc(a.name)}','${a.id||''}')">${esc(a.name)}</span>`)
|
||||
? parts.map(a => `<span style="cursor:pointer" onclick="closeNowPlaying();s_goArtist(event,'${esc(a.originalName||a.name)}','${a.id||''}')">${esc(a.name)}</span>`)
|
||||
.join('<span style="opacity:.5"> • </span>')
|
||||
: '—';
|
||||
}
|
||||
|
||||
+1
-1
@@ -653,7 +653,7 @@ export async function loadAlbumDetail(album) {
|
||||
document.getElementById('album-detail-name').textContent = album.name;
|
||||
const artistEl = document.getElementById('album-detail-artist');
|
||||
artistEl.innerHTML = parseArtists(album)
|
||||
.map(a => `<span class="song-link" onclick="event.stopPropagation();s_goArtist(event,'${esc(a.name)}','${esc(a.id||'')}')">${esc(a.name)}</span>`)
|
||||
.map(a => `<span class="song-link" onclick="event.stopPropagation();s_goArtist(event,'${esc(a.originalName||a.name)}','${esc(a.id||'')}')">${esc(a.name)}</span>`)
|
||||
.join('<span style="color:var(--text3)"> • </span>') || '';
|
||||
const cw = document.getElementById('album-cover-wrap');
|
||||
const cv = coverUrl(album.coverArt, 512);
|
||||
|
||||
Reference in new issue
Block a user