From d56d4875e0ebe572d65455511e15d3c2d965fa19 Mon Sep 17 00:00:00 2001 From: HorizonCode Date: Mon, 11 Mar 2024 15:38:20 +0100 Subject: [PATCH] add dynamic beatmap image to presence --- electron/imageUtil.js | 15 +++++++++++++++ electron/richPresence.js | 3 ++- main.js | 14 ++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 electron/imageUtil.js diff --git a/electron/imageUtil.js b/electron/imageUtil.js new file mode 100644 index 0000000..065f45e --- /dev/null +++ b/electron/imageUtil.js @@ -0,0 +1,15 @@ +async function checkImageExists(url) { + try { + const response = await fetch(url, { method: "HEAD" }); + if (!response.ok) { + return false; + } + const contentType = response.headers.get("content-type"); + if (!contentType) return false; + return contentType.startsWith("image/"); + } catch (error) { + return false; + } +} + +module.exports = { checkImageExists }; diff --git a/electron/richPresence.js b/electron/richPresence.js index 4489d34..23579f8 100644 --- a/electron/richPresence.js +++ b/electron/richPresence.js @@ -47,9 +47,10 @@ module.exports = { richPresence = null; } }, - updateStatus: ({ state, details }) => { + updateStatus: ({ state, details, largeImageKey }) => { currentStatus.state = state ?? " "; currentStatus.details = details ?? " "; + currentStatus.largeImageKey = largeImageKey ?? "ezppfarm"; }, updateVersion: (osuVersion) => { currentStatus.smallImageKey = osuVersion ? "osu" : " "; diff --git a/main.js b/main.js index aa8d919..4d91f9a 100644 --- a/main.js +++ b/main.js @@ -46,6 +46,7 @@ const { getHwId } = require("./electron/hwidUtil"); const { appName, appVersion } = require("./electron/appInfo"); const { updateAvailable, releasesUrl } = require("./electron/updateCheck"); const fkill = require("fkill"); +const { checkImageExists } = require("./electron/imageUtil"); // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. @@ -96,10 +97,22 @@ function startOsuStatus() { if (!("player_status" in currentStatus)) return; if (!("status" in currentStatus.player_status)) return; + let largeImageKey = "ezppfarm"; let details = "Idle..."; let infoText = currentStatus.player_status.status.info_text.length > 0 ? currentStatus.player_status.status.info_text : " "; + if ("beatmap" in currentStatus.player_status.status) { + const setId = currentStatus.player_status.status.beatmap.set_id; + if ( + checkImageExists( + `https://assets.ppy.sh/beatmaps/${setId}/covers/list@2x.jpg`, + ) + ) { + largeImageKey = + `https://assets.ppy.sh/beatmaps/${setId}/covers/list@2x.jpg`; + } + } switch (currentStatus.player_status.status.action) { case 1: @@ -144,6 +157,7 @@ function startOsuStatus() { richPresence.updateStatus({ details, state: infoText, + largeImageKey, }); richPresence.update();