diff --git a/src/main.js b/src/main.js index 0d68e82..8037230 100644 --- a/src/main.js +++ b/src/main.js @@ -11,7 +11,7 @@ import { npToggleStar, updateMediaSession, } from './player.js'; import { - navigate, _navGoBack, _navLoad, loadHomeData, onLocalSearch, onMobileSearch, + navigate, _navGoBack, _navLoad, onLocalSearch, onMobileSearch, onGlobalSearch, s_goArtist, s_goAlbum, playerBarGoArtist, playerBarGoAlbum, searchSimilarArtist, searchAndPreview, loadItunesAlbum, expandArtistBio, loadRandom, @@ -81,7 +81,6 @@ async function startApp() { } else { navigate('home'); } - loadHomeData(); initNotifBell(); _restoreLastPlayed(); if(localStorage.getItem('ns_radio')==='1') { S.radioMode=true; _applyRadioBtn(); } diff --git a/src/player.js b/src/player.js index e764891..e1eda95 100644 --- a/src/player.js +++ b/src/player.js @@ -37,7 +37,9 @@ export function updatePlayerUI(s) { document.getElementById('player-album-name').textContent = s.album || ''; const art = document.getElementById('player-art'); const cv = coverUrl(s.coverArt, 100); - art.innerHTML = cv ? `` : '
♪
'; + const existingImg = art.querySelector('img'); + if (cv && existingImg) existingImg.src = cv; + else art.innerHTML = cv ? `` : '
♪
'; updateStarBtn(); document.title = `${s.title} — NovaSonic`; updateMediaSession(s); @@ -60,7 +62,11 @@ export function _syncNpDirect(s) { const cv = coverUrl(s.coverArt, 400); const cover = document.getElementById('np-cover'); const bg = document.getElementById('np-bg'); - if(cover) cover.innerHTML = cv ? `` : '
♪
'; + if (cover) { + const existingImg = cover.querySelector('img'); + if (cv && existingImg) existingImg.src = cv; + else if (cover) cover.innerHTML = cv ? `` : '
♪
'; + } if(bg) bg.style.backgroundImage = cv ? `url('${cv}')` : 'none'; const t = document.getElementById('np-title'); if(t) t.textContent = s.title || '—'; const an = document.getElementById('np-artist-name'); @@ -285,10 +291,23 @@ export function npToggleStar() { } // ─── QUEUE PANEL ─── +let _renderedQueueKey = ''; + export function renderQueue() { const el = document.getElementById('queue-list'); + if (!el) return; + const queueKey = S.queue.map(s => s.id).join(','); + + if (queueKey === _renderedQueueKey && el.children.length === S.queue.length) { + // Queue unchanged — only update active class in-place (no image reload) + el.querySelectorAll('.queue-item').forEach((item, i) => item.classList.toggle('active', i === S.qIdx)); + el.querySelector('.active')?.scrollIntoView({ block: 'nearest' }); + return; + } + + _renderedQueueKey = queueKey; el.innerHTML = ''; - if(!S.queue.length) { el.innerHTML='
🎵

Leer

'; return; } + if (!S.queue.length) { el.innerHTML = '
🎵

Leer

'; return; } S.queue.forEach((s, i) => { const item = document.createElement('div'); item.className = 'queue-item' + (i === S.qIdx ? ' active' : ''); diff --git a/src/views.js b/src/views.js index 35d0ad5..9443893 100644 --- a/src/views.js +++ b/src/views.js @@ -36,6 +36,7 @@ export function navigate(page, data=null) { if(['discover','new-releases','recommendations','random','spotify-importer'].includes(page)) switchNavMode('discover'); else if(['home','artists','albums','starred','playlists'].includes(page)) switchNavMode('library'); + if(page==='home') loadHomeData(); if(page==='artists' && !document.getElementById('artists-grid').children.length) loadArtists(); if(page==='albums' && !document.getElementById('albums-grid').children.length) loadAlbums(); if(page==='starred') loadStarred();