diff --git a/js/ui.js b/js/ui.js
index a5ffdd0..081fdb5 100644
--- a/js/ui.js
+++ b/js/ui.js
@@ -546,11 +546,11 @@ async showFullscreenCover(track, nextTrack, lyricsManager, audioPlayer) {
const coverUrl = this.api.getCoverUrl(track.album?.cover, '1280');
image.src = coverUrl;
title.textContent = track.title;
- artist.textContent = track.artist?.name || 'Unknown Artist';
-
+ artist.textContent = getTrackArtists(track);
+
if (nextTrack) {
nextTrackEl.style.display = 'flex';
- nextTrackEl.querySelector('.value').textContent = `${nextTrack.title} • ${nextTrack.artist?.name || 'Unknown'}`;
+ nextTrackEl.querySelector('.value').textContent = `${nextTrack.title} • ${getTrackArtists(nextTrack)}`;
nextTrackEl.classList.remove('animate-in');
void nextTrackEl.offsetWidth;
@@ -1155,10 +1155,20 @@ async showFullscreenCover(track, nextTrack, lyricsManager, audioPlayer) {
playlistLikeBtn.style.display = 'none';
}
- // Add edit and delete buttons
+ const shuffleBtn = document.createElement('button');
+ shuffleBtn.id = 'shuffle-playlist-btn';
+ shuffleBtn.className = 'btn-primary';
+ shuffleBtn.innerHTML = 'Shuffle';
+ shuffleBtn.onclick = () => {
+ const shuffledTracks = [...tracks].sort(() => Math.random() - 0.5);
+ this.player.setQueue(shuffledTracks, 0);
+ this.player.playTrackFromQueue();
+ };
+
const actionsDiv = document.getElementById('page-playlist').querySelector('.detail-header-actions');
-
- // Cleanup existing buttons
+
+ const existingShuffle = actionsDiv.querySelector('#shuffle-playlist-btn');
+ if (existingShuffle) existingShuffle.remove();
const existingEdit = actionsDiv.querySelector('#edit-playlist-btn');
if (existingEdit) existingEdit.remove();
const existingDelete = actionsDiv.querySelector('#delete-playlist-btn');
@@ -1172,6 +1182,7 @@ async showFullscreenCover(track, nextTrack, lyricsManager, audioPlayer) {
deleteBtn.id = 'delete-playlist-btn';
deleteBtn.className = 'btn-secondary danger';
deleteBtn.innerHTML = 'Delete';
+ actionsDiv.appendChild(shuffleBtn);
actionsDiv.appendChild(editBtn);
actionsDiv.appendChild(deleteBtn);
@@ -1232,6 +1243,27 @@ async showFullscreenCover(track, nextTrack, lyricsManager, audioPlayer) {
this.renderListWithTracks(tracklistContainer, tracks, true);
+ const shuffleBtn = document.createElement('button');
+ shuffleBtn.id = 'shuffle-playlist-btn';
+ shuffleBtn.className = 'btn-primary';
+ shuffleBtn.innerHTML = 'Shuffle';
+ shuffleBtn.onclick = () => {
+ const shuffledTracks = [...tracks].sort(() => Math.random() - 0.5);
+ this.player.setQueue(shuffledTracks, 0);
+ this.player.playTrackFromQueue();
+ };
+
+ const actionsDiv = document.getElementById('page-playlist').querySelector('.detail-header-actions');
+
+ const existingShuffle = actionsDiv.querySelector('#shuffle-playlist-btn');
+ if (existingShuffle) existingShuffle.remove();
+
+ const playBtn = document.getElementById('play-playlist-btn');
+ const dlBtn = document.getElementById('download-playlist-btn');
+ if (playBtn && dlBtn) {
+ actionsDiv.insertBefore(shuffleBtn, dlBtn);
+ }
+
// Update header like button
const playlistLikeBtn = document.getElementById('like-playlist-btn');
if (playlistLikeBtn) {