interface Track { artists: string[]; title: string; album: { albumtitle: string }; } interface Scrobble { time: number; track: Track; } interface LastFMAlbumInfo { album: { image: { "#text": string; size: string }[]; }; } const LASTFM_API_KEY = "596e4b8f593080597d5637be3173e670"; // Replace with your API key async function fetchAlbumCover( artist: string, album: string, ): Promise { const encodedArtist = encodeURIComponent(artist); const encodedAlbum = encodeURIComponent(album); const url = `https://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=${LASTFM_API_KEY}&artist=${encodedArtist}&album=${encodedAlbum}&format=json`; try { const response = await fetch(url); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data: LastFMAlbumInfo = await response.json(); if (data?.album?.image) { const largeImage = data.album.image.find( (image) => image.size === "large", ); return largeImage ? largeImage["#text"] : null; } return null; } catch (error) { console.error("Error fetching album cover:", error); return null; } } async function fetchAndDisplayLastTrack() { const container = document.getElementById("last-track-widget"); if (!container) { console.error("Container element not found!"); return; } try { let res: Response; try { res = await fetch("https://z0x.ca/music"); if (!res.ok) throw new Error("WAN fetch failed"); } catch (e) { res = await fetch("https://z0x.home.arpa/music"); } if (!res.ok) { throw new Error(`HTTP error! status: ${res.status}`); } const data: { status: string; list: Scrobble[] } = await res.json(); let lastTrack: Track | null = null; if (data?.status === "ok" && data.list?.length) { lastTrack = data.list.sort( (a: Scrobble, b: Scrobble) => b.time - a.time, )[0].track; } if (lastTrack) { const albumCover = await fetchAlbumCover( lastTrack.artists[0], lastTrack.album.albumtitle, ); let imageElement = ""; if (albumCover) { imageElement = `Album Cover`; } else { imageElement = ""; // Do not display anything } container.innerHTML = ` ${imageElement} Last played.. ${lastTrack.title} by ${lastTrack.artists[0]} on ${lastTrack.album.albumtitle} `; } else { container.innerHTML = "

No tracks found.

"; } } catch (e) { console.error("Fetch error:", e); container.innerHTML = "

Error loading tracks.

"; } finally { container.classList.remove("opacity-0"); container.classList.add("opacity-100"); } } fetchAndDisplayLastTrack();