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);
|
const parts = parseArtistsFn(s);
|
||||||
if (!S.cfg.showRomaji) return parts;
|
if (!S.cfg.showRomaji) return parts;
|
||||||
const ov = getRomajiOverrides();
|
const ov = getRomajiOverrides();
|
||||||
if (s.artist && ov[s.artist]) return [{ name: ov[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], 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);
|
const info = romajiLookup(s.id);
|
||||||
if (!info?.artistRomaji) return parts;
|
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) {
|
export async function romajiConvert(texts) {
|
||||||
|
|||||||
+1
-1
@@ -45,7 +45,7 @@ export function makeSongItem(s, idx, list, { noArtistLink = false } = {}) {
|
|||||||
const artistHtml = artistParts.length
|
const artistHtml = artistParts.length
|
||||||
? artistParts.map(a => noArtistLink
|
? artistParts.map(a => noArtistLink
|
||||||
? `<span style="color:var(--text2)">${esc(a.name)}</span>`
|
? `<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>')
|
).join('<span style="color:var(--text3)"> • </span>')
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -96,8 +96,7 @@ async function startApp() {
|
|||||||
if (bnav) bnav.style.display = '';
|
if (bnav) bnav.style.display = '';
|
||||||
absLoadSettingsLibraries();
|
absLoadSettingsLibraries();
|
||||||
}
|
}
|
||||||
loadRomajiOverrides().catch(() => {}); // fire-and-forget — cache for dispArtist/dispAlbum/dispTitle
|
if (S.cfg.showRomaji) fetchRomajiIndex().catch(() => {});
|
||||||
if (S.cfg.showRomaji) fetchRomajiIndex().catch(() => {}); // fire-and-forget — don't block navigation
|
|
||||||
if(_navLoad() && S._navCursor >= 0 && S._navStack[S._navCursor]) {
|
if(_navLoad() && S._navCursor >= 0 && S._navStack[S._navCursor]) {
|
||||||
const last = S._navStack[S._navCursor];
|
const last = S._navStack[S._navCursor];
|
||||||
S._navJumping = true;
|
S._navJumping = true;
|
||||||
@@ -107,7 +106,8 @@ async function startApp() {
|
|||||||
navigate('home');
|
navigate('home');
|
||||||
}
|
}
|
||||||
initNotifBell();
|
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(); }
|
if(localStorage.getItem('ns_radio')==='1') { S.radioMode=true; _applyRadioBtn(); }
|
||||||
const sr = localStorage.getItem('ns_repeat');
|
const sr = localStorage.getItem('ns_repeat');
|
||||||
if(sr === 'all' || sr === 'one') S.repeat = sr;
|
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);
|
document.getElementById('player-title').textContent = dispTitle(s);
|
||||||
const artistParts = dispArtistParts(s, parseArtists);
|
const artistParts = dispArtistParts(s, parseArtists);
|
||||||
document.getElementById('player-artist-name').innerHTML = artistParts.length
|
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>')
|
.join('<span style="color:var(--text3)"> • </span>')
|
||||||
: '—';
|
: '—';
|
||||||
document.getElementById('player-album-name').textContent = dispAlbum(s);
|
document.getElementById('player-album-name').textContent = dispAlbum(s);
|
||||||
@@ -569,7 +569,7 @@ export function _syncNpDirect(s) {
|
|||||||
if(an) {
|
if(an) {
|
||||||
const parts = dispArtistParts(s, parseArtists);
|
const parts = dispArtistParts(s, parseArtists);
|
||||||
an.innerHTML = parts.length
|
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>')
|
.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;
|
document.getElementById('album-detail-name').textContent = album.name;
|
||||||
const artistEl = document.getElementById('album-detail-artist');
|
const artistEl = document.getElementById('album-detail-artist');
|
||||||
artistEl.innerHTML = parseArtists(album)
|
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>') || '';
|
.join('<span style="color:var(--text3)"> • </span>') || '';
|
||||||
const cw = document.getElementById('album-cover-wrap');
|
const cw = document.getElementById('album-cover-wrap');
|
||||||
const cv = coverUrl(album.coverArt, 512);
|
const cv = coverUrl(album.coverArt, 512);
|
||||||
|
|||||||
Reference in new issue
Block a user