fix: startup speed, image retry, shuffle random start, genres, search badge, playlist refresh
- Remove await on fetchRomajiIndex() at startup so navigation is not blocked by the romaji index network call (was the main cause of 30s Android startup) - Add window._imgRetry() with 3 retries (1.5s/3s/4.5s backoff) for all card/ song/cover images that fail to load; falls back to emoji only after exhausting retries - playQueue with HAS_BRIDGE + shuffle: pick a random startIdx so album/playlist playback starts at a random track, not always index 0 - Reduce mobile genre grid limit from 12 to 6 - Fix "Global Suche" badge text: was "iTunes Store + Local", now "iTunes Store" - deleteSong: always refresh loadPlaylists() unconditionally (not just when page is active) with a 3s delay so song counts are current when navigating back Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
6dc47a2c77
commit
1f1a5cd3a6
6 files changed
+26
-13
No files matched your search
+4
-4
@@ -180,7 +180,7 @@ function _genreColor(name) {
|
||||
|
||||
let _allGenres = [];
|
||||
let _genresExpanded = false;
|
||||
const GENRE_LIMIT = () => window.innerWidth >= 700 ? 24 : 12;
|
||||
const GENRE_LIMIT = () => window.innerWidth >= 700 ? 24 : 6;
|
||||
|
||||
async function loadGenreSection() {
|
||||
const el = document.getElementById('home-genres');
|
||||
@@ -631,7 +631,7 @@ export async function loadItunesAlbumDetail(album) {
|
||||
document.getElementById('itunes-album-detail-artist').textContent = album.artistName || '';
|
||||
const cw = document.getElementById('itunes-album-cover-wrap');
|
||||
const art = (album.artworkUrl100 || '').replace('100x100bb','600x600bb').replace('100x100','600x600');
|
||||
cw.innerHTML = art ? `<img src="${art}" onerror="this.parentNode.innerHTML='<div class=\\'no-art\\'>💿</div>'">` : '<div class="no-art">💿</div>';
|
||||
cw.innerHTML = art ? `<img src="${art}" onerror="_imgRetry(this,'💿')">` : '<div class="no-art">💿</div>';
|
||||
const dlBtn = document.getElementById('itunes-album-dl-btn');
|
||||
dlBtn.onclick = () => openDlModal({ artistName: album.artistName, trackName: album.collectionName, collectionName: album.collectionName, artworkUrl100: album.artworkUrl100||'', isAlbum: true, itunesData: album, collectionId: album.collectionId });
|
||||
const sl = document.getElementById('itunes-album-songs');
|
||||
@@ -657,7 +657,7 @@ export async function loadAlbumDetail(album) {
|
||||
.join('<span style="color:var(--text3)"> • </span>') || '';
|
||||
const cw = document.getElementById('album-cover-wrap');
|
||||
const cv = coverUrl(album.coverArt, 512);
|
||||
cw.innerHTML = cv ? `<img src="${cv}" onerror="this.parentNode.innerHTML='<div class=\\'no-art\\'>💿</div>'">` : '<div class="no-art">💿</div>';
|
||||
cw.innerHTML = cv ? `<img src="${cv}" onerror="_imgRetry(this,'💿')">` : '<div class="no-art">💿</div>';
|
||||
const sl = document.getElementById('album-songs');
|
||||
sl.innerHTML = '<div class="spinner"></div>';
|
||||
try {
|
||||
@@ -717,7 +717,7 @@ export async function loadPlaylistDetail(pl) {
|
||||
document.getElementById('playlist-detail-name').textContent = pl.name;
|
||||
const cw = document.getElementById('playlist-cover');
|
||||
const cv = coverUrl(pl.coverArt, 512);
|
||||
cw.innerHTML = cv ? `<img src="${cv}" onerror="this.parentNode.innerHTML='<div class=\\'no-art\\'>🎶</div>'">` : '<div class="no-art">🎶</div>';
|
||||
cw.innerHTML = cv ? `<img src="${cv}" onerror="_imgRetry(this,'🎶')">` : '<div class="no-art">🎶</div>';
|
||||
document.getElementById('btn-edit-playlist').onclick = () => openEditPlModal(S._currentPlaylist);
|
||||
const sl = document.getElementById('playlist-songs');
|
||||
sl.innerHTML = '<div class="spinner"></div>';
|
||||
|
||||
Reference in new issue
Block a user