()
| 4684 | if (Array.isArray(imgs) && imgs[0]?.url) return imgs[0].url; |
| 4685 | return ""; |
| 4686 | }; |
| 4687 | const trackToUri = (t) => { |
| 4688 | if (!t) return ""; |
| 4689 | const ctx = t.contextTrack || t; |
| 4690 | return ctx.uri || ctx.contextUri || t.uri || ""; |
| 4691 | }; |
| 4692 | const getQueue = () => anyWin.Spicetify?.Queue || anyWin.Spicetify?.Platform?.PlayerAPI?._queue || {}; |
| 4693 | const getCurrentItem = () => { |
| 4694 | try { |
| 4695 | const data = anyWin.Spicetify?.Player?.data; |
| 4696 | return data?.item || data?.track || null; |
| 4697 | } catch { |
| 4698 | return null; |
| 4699 | } |
| 4700 | }; |
| 4701 | const getCurrentCoverUrl = () => { |
| 4702 | const url = trackToImageUrl(getCurrentItem()); |
| 4703 | if (url) return url; |
| 4704 | const cont = document.querySelector(CONTAINER_SEL); |
| 4705 | return cont?.querySelector(".main-nowPlayingView-coverArt img")?.src || cont?.querySelector("img")?.src || ""; |
| 4706 | }; |
| 4707 | const getCurrentUri = () => trackToUri(getCurrentItem()); |
| 4708 | const getNextItem = () => { |
| 4709 | try { |
| 4710 | const q2 = getQueue(); |
| 4711 | return q2.nextTracks?.[0] || q2.next_tracks?.[0] || null; |
| 4712 | } catch { |
| 4713 | return null; |
| 4714 | } |
| 4715 | }; |
| 4716 | const getPrevItem = () => { |
| 4717 | try { |
| 4718 | const q2 = getQueue(); |
| 4719 | const arr = q2.prevTracks || q2.previous_tracks; |
| 4720 | return arr?.[arr.length - 1] || null; |
| 4721 | } catch { |
| 4722 | return null; |
| 4723 | } |
| 4724 | }; |
| 4725 | const getNextCoverUrl = () => { |
| 4726 | const url = trackToImageUrl(getNextItem()); |
| 4727 | if (url) return url; |
| 4728 | const el = document.querySelector("#glowify-next-song-card .nsc-cover"); |
| 4729 | if (!el) return ""; |
| 4730 | if (el.tagName === "IMG") return el.src; |
| 4731 | const m2 = getComputedStyle(el).backgroundImage.match(/url\(["']?(.+?)["']?\)/); |
| 4732 | return m2 ? m2[1] : ""; |
| 4733 | }; |
| 4734 | const getPrevCoverUrl = () => trackToImageUrl(getPrevItem()); |
| 4735 | const getNextUri = () => trackToUri(getNextItem()); |
| 4736 | const getPrevUri = () => trackToUri(getPrevItem()); |
| 4737 | let prevUrl = "", currentUrl2 = "", nextUrl = ""; |
| 4738 | let prevUri = "", currentUri = "", nextUri = ""; |
| 4739 | let track = null, clip = null, prevSlot = null, currentSlot = null, nextSlot = null; |
| 4740 | let mountedContainer = null, origPosition = ""; |
| 4741 | let canvasVisible = false; |
| 4742 | let animating = false; |
| 4743 | let canvasPoll = null; |
no test coverage detected