/* eslint-disable indent */ const activityProgressMap = new Map(); function formatTime(ms) { const totalSecs = Math.floor(ms / 1000); const mins = Math.floor(totalSecs / 60); const secs = totalSecs % 60; return `${mins}:${secs.toString().padStart(2, "0")}`; } function updateElapsedAndProgress() { const now = Date.now(); document.querySelectorAll(".activity-timestamp").forEach((el) => { const start = Number(el.dataset.start); if (!start) return; const elapsed = now - start; const mins = Math.floor(elapsed / 60000); const secs = Math.floor((elapsed % 60000) / 1000); const display = el.querySelector(".elapsed"); if (display) display.textContent = `(${mins}m ${secs.toString().padStart(2, "0")}s ago)`; }); document.querySelectorAll(".progress-bar").forEach((bar) => { const start = Number(bar.dataset.start); const end = Number(bar.dataset.end); if (!start || !end || end <= start) return; const duration = end - start; const elapsed = now - start; const progress = Math.min( 100, Math.max(0, Math.floor((elapsed / duration) * 100)), ); const fill = bar.querySelector(".progress-fill"); if (fill) fill.style.width = `${progress}%`; }); document.querySelectorAll(".progress-time-labels").forEach((label) => { const start = Number(label.dataset.start); const end = Number(label.dataset.end); if (!start || !end || end <= start) return; const current = Math.max(0, now - start); const total = end - start; const currentEl = label.querySelector(".progress-current"); const totalEl = label.querySelector(".progress-total"); const id = `${start}-${end}`; const last = activityProgressMap.get(id); if (last !== undefined && last === current) { label.classList.add("paused"); } else { label.classList.remove("paused"); } activityProgressMap.set(id, current); if (currentEl) currentEl.textContent = formatTime(current); if (totalEl) totalEl.textContent = formatTime(total); }); } updateElapsedAndProgress(); setInterval(updateElapsedAndProgress, 1000); const head = document.querySelector("head"); let userId = head?.dataset.userId; let instanceUri = head?.dataset.instanceUri; console.log("User ID:", userId); console.log("Instance URI:", instanceUri); if (userId && instanceUri) { if (!instanceUri.startsWith("http")) { instanceUri = `https://${instanceUri}`; } const wsUri = instanceUri .replace(/^http:/, "ws:") .replace(/^https:/, "wss:") .replace(/\/$/, ""); const socket = new WebSocket(`${wsUri}/socket`); socket.addEventListener("open", () => { socket.send( JSON.stringify({ op: 2, d: { subscribe_to_id: userId, }, }), ); }); socket.addEventListener("message", (event) => { const payload = JSON.parse(event.data); if (payload.t === "INIT_STATE" || payload.t === "PRESENCE_UPDATE") { updatePresence(payload.d); updateElapsedAndProgress(); } }); } function buildActivityHTML(activity) { const start = activity.timestamps?.start; const end = activity.timestamps?.end; const now = Date.now(); const elapsed = start ? now - start : 0; const total = start && end ? end - start : null; const progress = total && elapsed > 0 ? Math.min(100, Math.floor((elapsed / total) * 100)) : null; const img = activity.assets?.large_image; let art = null; if (img?.includes("https")) { const clean = img.split("/https/")[1]; if (clean) art = `https://${clean}`; } else if (img?.startsWith("spotify:")) { art = `https://i.scdn.co/image/${img.split(":")[1]}`; } else if (img) { art = `https://cdn.discordapp.com/app-assets/${activity.application_id}/${img}.png`; } const activityTimestamp = !total && start ? `
` : ""; const progressBar = progress !== null ? `