diff --git a/content.js b/content.js index 5475b3f..24e33a9 100644 --- a/content.js +++ b/content.js @@ -1,45 +1,56 @@ -const TARGET_URL = "http://localhost:8080/endpoint"; -let lastSentSong = ""; - -function extractAndSendSong() { - // Najdeme widget "Now Playing" v levém dolním rohu Spotify - const trackInfo = document.querySelector('[data-testid="now-playing-widget"]'); - - if (trackInfo) { - const links = trackInfo.querySelectorAll('a'); - const songTitle = links[0] ? links[0].innerText : null; - const artistName = links[1] ? links[1].innerText : "Unknown Artist"; - - if (songTitle) { - const currentTrackString = `${artistName} - ${songTitle}`; - - // Odesíláme pouze pokud se písnička změnila, abychom zbytečně nezatěžovali server - if (currentTrackString !== lastSentSong) { - lastSentSong = currentTrackString; - - console.log("Odesílám skladbu:", currentTrackString); - - fetch(TARGET_URL, { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - artist: artistName, - title: songTitle, - timestamp: new Date().toISOString() - }) - }).catch(err => { - console.error("Chyba při odesílání:", err); - }); - } - } - } -} - -// Sledujeme změny na stránce, protože Spotify funguje jako Single Page Application -const observer = new MutationObserver(() => { - extractAndSendSong(); -}); - -observer.observe(document.body, { childList: true, subtree: true }); \ No newline at end of file +const TARGET_URL = "http://localhost:8080/endpoint"; +let lastSentSignature = ""; + +function extractAndSendSong() { + const trackInfo = document.querySelector('[data-testid="now-playing-widget"]'); + + if (trackInfo) { + const links = trackInfo.querySelectorAll('a'); + const songTitle = links[0] ? links[0].innerText : null; + const artistName = links[1] ? links[1].innerText : "Unknown Artist"; + + // Získání obrázku alba + const imgElement = trackInfo.querySelector('img'); + const albumCoverUrl = imgElement ? imgElement.src : null; + + // Získání uplynulého času a celkové délky písničky ze Spotify + const currentTimeEl = document.querySelector('[data-testid="playback-position"]'); + const durationEl = document.querySelector('[data-testid="playback-duration"]'); + + const currentTime = currentTimeEl ? currentTimeEl.innerText : "0:00"; + const duration = durationEl ? durationEl.innerText : "0:00"; + + // Spojený formát např. "0:53/3:45" + const progressFull = `${currentTime}/${duration}`; + + if (songTitle) { + // Vytvoříme podpis, abychom posílali data buď při změně písničky, nebo každou vteřinu kvůli posunu času + const currentSignature = `${artistTitle}-${songTitle}-${currentTime}`; + + if (currentSignature !== lastSentSignature) { + lastSentSignature = currentSignature; + + console.log("Odesílám data:", artistName, "-", songTitle, `[${progressFull}]`); + + fetch(TARGET_URL, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + artist: artistName, + title: songTitle, + coverImg: albumCoverUrl, + progressTime: progressFull, // Bude obsahovat např. "0:53/3:45" + timestamp: new Date().toISOString() + }) + }).catch(err => { + console.error("Chyba při odesílání:", err); + }); + } + } + } +} + +// Kontrola každou vteřinu pro plynulou aktualizaci času v písničce +setInterval(extractAndSendSong, 1000); \ No newline at end of file