From 64163e6b83f99fccaa3a0994ab497b4f0d1f0672 Mon Sep 17 00:00:00 2001 From: Daniel Lau <32113157+theusaf@users.noreply.github.com> Date: Tue, 5 Sep 2023 13:11:30 -0700 Subject: [PATCH] feat(SideQuest): add presence (#7607) * feat: initialize project * feat: add giveaways details * feat: add app details * feat: add news details * feat: add user details * feat: add default message * fix: use better selector for app name * style: format code --- websites/S/SideQuest/metadata.json | 26 +++++++ websites/S/SideQuest/presence.ts | 108 +++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 websites/S/SideQuest/metadata.json create mode 100644 websites/S/SideQuest/presence.ts diff --git a/websites/S/SideQuest/metadata.json b/websites/S/SideQuest/metadata.json new file mode 100644 index 000000000000..0c066b4e6b03 --- /dev/null +++ b/websites/S/SideQuest/metadata.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://schemas.premid.app/metadata/1.9", + "author": { + "id": "193714715631812608", + "name": "theusaf" + }, + "service": "SideQuest", + "description": { + "en": "SideQuest is the early access layer for Virtual Reality. Get access to the latest Oculus Quest Games, Oculus App Lab games & lots of free apps on applab and sideload." + }, + "url": "sidequestvr.com", + "version": "1.0.0", + "logo": "https://i.imgur.com/GnK79kd.png", + "thumbnail": "https://sidequestvr.com/assets/images/home-picks.jpg", + "color": "#1a1d3c", + "category": "games", + "tags": [ + "vr", + "quest", + "oculus", + "store", + "sideload", + "game", + "reviews" + ] +} \ No newline at end of file diff --git a/websites/S/SideQuest/presence.ts b/websites/S/SideQuest/presence.ts new file mode 100644 index 000000000000..ff4601b220c8 --- /dev/null +++ b/websites/S/SideQuest/presence.ts @@ -0,0 +1,108 @@ +const presence = new Presence({ + clientId: "1146519848906653727", + }), + browsingTimestamp = Math.floor(Date.now() / 1000); + +const enum Assets { + Logo = "https://i.imgur.com/GnK79kd.png", +} + +presence.on("UpdateData", async () => { + const presenceData: PresenceData = { + largeImageKey: Assets.Logo, + startTimestamp: browsingTimestamp, + }, + { pathname, href } = document.location, + pathList = pathname.split("/").filter(Boolean); + + switch (pathList[0] ?? "") { + case "": { + presenceData.details = "Browsing home page"; + break; + } + case "app": { + presenceData.details = "Viewing an app"; + presenceData.state = document.querySelector( + ".right-section .large-font" + ).textContent; + presenceData.buttons = [{ label: "View App", url: href }]; + break; + } + case "apps": { + presenceData.details = "Browsing apps by category"; + presenceData.state = document + .querySelector("div > a[class*=active]") + .textContent.split(" ") + .slice(1) + .join(""); + break; + } + case "all-apps": { + presenceData.details = "Browsing all apps"; + presenceData.state = document + .querySelector("sq-button > a[class*=active]") + .textContent.substring(5) + .trim(); + break; + } + case "giveaways": { + if (pathList[1]) { + presenceData.details = "Viewing a giveaway"; + presenceData.state = document.querySelector("h4").textContent; + presenceData.buttons = [{ label: "View Giveaway", url: href }]; + } else presenceData.details = "Browsing giveaways"; + break; + } + case "news": { + presenceData.details = "Reading a news post"; + presenceData.state = document + .querySelector(".top-title-text") + .textContent.trim(); + presenceData.buttons = [{ label: "View Post", url: href }]; + break; + } + case "space": { + const spaceTitle = document + .querySelector(".community-title") + .textContent.trim(); + presenceData.smallImageKey = document + .querySelector(".user-image") + .style.backgroundImage.match(/url\("(.+)"\)/)[1]; + presenceData.smallImageText = document + .querySelector(".community-title + div > div") + .textContent.trim(); + if (pathList[2] === "p") { + presenceData.details = "Viewing a space post"; + presenceData.state = `${spaceTitle} - ${document + .querySelector(".post-title-name") + .textContent.trim()}`; + presenceData.buttons = [{ label: "View Post", url: href }]; + } else { + presenceData.details = "Browsing a space"; + presenceData.state = spaceTitle; + presenceData.buttons = [{ label: "View Space", url: href }]; + } + break; + } + case "spaces": { + presenceData.details = "Browsing spaces"; + break; + } + case "user": { + presenceData.details = "Viewing a user's profile"; + presenceData.state = document + .querySelector(".large-font") + .childNodes[1].textContent.trim(); + presenceData.smallImageKey = document + .querySelector(".user-image") + .style.backgroundImage.match(/url\("(.+)"\)/)[1]; + presenceData.buttons = [{ label: "View Profile", url: href }]; + break; + } + default: { + presenceData.details = "Browsing..."; + } + } + + presence.setActivity(presenceData); +});