diff --git a/src/lib/services/deezer/queueManager.ts b/src/lib/services/deezer/queueManager.ts index d6cb7ec..2a48575 100644 --- a/src/lib/services/deezer/queueManager.ts +++ b/src/lib/services/deezer/queueManager.ts @@ -239,6 +239,44 @@ export class DeezerQueueManager { } } + /** + * Ensure track has lyrics by fetching if needed + * Reuses the same logic as addToQueue for consistency + */ + private async ensureLyrics(track: DeezerTrack): Promise { + // Skip if already has lyrics + if (track.lyrics) { + return; + } + + // Fetch lyrics from Deezer + try { + const lyricsData = await deezerAPI.getLyrics(track.id.toString()); + + if (lyricsData) { + // Parse LRC format (synced lyrics) + let syncLrc = ''; + if (lyricsData.LYRICS_SYNC_JSON) { + for (const line of lyricsData.LYRICS_SYNC_JSON) { + const text = line.line || ''; + const timestamp = line.lrc_timestamp || '[00:00.00]'; + syncLrc += `${timestamp}${text}\n`; + } + } + + track.lyrics = { + sync: syncLrc || undefined, + unsync: lyricsData.LYRICS_TEXT || undefined, + syncID3: undefined + }; + + console.log(`[DeezerQueueManager] Fetched lyrics for "${track.title}"`); + } + } catch (error) { + console.warn(`[DeezerQueueManager] Could not fetch lyrics for track "${track.title}":`, error); + } + } + /** * Download a single track */ @@ -262,6 +300,11 @@ export class DeezerQueueManager { await this.ensureCoverUrl(track); } + // Ensure track has lyrics if lyrics are enabled + if (appSettings.embedLyrics || appSettings.saveLrcFile) { + await this.ensureLyrics(track); + } + // Get user data for license token const userData = await deezerAPI.getUserData(); const licenseToken = userData.USER?.OPTIONS?.license_token; @@ -405,6 +448,11 @@ export class DeezerQueueManager { await this.ensureCoverUrl(track); } + // Ensure track has lyrics if lyrics are enabled + if (appSettings.embedLyrics || appSettings.saveLrcFile) { + await this.ensureLyrics(track); + } + const userData = await deezerAPI.getUserData(); const licenseToken = userData.USER?.OPTIONS?.license_token;