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,