diff --git a/webui/static/discover.js b/webui/static/discover.js
index 8ddfb0a3..9aac9316 100644
--- a/webui/static/discover.js
+++ b/webui/static/discover.js
@@ -7875,113 +7875,14 @@ function checkForActiveDiscoverDownloads() {
}
async function startDiscoverPlaylistSync(playlistType, playlistName) {
- console.log(`🔄 Starting sync for ${playlistName}`);
+ console.log(`🔄 Navigating to Sync → Discover tab for ${playlistName}`);
- // Get tracks based on playlist type
- let tracks = [];
- if (playlistType === 'release_radar') {
- tracks = discoverReleaseRadarTracks;
- } else if (playlistType === 'discovery_weekly') {
- tracks = discoverWeeklyTracks;
- } else if (playlistType === 'seasonal_playlist') {
- tracks = discoverSeasonalTracks;
- } else if (playlistType === 'popular_picks') {
- tracks = personalizedPopularPicks;
- } else if (playlistType === 'hidden_gems') {
- tracks = personalizedHiddenGems;
- } else if (playlistType === 'discovery_shuffle') {
- tracks = personalizedDiscoveryShuffle;
- } else if (playlistType === 'familiar_favorites') {
- tracks = personalizedFamiliarFavorites;
- } else if (playlistType === 'build_playlist') {
- tracks = buildPlaylistTracks;
- }
-
- if (!tracks || tracks.length === 0) {
- showToast(`No tracks available for ${playlistName}`, 'warning');
- return;
- }
-
- // Convert to format expected by sync API
- const spotifyTracks = tracks.map(track => {
- let spotifyTrack;
-
- // Use track_data_json if available
- if (track.track_data_json) {
- spotifyTrack = track.track_data_json;
- } else {
- // Fallback: construct track object
- spotifyTrack = {
- id: track.spotify_track_id,
- name: track.track_name,
- artists: [{ name: track.artist_name }],
- album: {
- name: track.album_name,
- images: track.album_cover_url ? [{ url: track.album_cover_url }] : []
- },
- duration_ms: track.duration_ms || 0
- };
- }
-
- // Normalize artists to array of strings for sync compatibility
- if (spotifyTrack.artists && Array.isArray(spotifyTrack.artists)) {
- spotifyTrack.artists = spotifyTrack.artists.map(a => a.name || a);
- }
-
- return spotifyTrack;
+ // Navigate to the Sync page → Discover tab, highlight the card, and auto-sync
+ navigateToSyncTab('discover', {
+ highlight: `discover-sync-card-${playlistType}`,
+ autoSync: playlistType,
+ autoSyncName: playlistName,
});
-
- // Create virtual playlist ID
- const virtualPlaylistId = `discover_${playlistType}`;
-
- // Store in cache for sync function
- playlistTrackCache[virtualPlaylistId] = spotifyTracks;
-
- // Create virtual playlist object
- const virtualPlaylist = {
- id: virtualPlaylistId,
- name: playlistName,
- track_count: spotifyTracks.length
- };
-
- // Add to spotify playlists array if not already there
- if (!spotifyPlaylists.find(p => p.id === virtualPlaylistId)) {
- spotifyPlaylists.push(virtualPlaylist);
- }
-
- // Show sync status display (convert underscores to hyphens for ID)
- const statusId = playlistType.replace(/_/g, '-') + '-sync-status';
- const statusDisplay = document.getElementById(statusId);
- if (statusDisplay) {
- statusDisplay.style.display = 'block';
- }
-
- // Disable sync button to prevent duplicate syncs (convert underscores to hyphens for ID)
- const buttonId = playlistType.replace(/_/g, '-') + '-sync-btn';
- const syncButton = document.getElementById(buttonId);
- if (syncButton) {
- syncButton.disabled = true;
- syncButton.style.opacity = '0.5';
- syncButton.style.cursor = 'not-allowed';
- }
-
- // Start sync using existing function
- await startPlaylistSync(virtualPlaylistId);
-
- // Extract image URL from first track for download bar bubble
- let imageUrl = null;
- if (spotifyTracks && spotifyTracks.length > 0) {
- const firstTrack = spotifyTracks[0];
- if (firstTrack.album && firstTrack.album.images && firstTrack.album.images.length > 0) {
- imageUrl = firstTrack.album.images[0].url;
- }
- }
-
- // Add to discover download bar
- addDiscoverDownload(virtualPlaylistId, playlistName, playlistType, imageUrl);
-
- // Start polling for progress updates
- startDiscoverSyncPolling(playlistType, virtualPlaylistId);
}
// Track active discover sync pollers
@@ -9147,6 +9048,13 @@ function renderDiscoverSyncCard(playlist, container, sourceLabel) {
+
+
+
+