From 9bbc57008a74feb801907ab33516a0124c73ec20 Mon Sep 17 00:00:00 2001
From: Zagrios <40181755+Zagrios@users.noreply.github.com>
Date: Sun, 27 Apr 2025 16:33:01 +0200
Subject: [PATCH 01/21] bumb to 1.5.3
---
package.json | 2 +-
release/app/package-lock.json | 4 ++--
release/app/package.json | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/package.json b/package.json
index 5d4735dd..07bfd277 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "bs-manager",
"description": "Manage maps, mods and more for Beat Saber",
"main": "./.erb/dll/main.bundle.dev.js",
- "version": "1.5.3-alpha.1",
+ "version": "1.5.3",
"scripts": {
"build-rust-scripts": "ts-node ./.erb/scripts/build-rust-scripts.js",
"build": "concurrently \"npm run build:main\" \"npm run build:renderer\"",
diff --git a/release/app/package-lock.json b/release/app/package-lock.json
index 6547d474..770e7ae1 100644
--- a/release/app/package-lock.json
+++ b/release/app/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "bs-manager",
- "version": "1.5.3-alpha.1",
+ "version": "1.5.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "bs-manager",
- "version": "1.5.3-alpha.1",
+ "version": "1.5.3",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
diff --git a/release/app/package.json b/release/app/package.json
index 3d4f58ca..6edc5731 100644
--- a/release/app/package.json
+++ b/release/app/package.json
@@ -1,6 +1,6 @@
{
"name": "bs-manager",
- "version": "1.5.3-alpha.1",
+ "version": "1.5.3",
"description": "BSManager",
"main": "./dist/main/main.js",
"author": {
From e1ca8dbf99774d0f324bdc8bc1952473a628b379 Mon Sep 17 00:00:00 2001
From: Iluhadesu <92525749+Iluhadesu@users.noreply.github.com>
Date: Thu, 15 May 2025 15:12:53 +0000
Subject: [PATCH 02/21] Add versary to bs-versions.json
---
assets/jsons/bs-versions.json | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/assets/jsons/bs-versions.json b/assets/jsons/bs-versions.json
index 5b8fe316..93860f56 100644
--- a/assets/jsons/bs-versions.json
+++ b/assets/jsons/bs-versions.json
@@ -849,5 +849,14 @@
"ReleaseDate": "1743515622",
"year": "2025",
"recommended": true
+ },
+ {
+ "BSVersion": "ersary",
+ "BSManifest": "2447038720841508806",
+ "OculusBinaryId": "9120095564756808",
+ "ReleaseURL": "https://steamcommunity.com/games/620980/announcements/detail/502825275922317447",
+ "ReleaseImg": "https://clan.fastly.steamstatic.com/images/32055887/2b5845893d915902106aaf30b6d1a95f68a4b226.png",
+ "ReleaseDate": "1747321305",
+ "year": "2025"
}
]
\ No newline at end of file
From 568ad7d051a25cf295ecedd4ace1a33157ac75c3 Mon Sep 17 00:00:00 2001
From: Iluhadesu <92525749+Iluhadesu@users.noreply.github.com>
Date: Thu, 15 May 2025 15:20:22 +0000
Subject: [PATCH 03/21] Fix bs-versions.json
---
assets/jsons/bs-versions.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/assets/jsons/bs-versions.json b/assets/jsons/bs-versions.json
index 93860f56..fc3452a8 100644
--- a/assets/jsons/bs-versions.json
+++ b/assets/jsons/bs-versions.json
@@ -851,7 +851,7 @@
"recommended": true
},
{
- "BSVersion": "ersary",
+ "BSVersion": "1.40.5",
"BSManifest": "2447038720841508806",
"OculusBinaryId": "9120095564756808",
"ReleaseURL": "https://steamcommunity.com/games/620980/announcements/detail/502825275922317447",
@@ -859,4 +859,4 @@
"ReleaseDate": "1747321305",
"year": "2025"
}
-]
\ No newline at end of file
+]
From ed158f55c5b479abec395314d502c4bded3a190a Mon Sep 17 00:00:00 2001
From: Iluhadesu <92525749+Iluhadesu@users.noreply.github.com>
Date: Sun, 18 May 2025 18:48:58 +0000
Subject: [PATCH 04/21] Change recommanded version to 1.40.5
---
assets/jsons/bs-versions.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/assets/jsons/bs-versions.json b/assets/jsons/bs-versions.json
index fc3452a8..16e1f615 100644
--- a/assets/jsons/bs-versions.json
+++ b/assets/jsons/bs-versions.json
@@ -847,8 +847,7 @@
"ReleaseURL": "https://steamcommunity.com/games/620980/announcements/detail/510702041542166484",
"ReleaseImg": "https://clan.fastly.steamstatic.com/images/32055887/c27dac7f96e53672d020d97838cec1d5d28e3180.png",
"ReleaseDate": "1743515622",
- "year": "2025",
- "recommended": true
+ "year": "2025"
},
{
"BSVersion": "1.40.5",
@@ -857,6 +856,7 @@
"ReleaseURL": "https://steamcommunity.com/games/620980/announcements/detail/502825275922317447",
"ReleaseImg": "https://clan.fastly.steamstatic.com/images/32055887/2b5845893d915902106aaf30b6d1a95f68a4b226.png",
"ReleaseDate": "1747321305",
- "year": "2025"
+ "year": "2025",
+ "recommended": true
}
]
From 5337c4a61fe2955ab937ed5990413ec618717551 Mon Sep 17 00:00:00 2001
From: Zagrios <40181755+Zagrios@users.noreply.github.com>
Date: Tue, 27 May 2025 12:06:22 +0200
Subject: [PATCH 05/21] update patreon
---
assets/jsons/patreons.json | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/assets/jsons/patreons.json b/assets/jsons/patreons.json
index fd4ab56b..80054f79 100644
--- a/assets/jsons/patreons.json
+++ b/assets/jsons/patreons.json
@@ -161,6 +161,11 @@
},
{
"username": "KingCrocman",
+ "type": "diamond",
+ "link": "https://www.youtube.com/KingCrocman"
+ },
+ {
+ "username": "bosspie",
"type": "diamond"
}
]
From 2e85c62c02ddc2cbaebdf06cf9d3ccb48fb806bc Mon Sep 17 00:00:00 2001
From: Iluhadesu <92525749+Iluhadesu@users.noreply.github.com>
Date: Thu, 5 Jun 2025 15:49:22 +0000
Subject: [PATCH 06/21] Add v1.40.6 to bs-versions.json
---
assets/jsons/bs-versions.json | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/assets/jsons/bs-versions.json b/assets/jsons/bs-versions.json
index 16e1f615..c772d247 100644
--- a/assets/jsons/bs-versions.json
+++ b/assets/jsons/bs-versions.json
@@ -858,5 +858,14 @@
"ReleaseDate": "1747321305",
"year": "2025",
"recommended": true
+ },
+ {
+ "BSVersion": "1.40.6",
+ "BSManifest": "3050696685250334115",
+ "OculusBinaryId": "9315734585192904",
+ "ReleaseURL": "https://steamcommunity.com/games/620980/announcements/detail/510708375093248769",
+ "ReleaseImg": "https://clan.fastly.steamstatic.com/images/32055887/0f658ed39f480446e0dc5807b1591e8a18aef2f5.png",
+ "ReleaseDate": "1749135144",
+ "year": "2025"
}
-]
+]
\ No newline at end of file
From 56b462ad8a4937938a987e8ecab1b52c7f500bf8 Mon Sep 17 00:00:00 2001
From: Iluhadesu <92525749+Iluhadesu@users.noreply.github.com>
Date: Thu, 5 Jun 2025 17:24:06 +0000
Subject: [PATCH 07/21] Set recommended version to 1.40.6
---
assets/jsons/bs-versions.json | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/assets/jsons/bs-versions.json b/assets/jsons/bs-versions.json
index c772d247..1e27b40a 100644
--- a/assets/jsons/bs-versions.json
+++ b/assets/jsons/bs-versions.json
@@ -856,8 +856,7 @@
"ReleaseURL": "https://steamcommunity.com/games/620980/announcements/detail/502825275922317447",
"ReleaseImg": "https://clan.fastly.steamstatic.com/images/32055887/2b5845893d915902106aaf30b6d1a95f68a4b226.png",
"ReleaseDate": "1747321305",
- "year": "2025",
- "recommended": true
+ "year": "2025"
},
{
"BSVersion": "1.40.6",
@@ -866,6 +865,7 @@
"ReleaseURL": "https://steamcommunity.com/games/620980/announcements/detail/510708375093248769",
"ReleaseImg": "https://clan.fastly.steamstatic.com/images/32055887/0f658ed39f480446e0dc5807b1591e8a18aef2f5.png",
"ReleaseDate": "1749135144",
- "year": "2025"
+ "year": "2025",
+ "recommended": true
}
-]
\ No newline at end of file
+]
From 207d3c782ee26d1a308ebdfb3c4549a5e90f0adf Mon Sep 17 00:00:00 2001
From: Vojtak42 <18753137+Vojtak42@users.noreply.github.com>
Date: Sun, 8 Jun 2025 15:40:52 +0200
Subject: [PATCH 08/21] Press CTRL+R after opening developer tools (#867)
---
.../How-to-obtain-your-Oculus-Token.md | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/docs/wiki/Guides/Login/How-to-obtain-your-Oculus-Token/How-to-obtain-your-Oculus-Token.md b/docs/wiki/Guides/Login/How-to-obtain-your-Oculus-Token/How-to-obtain-your-Oculus-Token.md
index 294856ac..4d139b61 100644
--- a/docs/wiki/Guides/Login/How-to-obtain-your-Oculus-Token/How-to-obtain-your-Oculus-Token.md
+++ b/docs/wiki/Guides/Login/How-to-obtain-your-Oculus-Token/How-to-obtain-your-Oculus-Token.md
@@ -30,11 +30,12 @@
In the developer tools:
1. Open the __`Network`__ tab.
-2. Filter for __`graph`__.
-3. Click on the first request that appears.
-4. Open the __`Payload`__ tab.
-5. Scroll to the bottom to locate your token. It should start with __`FRL`__.
-6. Select the token using your mouse and press `Ctrl` + `C` to copy it.
+2. Press CTRL+R.
+3. Filter for __`graph`__.
+4. Click on the first request that appears.
+5. Open the __`Payload`__ tab.
+6. Scroll to the bottom to locate your token. It should start with __`FRL`__.
+7. Select the token using your mouse and press `Ctrl` + `C` to copy it.

From dfe63e525e7fac54547b9c9ebca9dabebe97b607 Mon Sep 17 00:00:00 2001
From: Sapphire
Date: Sun, 8 Jun 2025 08:43:06 -0500
Subject: [PATCH 09/21] [bugfix] Fix mod installation on NixOS (#870)
* fix(services/bs-mods-manager): inherit env on linux when starting bsipa
* fix(services/linux,bs-mods-manager): use proton wine on nixos
---
src/main/services/linux.service.ts | 7 +------
src/main/services/mods/bs-mods-manager.service.ts | 8 ++++++--
2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/src/main/services/linux.service.ts b/src/main/services/linux.service.ts
index 7f92bed4..5f12896a 100644
--- a/src/main/services/linux.service.ts
+++ b/src/main/services/linux.service.ts
@@ -129,12 +129,7 @@ export class LinuxService {
return fs.pathExistsSync(protonPath) && fs.pathExistsSync(winePath);
}
- public async getWinePath(): Promise {
- if (await this.isNixOS()) {
- // Use system wine for nixos
- return "wine";
- }
-
+ public getWinePath(): string {
if (!this.staticConfig.has("proton-folder")) {
throw new Error("proton-folder variable not set");
}
diff --git a/src/main/services/mods/bs-mods-manager.service.ts b/src/main/services/mods/bs-mods-manager.service.ts
index 5f726093..60cc1905 100644
--- a/src/main/services/mods/bs-mods-manager.service.ts
+++ b/src/main/services/mods/bs-mods-manager.service.ts
@@ -162,18 +162,22 @@ export class BsModsManagerService {
let winePath: string = "";
if (process.platform === "linux") {
const { error: winePathError, result: winePathResult } =
- await tryit(async () => this.linuxService.getWinePath());
+ tryit(() => this.linuxService.getWinePath());
if (winePathError) {
log.error(winePathError);
return false;
}
- winePath = `"${winePathResult}"`;
+
+ winePath = await this.linuxService.isNixOS()
+ ? `steam-run "${winePathResult}"`
+ : `"${winePathResult}"`;
const winePrefix = this.linuxService.getWinePrefixPath();
if (!winePrefix) {
throw new CustomError("Could not find BSManager WINEPREFIX path", "no-wineprefix");
}
env.WINEPREFIX = winePrefix;
+ Object.assign(env, process.env);
}
return new Promise(resolve => {
From ed5f8fb0737a6930388e70abb87c449e720fb3f7 Mon Sep 17 00:00:00 2001
From: silentrald
Date: Tue, 10 Jun 2025 20:32:09 +0800
Subject: [PATCH 10/21] [fix/634] fixed issue on hovering on last song element
(#876)
* [fix/634] fixed issue on hovering on last song element
* restore itemHeight and add a bottom padding
---------
Co-authored-by: Zagrios <40181755+Zagrios@users.noreply.github.com>
---
.../maps/local-maps-list-panel.component.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/renderer/components/maps-playlists-panel/maps/local-maps-list-panel.component.tsx b/src/renderer/components/maps-playlists-panel/maps/local-maps-list-panel.component.tsx
index 39b670c4..d7e4f7a8 100644
--- a/src/renderer/components/maps-playlists-panel/maps/local-maps-list-panel.component.tsx
+++ b/src/renderer/components/maps-playlists-panel/maps/local-maps-list-panel.component.tsx
@@ -249,7 +249,7 @@ export const LocalMapsListPanel = forwardRef(({
return (
Date: Tue, 10 Jun 2025 20:47:23 +0800
Subject: [PATCH 11/21] [fix] handle downloadMap error within
downloadPlaylistSongs (#873)
---
.../local-playlists-manager.service.ts | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/main/services/additional-content/local-playlists-manager.service.ts b/src/main/services/additional-content/local-playlists-manager.service.ts
index 7f22684b..328cf509 100644
--- a/src/main/services/additional-content/local-playlists-manager.service.ts
+++ b/src/main/services/additional-content/local-playlists-manager.service.ts
@@ -359,7 +359,18 @@ export class LocalPlaylistsManagerService {
continue;
}
- const downloadedMap = await this.maps.downloadMap(mapDetail, version);
+ const downloadedMap = await this.maps.downloadMap(mapDetail, version)
+ .catch(error => {
+ log.error(
+ "Could not download map for playlist",
+ `[${mapDetail.id}] "${mapDetail.name}"`,
+ error
+ );
+ return null;
+ });
+ if (!downloadedMap) {
+ continue;
+ }
progress.data.downloadedMaps.push(downloadedMap);
progress.data.currentDownload = mapDetail;
From 0a30867a1273469650a3470ee743a0f3d5fab8f8 Mon Sep 17 00:00:00 2001
From: Zagrios <40181755+Zagrios@users.noreply.github.com>
Date: Tue, 10 Jun 2025 14:48:59 +0200
Subject: [PATCH 12/21] add patreon
---
assets/jsons/patreons.json | 3 +++
1 file changed, 3 insertions(+)
diff --git a/assets/jsons/patreons.json b/assets/jsons/patreons.json
index 80054f79..e32f2e99 100644
--- a/assets/jsons/patreons.json
+++ b/assets/jsons/patreons.json
@@ -167,5 +167,8 @@
{
"username": "bosspie",
"type": "diamond"
+ },
+ {
+ "username": "Camryn Jackson"
}
]
From 9d945cdcfb8ac48834b58a1c00ed319b57d0f9d3 Mon Sep 17 00:00:00 2001
From: Zagrios <40181755+Zagrios@users.noreply.github.com>
Date: Wed, 11 Jun 2025 14:58:36 +0200
Subject: [PATCH 13/21] update deps
---
package-lock.json | 54 +++++++++++++++++++++++------------------------
package.json | 8 +++----
2 files changed, 31 insertions(+), 31 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index f1c3bf53..12a462ac 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "bs-manager",
- "version": "1.5.2",
+ "version": "1.5.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "bs-manager",
- "version": "1.5.2",
+ "version": "1.5.3",
"hasInstallScript": true,
"license": "GPL-3.0-only",
"dependencies": {
@@ -27,7 +27,7 @@
"electron-updater": "^6.3.9",
"fast-deep-equal": "^3.1.3",
"format-duration": "^3.0.2",
- "framer-motion": "^12.6.3",
+ "framer-motion": "^12.17.0",
"fs-extra": "^11.3.0",
"global-agent": "^3.0.0",
"got": "^14.4.7",
@@ -37,7 +37,7 @@
"node-abi": "^4.2.0",
"node-fetch": "^3.3.2",
"pako": "^2.1.0",
- "protobufjs": "^7.4.0",
+ "protobufjs": "^7.5.3",
"qrcode.react": "^4.2.0",
"query-process": "^0.0.3",
"react": "^18.2.0",
@@ -52,7 +52,7 @@
"rfdc": "^1.4.1",
"rxjs": "^7.8.2",
"sanitize-filename": "^1.6.3",
- "semver": "^7.7.1",
+ "semver": "^7.7.2",
"serialize-error": "^12.0.0",
"striptags": "^4.0.0-alpha.4",
"tailwind-merge": "^3.0.2",
@@ -105,7 +105,7 @@
"css-loader": "^6.10.0",
"css-minimizer-webpack-plugin": "^6.0.0",
"detect-port": "^1.5.1",
- "electron": "^35.1.4",
+ "electron": "^36.4.0",
"electron-builder": "^25.1.8",
"electron-devtools-installer": "^4.0.0",
"electronmon": "^2.0.3",
@@ -11870,9 +11870,9 @@
}
},
"node_modules/electron": {
- "version": "35.1.4",
- "resolved": "https://registry.npmjs.org/electron/-/electron-35.1.4.tgz",
- "integrity": "sha512-8HjE2wqxY//T09Of8k1eTpK/NeTG2FkTyRD+fyKXmec4wZVscGgZcmWFC0HYN4ktyHAjtplpxdFXjtqRnvzBMg==",
+ "version": "36.4.0",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-36.4.0.tgz",
+ "integrity": "sha512-LLOOZEuW5oqvnjC7HBQhIqjIIJAZCIFjQxltQGLfEC7XFsBoZgQ3u3iFj+Kzw68Xj97u1n57Jdt7P98qLvUibQ==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -14433,13 +14433,13 @@
}
},
"node_modules/framer-motion": {
- "version": "12.6.3",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.6.3.tgz",
- "integrity": "sha512-2hsqknz23aloK85bzMc9nSR2/JP+fValQ459ZTVElFQ0xgwR2YqNjYSuDZdFBPOwVCt4Q9jgyTt6hg6sVOALzw==",
+ "version": "12.17.0",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.17.0.tgz",
+ "integrity": "sha512-2hISKgDk49yCLStwG1wf4Kdy/D6eBw9/eRNaWFIYoI9vMQ/Mqd1Fz+gzVlEtxJmtQ9y4IWnXm19/+UXD3dAYAA==",
"license": "MIT",
"dependencies": {
- "motion-dom": "^12.6.3",
- "motion-utils": "^12.6.3",
+ "motion-dom": "^12.17.0",
+ "motion-utils": "^12.12.1",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -19233,18 +19233,18 @@
}
},
"node_modules/motion-dom": {
- "version": "12.6.3",
- "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.6.3.tgz",
- "integrity": "sha512-gRY08RjcnzgFYLemUZ1lo/e9RkBxR+6d4BRvoeZDSeArG4XQXERSPapKl3LNQRu22Sndjf1h+iavgY0O4NrYqA==",
+ "version": "12.17.0",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.17.0.tgz",
+ "integrity": "sha512-FA6/c70R9NKs3g41XDVONzmUUrEmyaifLVGCWtAmHP0usDnX9W+RN/tmbC4EUl0w6yLGvMTOwnWCFVgA5luhRg==",
"license": "MIT",
"dependencies": {
- "motion-utils": "^12.6.3"
+ "motion-utils": "^12.12.1"
}
},
"node_modules/motion-utils": {
- "version": "12.6.3",
- "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.6.3.tgz",
- "integrity": "sha512-R/b3Ia2VxtTNZ4LTEO5pKYau1OUNHOuUfxuP0WFCTDYdHkeTBR9UtxR1cc8mDmKr8PEhmmfnTKGz3rSMjNRoRg==",
+ "version": "12.12.1",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.12.1.tgz",
+ "integrity": "sha512-f9qiqUHm7hWSLlNW8gS9pisnsN7CRFRD58vNjptKdsqFLpkVnX00TNeD6Q0d27V9KzT7ySFyK1TZ/DShfVOv6w==",
"license": "MIT"
},
"node_modules/mrmime": {
@@ -21153,9 +21153,9 @@
}
},
"node_modules/protobufjs": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz",
- "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.3.tgz",
+ "integrity": "sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==",
"hasInstallScript": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -22470,9 +22470,9 @@
}
},
"node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
diff --git a/package.json b/package.json
index 07bfd277..b7347f4d 100644
--- a/package.json
+++ b/package.json
@@ -108,7 +108,7 @@
"css-loader": "^6.10.0",
"css-minimizer-webpack-plugin": "^6.0.0",
"detect-port": "^1.5.1",
- "electron": "^35.1.4",
+ "electron": "^36.4.0",
"electron-builder": "^25.1.8",
"electron-devtools-installer": "^4.0.0",
"electronmon": "^2.0.3",
@@ -170,7 +170,7 @@
"electron-updater": "^6.3.9",
"fast-deep-equal": "^3.1.3",
"format-duration": "^3.0.2",
- "framer-motion": "^12.6.3",
+ "framer-motion": "^12.17.0",
"fs-extra": "^11.3.0",
"global-agent": "^3.0.0",
"got": "^14.4.7",
@@ -180,7 +180,7 @@
"node-abi": "^4.2.0",
"node-fetch": "^3.3.2",
"pako": "^2.1.0",
- "protobufjs": "^7.4.0",
+ "protobufjs": "^7.5.3",
"qrcode.react": "^4.2.0",
"query-process": "^0.0.3",
"react": "^18.2.0",
@@ -195,7 +195,7 @@
"rfdc": "^1.4.1",
"rxjs": "^7.8.2",
"sanitize-filename": "^1.6.3",
- "semver": "^7.7.1",
+ "semver": "^7.7.2",
"serialize-error": "^12.0.0",
"striptags": "^4.0.0-alpha.4",
"tailwind-merge": "^3.0.2",
From feb6ea3f878d5eaa07ba8645d874a2715be70d8f Mon Sep 17 00:00:00 2001
From: silentrald
Date: Fri, 13 Jun 2025 00:58:41 +0800
Subject: [PATCH 14/21] [feat] added auto update option on advance settings for
windows (#773)
* [feat] added auto update option on advance settings for windows
* minor fixes + translations
* [feat] added popover for manual bsm update
* [feat] added logic on update and restart
* [feat] fixed sonar issues and added missing translations
* Fix availve update and current app version were the same
* Add a "See changelog"
* Set autoupdate always enabled by default
---------
Co-authored-by: Zagrios <40181755+Zagrios@users.noreply.github.com>
---
assets/jsons/translations/de.json | 12 +-
assets/jsons/translations/en.json | 12 +-
assets/jsons/translations/es.json | 12 +-
assets/jsons/translations/fr.json | 12 +-
assets/jsons/translations/it.json | 12 +-
assets/jsons/translations/ja.json | 12 +-
assets/jsons/translations/ko.json | 12 +-
assets/jsons/translations/pt-br.json | 12 +-
assets/jsons/translations/ru.json | 12 +-
assets/jsons/translations/tl.json | 12 +-
assets/jsons/translations/uk.json | 12 +-
assets/jsons/translations/zh-tw.json | 12 +-
assets/jsons/translations/zh.json | 12 +-
src/main/ipcs/launcher-ipcs.ts | 5 +
src/main/main.ts | 17 ++-
src/main/services/auto-updater.service.ts | 15 ++-
.../services/static-configuration.service.ts | 6 +-
.../title-bar/title-bar.component.tsx | 105 ++++++++++++++----
.../pages/settings-page.component.tsx | 46 +++++++-
src/shared/models/config.ts | 8 ++
src/shared/models/ipc/ipc-routes.ts | 2 +
21 files changed, 315 insertions(+), 45 deletions(-)
create mode 100644 src/shared/models/config.ts
diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json
index 202810d7..03d88495 100644
--- a/assets/jsons/translations/de.json
+++ b/assets/jsons/translations/de.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "veraltet"
+ "outdated": "veraltet",
+ "update-text": "BSManager {version} ist verfügbar!",
+ "update-button": "Aktualisieren und neu starten",
+ "see-changelog": "Änderungen ansehen"
},
"nav-bar": {
"add-version": "Version hinzufügen",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "Es ist ein Fehler aufgetreten, die Systemproxyeinstellungen können nicht geändert werden."
}
+ },
+ "auto-update": {
+ "title": "Automatische Aktualisierung",
+ "description": "BSManager wird beim Start der Anwendung automatisch aktualisiert.",
+ "error-notification": {
+ "message": "Ein Fehler ist aufgetreten, die Einstellungen für die automatische Aktualisierung können nicht geändert werden."
+ }
}
}
}
diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json
index 4ae373b0..fb33467b 100644
--- a/assets/jsons/translations/en.json
+++ b/assets/jsons/translations/en.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "outdated"
+ "outdated": "outdated",
+ "update-text": "BSManager {version} is available!",
+ "update-button": "Update and Restart",
+ "see-changelog": "See changelog"
},
"nav-bar": {
"add-version": "Add a version",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "An error occurred, unable to change system proxy settings."
}
+ },
+ "auto-update": {
+ "title": "Auto Update",
+ "description": "BSManager will automatically update when you launch the application.",
+ "error-notification": {
+ "message": "An error occurred, unable to change auto update settings."
+ }
}
}
}
diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json
index 507b3be5..18d87f1f 100644
--- a/assets/jsons/translations/es.json
+++ b/assets/jsons/translations/es.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "obsoleto"
+ "outdated": "obsoleto",
+ "update-text": "¡BSManager {version} está disponible!",
+ "update-button": "Actualizar y reiniciar",
+ "see-changelog": "Ver los cambios"
},
"nav-bar": {
"add-version": "Agregar una versión",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "Ocurrió un error, no se pueden cambiar los ajustes del proxy del sistema."
}
+ },
+ "auto-update": {
+ "title": "Actualización automática",
+ "description": "BSManager se actualizará automáticamente al iniciar la aplicación.",
+ "error-notification": {
+ "message": "Ocurrió un error, no se pudo cambiar la configuración de actualización automática."
+ }
}
}
}
diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json
index 5bdac340..40d05cd6 100644
--- a/assets/jsons/translations/fr.json
+++ b/assets/jsons/translations/fr.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "obsolète"
+ "outdated": "obsolète",
+ "update-text": "BSManager {version} est disponible!",
+ "update-button": "Mettre à jour et redémarrer",
+ "see-changelog": "Voir les changements"
},
"nav-bar": {
"add-version": "Ajouter une version",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "Une erreur est survenue, impossible de modifier les paramètres du proxy système."
}
+ },
+ "auto-update": {
+ "title": "Mise à jour automatique",
+ "description": "BSManager se mettra automatiquement à jour au lancement de l'application.",
+ "error-notification": {
+ "message": "Une erreur est survenue, impossible de modifier les paramètres de mise à jour automatique."
+ }
}
}
}
diff --git a/assets/jsons/translations/it.json b/assets/jsons/translations/it.json
index a0e51c9c..c7e542b4 100644
--- a/assets/jsons/translations/it.json
+++ b/assets/jsons/translations/it.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "obsoleta"
+ "outdated": "obsoleta",
+ "update-text": "BSManager {version} è disponibile!",
+ "update-button": "Aggiorna e riavvia",
+ "see-changelog": "Vedi i cambiamenti"
},
"nav-bar": {
"add-version": "Aggiungi una versione",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "C'è stato un errore, impossibile cambiare le impostazioni del proxy di sistema."
}
+ },
+ "auto-update": {
+ "title": "Aggiornamento automatico",
+ "description": "BSManager si aggiornerà automaticamente all'avvio dell'applicazione.",
+ "error-notification": {
+ "message": "Si è verificato un errore, impossibile modificare le impostazioni di aggiornamento automatico."
+ }
}
}
}
diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json
index 47600eb5..d2d05150 100644
--- a/assets/jsons/translations/ja.json
+++ b/assets/jsons/translations/ja.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "時代遅れ"
+ "outdated": "時代遅れ",
+ "update-text": "BSManager {version} が利用可能です!",
+ "update-button": "更新して再起動",
+ "see-changelog": "変更点を確認"
},
"nav-bar": {
"add-version": "バージョンを追加",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "エラーが発生しました。システムプロキシ設定を変更できません。"
}
+ },
+ "auto-update": {
+ "title": "自動更新",
+ "description": "アプリケーション起動時にBSManagerが自動的に更新されます。",
+ "error-notification": {
+ "message": "エラーが発生し、自動更新の設定を変更できませんでした。"
+ }
}
}
}
diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json
index d051216d..24dc70e5 100644
--- a/assets/jsons/translations/ko.json
+++ b/assets/jsons/translations/ko.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "구식"
+ "outdated": "구식",
+ "update-text": "BSManager {version} 가 사용 가능합니다!",
+ "update-button": "업데이트 후 재시작",
+ "see-changelog": "변경 사항 보기"
},
"nav-bar": {
"add-version": "버전 추가",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "오류가 발생했습니다. 시스템 프록시 설정을 변경할 수 없습니다."
}
+ },
+ "auto-update": {
+ "title": "자동 업데이트",
+ "description": "애플리케이션을 실행할 때 BSManager가 자동으로 업데이트됩니다.",
+ "error-notification": {
+ "message": "오류가 발생하여 자동 업데이트 설정을 변경할 수 없습니다."
+ }
}
}
}
diff --git a/assets/jsons/translations/pt-br.json b/assets/jsons/translations/pt-br.json
index 36a86561..76921b70 100644
--- a/assets/jsons/translations/pt-br.json
+++ b/assets/jsons/translations/pt-br.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "Desatualizado"
+ "outdated": "Desatualizado",
+ "update-text": "BSManager {version} está disponível!",
+ "update-button": "Atualizar e reiniciar",
+ "see-changelog": "Ver os changelogs"
},
"nav-bar": {
"add-version": "Adicionar uma versão",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "Um erro aconteceu, não foi possível alterar a configuração de proxy de sistema."
}
+ },
+ "auto-update": {
+ "title": "Atualização automática",
+ "description": "O BSManager será atualizado automaticamente ao iniciar o aplicativo.",
+ "error-notification": {
+ "message": "Ocorreu um erro, não foi possível alterar as configurações de atualização automática."
+ }
}
}
}
diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json
index 5ba36e17..ce71eeda 100644
--- a/assets/jsons/translations/ru.json
+++ b/assets/jsons/translations/ru.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "устаревший"
+ "outdated": "устаревший",
+ "update-text": "BSManager {version} доступен!",
+ "update-button": "Обновить и перезапустить",
+ "see-changelog": "Смотреть изменения"
},
"nav-bar": {
"add-version": "Добавить версию игры",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "Произошла ошибка, не удалось изменить настройки системного прокси."
}
+ },
+ "auto-update": {
+ "title": "Автообновление",
+ "description": "BSManager будет автоматически обновляться при запуске приложения.",
+ "error-notification": {
+ "message": "Произошла ошибка, не удалось изменить настройки автообновления."
+ }
}
}
}
diff --git a/assets/jsons/translations/tl.json b/assets/jsons/translations/tl.json
index 42ea75c4..748bcd43 100644
--- a/assets/jsons/translations/tl.json
+++ b/assets/jsons/translations/tl.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "lipas na"
+ "outdated": "lipas na",
+ "update-text": "Ang BSManager {version} ay available!",
+ "update-button": "I-update at i-restart",
+ "see-changelog": "Tingnan ang mga pagbabago"
},
"nav-bar": {
"add-version": "Magdagdag ng bersyon",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "Nagkaroon ng error, hindi ma-bago ang setting ng system proxy."
}
+ },
+ "auto-update": {
+ "title": "Awtomatikong Pag-update",
+ "description": "Ang BSManager ay awtomatikong mag-uupdate kapag binuksan mo ang aplikasyon.",
+ "error-notification": {
+ "message": "Nagkaroon ng error, hindi mababago ang mga setting ng awtomatikong pag-update."
+ }
}
}
}
diff --git a/assets/jsons/translations/uk.json b/assets/jsons/translations/uk.json
index 260e831c..903d9824 100644
--- a/assets/jsons/translations/uk.json
+++ b/assets/jsons/translations/uk.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "застарілий"
+ "outdated": "застарілий",
+ "update-text": "BSManager {version} доступний!",
+ "update-button": "Оновити та перезапустити",
+ "see-changelog": "Переглянути зміни"
},
"nav-bar": {
"add-version": "Додати версію",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "Сталася помилка, неможливо змінити налаштування системного проксі."
}
+ },
+ "auto-update": {
+ "title": "Автоматичне оновлення (Avtomatychne onovlennya)",
+ "description": "BSManager автоматично оновлюватиметься, коли ви запустите програму.",
+ "error-notification": {
+ "message": "Сталася помилка, неможливо змінити налаштування автоматичного оновлення."
+ }
}
}
}
diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json
index 6d3553f9..84985291 100644
--- a/assets/jsons/translations/zh-tw.json
+++ b/assets/jsons/translations/zh-tw.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "過時"
+ "outdated": "過時",
+ "update-text": "BSManager {version} 可用!",
+ "update-button": "更新並重新啟動",
+ "see-changelog": "查看變更"
},
"nav-bar": {
"add-version": "新增版本",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "發生錯誤,無法更改系統代理設置。"
}
+ },
+ "auto-update": {
+ "title": "自動更新",
+ "description": "啟動應用程式時,BSManager 將自動更新。",
+ "error-notification": {
+ "message": "發生錯誤,無法更改自動更新設定。"
+ }
}
}
}
diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json
index f6ee41f0..5f171a95 100644
--- a/assets/jsons/translations/zh.json
+++ b/assets/jsons/translations/zh.json
@@ -37,7 +37,10 @@
}
},
"title-bar": {
- "outdated": "过时"
+ "outdated": "过时",
+ "update-text": "BSManager {version} 可用!",
+ "update-button": "更新并重新启动",
+ "see-changelog": "查看变更"
},
"nav-bar": {
"add-version": "添加版本",
@@ -337,6 +340,13 @@
"error-notification": {
"message": "发生错误,无法启用系统代理。"
}
+ },
+ "auto-update": {
+ "title": "自动更新",
+ "description": "启动应用程序时,BSManager 将自动更新。",
+ "error-notification": {
+ "message": "发生错误,无法更改自动更新设置。"
+ }
}
}
}
diff --git a/src/main/ipcs/launcher-ipcs.ts b/src/main/ipcs/launcher-ipcs.ts
index 1091cbf7..ee92cdd2 100644
--- a/src/main/ipcs/launcher-ipcs.ts
+++ b/src/main/ipcs/launcher-ipcs.ts
@@ -14,6 +14,11 @@ ipc.on("check-update", (_, reply) => {
reply(from(updaterService.isUpdateAvailable()));
});
+ipc.on("get-available-update", (_, reply) => {
+ const updaterService = AutoUpdaterService.getInstance();
+ reply(from(updaterService.getAvailableUpdate()));
+});
+
ipc.on("install-update", (_, reply) => {
const updaterService = AutoUpdaterService.getInstance();
reply(of(updaterService.quitAndInstall()));
diff --git a/src/main/main.ts b/src/main/main.ts
index 60d4bd92..40c9e9d3 100644
--- a/src/main/main.ts
+++ b/src/main/main.ts
@@ -28,6 +28,7 @@ import { StaticConfigurationService } from "./services/static-configuration.serv
import { configureProxy } from './helpers/proxy.helpers';
import { deleteFileSync, deleteFolderSync } from "./helpers/fs.helpers";
import { tryit } from "shared/helpers/error.helpers";
+import { AutoUpdate } from "shared/models/config";
const isDebug = process.env.NODE_ENV === "development" || process.env.DEBUG_PROD === "true";
const staticConfig = StaticConfigurationService.getInstance();
@@ -121,8 +122,6 @@ if (!gotTheLock) {
app.whenReady().then(() => {
-
-
app.setAppUserModelId(APP_NAME);
initServicesMustBeInitialized();
@@ -134,10 +133,18 @@ if (!gotTheLock) {
DeepLinkService.getInstance().dispatchLinkOpened(deepLink);
} else if (associatedFile) {
FileAssociationService.getInstance().handleFileAssociation(associatedFile);
+ } else if (process.platform === "linux") {
+ createWindow("index.html");
} else {
- createWindow(process.platform === "linux"
- ? "index.html" : "launcher.html"
- );
+ const configService = StaticConfigurationService.getInstance();
+ const autoUpdate = configService.get("auto-update", AutoUpdate.ALWAYS);
+ const update = autoUpdate !== AutoUpdate.NEVER;
+ if (autoUpdate === AutoUpdate.ONCE) {
+ configService.set("auto-update", AutoUpdate.NEVER);
+ }
+
+ // Skip launcher only if autoUpdate is strictly false
+ createWindow(update ? "launcher.html" : "index.html");
}
SteamLauncherService.getInstance().restoreSteamVR();
diff --git a/src/main/services/auto-updater.service.ts b/src/main/services/auto-updater.service.ts
index 9a054115..fd8a6a4f 100644
--- a/src/main/services/auto-updater.service.ts
+++ b/src/main/services/auto-updater.service.ts
@@ -1,8 +1,9 @@
-import { autoUpdater, CancellationToken, ProgressInfo } from "electron-updater";
+import { autoUpdater, CancellationToken, ProgressInfo, UpdateInfo } from "electron-updater";
import log from "electron-log";
import { gt } from "semver";
import { Progression } from "main/helpers/fs.helpers";
import { Observable } from "rxjs";
+import { safeGt } from "shared/helpers/semver.helpers";
export class AutoUpdaterService {
private static instance: AutoUpdaterService;
@@ -31,6 +32,18 @@ export class AutoUpdaterService {
});
}
+ public async getAvailableUpdate(): Promise {
+ return autoUpdater.checkForUpdates().then(info => {
+ if (info?.updateInfo && safeGt(info.updateInfo.version, autoUpdater.currentVersion.version)) {
+ return info.updateInfo;
+ }
+ return null;
+ }).catch((error: Error): UpdateInfo | null => {
+ log.error("Could not get update", error);
+ return null;
+ });
+ }
+
public downloadUpdate(): Observable {
return new Observable(observer => {
diff --git a/src/main/services/static-configuration.service.ts b/src/main/services/static-configuration.service.ts
index 47e99245..4244f5a2 100644
--- a/src/main/services/static-configuration.service.ts
+++ b/src/main/services/static-configuration.service.ts
@@ -5,6 +5,7 @@ import { PROTON_BINARY_PREFIX, WINE_BINARY_PREFIX } from "main/constants";
import { Observable, Subject } from "rxjs";
import { CustomError } from "shared/models/exceptions/custom-error.class";
import { BSVersion } from "shared/bs-version.interface";
+import { AutoUpdate } from "shared/models/config";
export class StaticConfigurationService {
private static instance: StaticConfigurationService;
@@ -30,8 +31,8 @@ export class StaticConfigurationService {
return this.store.has(key);
}
- public get(key: K): StaticConfigKeyValues[K] {
- return this.store.get(key) as StaticConfigKeyValues[K];
+ public get(key: K, defaultValue?: StaticConfigKeyValues[K]): StaticConfigKeyValues[K] {
+ return this.store.get(key, defaultValue) as StaticConfigKeyValues[K];
}
public take(key: K, cb: (val: StaticConfigKeyValues[K]) => void): void {
@@ -90,6 +91,7 @@ export interface StaticConfigKeyValues {
"use-symlinks": boolean;
"use-system-proxy": boolean;
"last-version-launched": BSVersion;
+ "auto-update": AutoUpdate;
// Linux Specific static configs
"proton-folder": string;
diff --git a/src/renderer/components/title-bar/title-bar.component.tsx b/src/renderer/components/title-bar/title-bar.component.tsx
index b17647e6..73ef4401 100644
--- a/src/renderer/components/title-bar/title-bar.component.tsx
+++ b/src/renderer/components/title-bar/title-bar.component.tsx
@@ -12,36 +12,47 @@ import { useService } from "renderer/hooks/use-service.hook";
import { lastValueFrom } from "rxjs";
import { useWindowControls } from "renderer/hooks/use-window-controls.hook";
import { useTranslationV2 } from "renderer/hooks/use-translation.hook";
+import Tippy from "@tippyjs/react";
+import { StaticConfigurationService } from "renderer/services/static-configuration.service";
+import { AutoUpdate } from "shared/models/config";
+import { UpdateInfo } from "electron-updater";
-function TitleBarTags() {
+function useVersion() {
const ipcService = useService(IpcService);
- const t = useTranslationV2();
- const [previewVersion, setPreviewVersion] = useState("");
- const [outdated, setOutdated] = useState(false);
+ const [currentVersion, setCurrentVersion] = useState("");
+ const [latestVersion, setLatestVersion] = useState(null);
useEffect(() => {
- const requests: Promise[] = [
- lastValueFrom(ipcService.sendV2("current-version"))
- ];
- if (window.electron.platform === "linux") {
- requests.push(lastValueFrom(ipcService.sendV2("check-update")));
- }
-
- Promise.all(requests).then(([ currentVersion, outdated ]) => {
- handlePrerelease(currentVersion);
- setOutdated(outdated);
+ Promise.all([
+ lastValueFrom(ipcService.sendV2("current-version")),
+ lastValueFrom(ipcService.sendV2("get-available-update"))
+ ]).then(([ currentVersion, latestVersion ]) => {
+ setCurrentVersion(currentVersion);
+ setLatestVersion(latestVersion);
});
}, []);
- const handlePrerelease = (version: string) => {
+ return { currentVersion, latestVersion };
+}
+
+function TitleBarTags({ version, latestVersion }: Readonly<{
+ version: string;
+ latestVersion: UpdateInfo | null;
+}>) {
+ const t = useTranslationV2();
+
+ const previewVersion = (() => {
if (version.toLowerCase().includes("alpha")) {
- return setPreviewVersion("ALPHA");
+ return "ALPHA";
}
+
if (version.toLowerCase().includes("beta")) {
- return setPreviewVersion("BETA");
+ return "BETA";
}
- }
+
+ return "";
+ })();
return <>
{previewVersion &&
@@ -49,7 +60,7 @@ function TitleBarTags() {
{previewVersion}
}
- {outdated &&
+ {latestVersion &&
{t.text("title-bar.outdated")}
@@ -57,12 +68,65 @@ function TitleBarTags() {
>;
}
+function AutoUpdateButton({ latestVersion }: Readonly<{
+ latestVersion: UpdateInfo | null;
+}>) {
+ const configService = useService(StaticConfigurationService);
+ const ipcService = useService(IpcService);
+ const { text: t } = useTranslationV2();
+
+ const isLinux = window.electron.platform === "linux";
+
+ const updateAndRestart = async () => {
+ await configService.set("auto-update", AutoUpdate.ONCE);
+ await lastValueFrom(ipcService.sendV2("restart-app"));
+ };
+
+
+ const renderTippyContent = () => {
+ return (
+
+
{t("title-bar.update-text", { version: latestVersion.version })}
+ {latestVersion?.version ? (
+
{t("title-bar.see-changelog")}
+ ) : null}
+ {!isLinux &&
+
updateAndRestart()}
+ />
+ }
+
+ )
+ }
+
+ return latestVersion && (
+
+
+
+ );
+}
+
export default function TitleBar({ template = "index.html" }: { template: AppWindow }) {
const audio = useService(AudioPlayerService);
const windowControls = useWindowControls();
const volume = useObservable(() => audio.volume$, audio.volume);
const color = useThemeColor("first-color");
+ const { currentVersion, latestVersion } = useVersion();
const [maximized, setMaximized] = useState(false);
@@ -107,7 +171,7 @@ export default function TitleBar({ template = "index.html" }: { template: AppWin
@@ -117,6 +181,7 @@ export default function TitleBar({ template = "index.html" }: { template: AppWin
audio.toggleMute()} />
+