diff --git a/plugins/lyrics-genius/front.js b/plugins/lyrics-genius/front.js index 48227e1d..b8e78c1c 100644 --- a/plugins/lyrics-genius/front.js +++ b/plugins/lyrics-genius/front.js @@ -3,20 +3,34 @@ const is = require("electron-is"); module.exports = () => { ipcRenderer.on("update-song-info", (_, extractedSongInfo) => { - const lyricsTab = document.querySelector('tp-yt-paper-tab[tabindex="-1"]'); + const tabList = document.querySelectorAll("tp-yt-paper-tab"); + const tabs = { + upNext: tabList[0], + lyrics: tabList[1], + discover: tabList[2], + } // Check if disabled - if (!lyricsTab || !lyricsTab.hasAttribute("disabled")) { + if (!tabs.lyrics?.hasAttribute("disabled")) { return; } + let hasLyrics = true; + const html = ipcRenderer.sendSync( "search-genius-lyrics", extractedSongInfo ); if (!html) { + // Delete previous lyrics if tab is open and couldn't get new lyrics + checkLyricsContainer(() => { + hasLyrics = false; + setTabsOnclick(undefined); + }); return; - } else if (is.dev()) { + } + + if (is.dev()) { console.log("Fetched lyrics from Genius"); } @@ -35,27 +49,16 @@ module.exports = () => { return; } - lyricsTab.removeAttribute("disabled"); - lyricsTab.removeAttribute("aria-disabled"); - document.querySelector("tp-yt-paper-tab").onclick = () => { - lyricsTab.removeAttribute("disabled"); - lyricsTab.removeAttribute("aria-disabled"); - }; + enableLyricsTab(); - lyricsTab.onclick = () => { + setTabsOnclick(enableLyricsTab); + + checkLyricsContainer(); + + tabs.lyrics.onclick = () => { const tabContainer = document.querySelector("ytmusic-tab-renderer"); const observer = new MutationObserver((_, observer) => { - const lyricsContainer = document.querySelector( - '[page-type="MUSIC_PAGE_TYPE_TRACK_LYRICS"] > ytmusic-message-renderer' - ); - if (lyricsContainer) { - lyricsContainer.innerHTML = `
- ${lyrics} - - Source : Genius -
`; - observer.disconnect(); - } + checkLyricsContainer(() => observer.disconnect()); }); observer.observe(tabContainer, { attributes: true, @@ -63,5 +66,41 @@ module.exports = () => { subtree: true, }); }; + + function checkLyricsContainer(callback = () => {}) { + const lyricsContainer = document.querySelector( + '[page-type="MUSIC_PAGE_TYPE_TRACK_LYRICS"] > ytmusic-message-renderer' + ); + if (lyricsContainer) { + callback(); + setLyrics(lyricsContainer) + } + } + + function setLyrics(lyricsContainer) { + lyricsContainer.innerHTML = + `
+ ${hasLyrics ? lyrics : 'Could not retrieve lyrics from genius'} + +
+ `; + if (hasLyrics) { + lyricsContainer.querySelector('.footer').textContent = 'Source: Genius'; + enableLyricsTab(); + } + } + + function setTabsOnclick(callback) { + for (tab of [tabs.upNext, tabs.discover]) { + if (tab) { + tab.onclick = callback; + } + } + } + + function enableLyricsTab() { + tabs.lyrics.removeAttribute("disabled"); + tabs.lyrics.removeAttribute("aria-disabled"); + } }); }; diff --git a/plugins/lyrics-genius/style.css b/plugins/lyrics-genius/style.css index 3b02cafb..26100bab 100644 --- a/plugins/lyrics-genius/style.css +++ b/plugins/lyrics-genius/style.css @@ -6,8 +6,7 @@ text-decoration: none; } -#contents.genius-lyrics { - font-size: 1vw; - opacity: 0.9; - text-align: center; +.description { + font-size: 1.1vw !important; + text-align: center !important; } diff --git a/providers/song-info.js b/providers/song-info.js index c4028355..88f757a3 100644 --- a/providers/song-info.js +++ b/providers/song-info.js @@ -112,13 +112,12 @@ const suffixesToRemove = [ " - topic", "vevo", " (performance video)", - " (official music video)", - " (official video)", " (clip officiel)", ]; function cleanupName(name) { if (!name) return name; + name = name.replace(/\((?:official)?[ ]?(?:music)?[ ]?(?:lyric[s]?)?[ ]?(?:video)?\)$/i, '') const lowCaseName = name.toLowerCase(); for (const suffix of suffixesToRemove) { if (lowCaseName.endsWith(suffix)) {