From 629cbba11397c90ccc427e066348a56275693a6d Mon Sep 17 00:00:00 2001 From: Roj234 <82699138+roj234@users.noreply.github.com> Date: Wed, 1 Apr 2026 00:03:43 +0800 Subject: [PATCH 1/5] Implement version data caching mechanism Add caching for version data to reduce API calls. --- src_assets/common/assets/web/index.html | 38 +++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index 7a02b34fc36..50932b65cf1 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -187,11 +187,39 @@
{{ githubVersion.release.name }}
this.platform = config.platform; this.controllerEnabled = config.controller !== "disabled"; this.version = new SunshineVersion(null, config.version); - console.log("Version: ", this.version.version) - this.githubVersion = new SunshineVersion(await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases/latest").then((r) => r.json()), null); - console.log("GitHub Version: ", this.githubVersion.version) - this.preReleaseVersion = new SunshineVersion((await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases").then((r) => r.json())).find(release => release.prerelease), null); - console.log("Pre-Release Version: ", this.preReleaseVersion.version) + console.log("Version: ", this.version.version); + + const now = Date.now(); + let { lastCheck, latest, pre } = JSON.parse(localStorage.getItem('sunshine_version_cache') || '{}'); + const oneDay = 24 * 60 * 60 * 1000; + + if (lastCheck && (now - lastCheck < oneDay) && latest) { + console.log("Using cached version data (within 24h cooldown)"); + this.githubVersion = new SunshineVersion(latest, null); + if (pre) { + this.preReleaseVersion = new SunshineVersion(pre, null); + } + } else { + this.githubVersion = new SunshineVersion(await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases/latest").then((r) => r.json()), null); + console.log("GitHub Version: ", this.githubVersion.version) + + let preReleaseJson = null; + // Only send request when need pre-release + if (this.notifyPreReleases) { + const releases = await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases").then(e => e.json()); + preReleaseJson = releases.find(e => e.prerelease); + if (preReleaseJson) { + this.preReleaseVersion = new SunshineVersion((await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases").then((r) => r.json())).find(release => release.prerelease), null); + console.log("Pre-Release Version: ", this.preReleaseVersion.version) + } + } + + localStorage.setItem('sunshine_version_cache', JSON.stringify({ + lastCheck: now, + latest: latestJson, + pre: preReleaseJson + })); + } // Fetch ViGEmBus status only on Windows when controller is enabled if (this.platform === 'windows' && this.controllerEnabled) { From 4b84835565d4e865a8ad33ce07c121518b85d36a Mon Sep 17 00:00:00 2001 From: Roj234 <82699138+roj234@users.noreply.github.com> Date: Wed, 1 Apr 2026 00:05:39 +0800 Subject: [PATCH 2/5] fix --- src_assets/common/assets/web/index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index 50932b65cf1..1a602cc1e5c 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -200,7 +200,8 @@
{{ githubVersion.release.name }}
this.preReleaseVersion = new SunshineVersion(pre, null); } } else { - this.githubVersion = new SunshineVersion(await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases/latest").then((r) => r.json()), null); + const latestJson = await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases/latest").then(e => e.json()); + this.githubVersion = new SunshineVersion(latestJson, null); console.log("GitHub Version: ", this.githubVersion.version) let preReleaseJson = null; From 7c7f690077c1d959c6738a1c0d7455a82f4bfeff Mon Sep 17 00:00:00 2001 From: Roj234 <82699138+roj234@users.noreply.github.com> Date: Thu, 2 Apr 2026 21:07:54 +0800 Subject: [PATCH 3/5] Change cache duration from 24h to 1h --- src_assets/common/assets/web/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index 1a602cc1e5c..0f7884b925c 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -191,10 +191,10 @@
{{ githubVersion.release.name }}
const now = Date.now(); let { lastCheck, latest, pre } = JSON.parse(localStorage.getItem('sunshine_version_cache') || '{}'); - const oneDay = 24 * 60 * 60 * 1000; + const cacheAge = 60 * 60 * 1000; - if (lastCheck && (now - lastCheck < oneDay) && latest) { - console.log("Using cached version data (within 24h cooldown)"); + if (lastCheck && (now - lastCheck < cacheAge) && latest) { + console.log("Using cached version data"); this.githubVersion = new SunshineVersion(latest, null); if (pre) { this.preReleaseVersion = new SunshineVersion(pre, null); From 27411f80bc0df16b8ff058a6da70a957d5ae2301 Mon Sep 17 00:00:00 2001 From: Roj234 <82699138+roj234@users.noreply.github.com> Date: Wed, 22 Apr 2026 00:31:12 +0800 Subject: [PATCH 4/5] Extract version fetching to fetchVersionFromRemote Refactor version fetching logic into a separate function. --- src_assets/common/assets/web/index.html | 71 +++++++++++++------------ 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index 0f7884b925c..b90e6d32751 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -153,7 +153,43 @@
{{ githubVersion.release.name }}
sanitize: false }); - console.log("Hello, Sunshine!") + console.log("Hello, Sunshine!"); + + async function fetchVersionFromRemote(that) { + const now = Date.now(); + let { lastCheck, latest, pre } = JSON.parse(localStorage.getItem('sunshine_version_cache') || '{}'); + const cacheAge = 60 * 60 * 1000; + + if (lastCheck && (now - lastCheck < cacheAge) && latest) { + console.log("Using cached version data"); + that.githubVersion = new SunshineVersion(latest, null); + if (pre) { + that.preReleaseVersion = new SunshineVersion(pre, null); + } + } else { + const latestJson = await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases/latest").then(e => e.json()); + that.githubVersion = new SunshineVersion(latestJson, null); + console.log("GitHub Version: ", that.githubVersion.version) + + let preReleaseJson = null; + // Only send request when need pre-release + if (that.notifyPreReleases) { + const releases = await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases").then(e => e.json()); + preReleaseJson = releases.find(e => e.prerelease); + if (preReleaseJson) { + that.preReleaseVersion = new SunshineVersion((await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases").then((r) => r.json())).find(release => release.prerelease), null); + console.log("Pre-Release Version: ", that.preReleaseVersion.version) + } + } + + localStorage.setItem('sunshine_version_cache', JSON.stringify({ + lastCheck: now, + latest: latestJson, + pre: preReleaseJson + })); + } + } + let app = createApp({ components: { Navbar, @@ -189,38 +225,7 @@
{{ githubVersion.release.name }}
this.version = new SunshineVersion(null, config.version); console.log("Version: ", this.version.version); - const now = Date.now(); - let { lastCheck, latest, pre } = JSON.parse(localStorage.getItem('sunshine_version_cache') || '{}'); - const cacheAge = 60 * 60 * 1000; - - if (lastCheck && (now - lastCheck < cacheAge) && latest) { - console.log("Using cached version data"); - this.githubVersion = new SunshineVersion(latest, null); - if (pre) { - this.preReleaseVersion = new SunshineVersion(pre, null); - } - } else { - const latestJson = await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases/latest").then(e => e.json()); - this.githubVersion = new SunshineVersion(latestJson, null); - console.log("GitHub Version: ", this.githubVersion.version) - - let preReleaseJson = null; - // Only send request when need pre-release - if (this.notifyPreReleases) { - const releases = await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases").then(e => e.json()); - preReleaseJson = releases.find(e => e.prerelease); - if (preReleaseJson) { - this.preReleaseVersion = new SunshineVersion((await fetch("https://api.github.com/repos/LizardByte/Sunshine/releases").then((r) => r.json())).find(release => release.prerelease), null); - console.log("Pre-Release Version: ", this.preReleaseVersion.version) - } - } - - localStorage.setItem('sunshine_version_cache', JSON.stringify({ - lastCheck: now, - latest: latestJson, - pre: preReleaseJson - })); - } + await fetchVersionFromRemote(this); // Fetch ViGEmBus status only on Windows when controller is enabled if (this.platform === 'windows' && this.controllerEnabled) { From c08dd52203071c459d3cd4e57c6b05cdead7467c Mon Sep 17 00:00:00 2001 From: Roj234 <82699138+roj234@users.noreply.github.com> Date: Fri, 24 Apr 2026 17:17:50 +0800 Subject: [PATCH 5/5] Remove trialing space --- src_assets/common/assets/web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index b90e6d32751..618a479596e 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -189,7 +189,7 @@
{{ githubVersion.release.name }}
})); } } - + let app = createApp({ components: { Navbar,