diff --git a/assets/jsons/changelogs.json b/assets/jsons/changelogs.json
deleted file mode 100644
index be3ae31d3..000000000
--- a/assets/jsons/changelogs.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "1.5.0-alpha.1":{
- "htmlBody" :"BSManager continues to get better, thanks to your continued support and contributions!
🎈🎉🎈Note: This is an alpha release, encountering bugs is expected. Please file new issues for any bugs you find.
Features
- Added playlist support
- Added Linux support (Thanks to @Insprill)
- Added reset button to reset values when editing a Beat Saber version (Thanks to @Liborsaf)
- Added a changelog modal
Fixes
- Fixed an issue where switching between Beat Saber versions too quickly displayed mods for the wrong version
- Fixed an issue where the launch window from a shortcut would never close
- Advanced launch arguments are used even when the input field is closed
- Fixed an issue where having many maps caused some maps to not have their information loaded
Other changes
- .NET Framework is no longer required
- Clear English translations for the Steam credentials popup (Thanks to @Aeywoo)
- NSFW models are now blurred when browsing for models
- When no mods are available for a Beat Saber version, the version number is now shown
- Mods load faster
- After a first full maps loading, maps load almost instantly
- Improved performance in lists with lot of contents
",
- "title" : "What's new ?",
- "timestamp" : 1721048400,
- "version" : "1.5.0-alpha.1"
- },
- "1.5.0-alpha.2":{
- "htmlBody" :"BSManager continues to get better, thanks to your continued support and contributions!🎈🎉🎈Note: This is an alpha release, encountering bugs is expected. Please file new issues for any bugs you find.
Alpha changes
- Fixed an issue where BSIPA could not be installed if the BS version's path contained spaces #523
- Fixed a crash when changing audio volume #518
- Fixed an issue where playlist maps with a malformed hash were not loaded #517
- Improved reliability of reading maps from a playlist file #517
- Playlists in sub-folders are now loaded #514
- Fixed a crash when loading an invalid playlist file #513
Features
- Added playlist support
- Added Linux support (Thanks to @Insprill)
- Added reset button to reset values when editing a Beat Saber version (Thanks to @Liborsaf)
- Added a changelog modal
Fixes
- Fixed an issue where switching between Beat Saber versions too quickly displayed mods for the wrong version #472
- Fixed an issue where the launch window from a shortcut would never close #485
- Advanced launch arguments are used even when the input field is closed #496
- Fixed an issue where having many maps caused some maps to not have their information loaded #503
- Fixed an issue where downloading maps sometimes resulted in a timeout error #524
- Fixed an issue where the duration of maps could be wrong in some cases #522
Other changes
- .NET Framework is no longer required
- Clear English translations for the Steam credentials popup (Thanks to @Aeywoo)
- NSFW models are now blurred when browsing for models
- When no mods are available for a Beat Saber version, the version number is now shown
- Mods load faster
- After a first full maps loading, maps load almost instantly
- Improved performance in lists with lot of contents
",
- "title" : "What's new ?",
- "timestamp" : 1721665382,
- "version" : "1.5.0-alpha.2"
- }
-}
diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json
index aba8cb279..92fd67324 100644
--- a/assets/jsons/translations/de.json
+++ b/assets/jsons/translations/de.json
@@ -228,10 +228,6 @@
"open-logs": "Protokolle öffnen"
}
},
- "changelogs": {
- "open" : "🚀 Neues im Changelog entdecken!",
- "not-founds": "😕 Hoppla, kein Changelog zu sehen!"
- },
"advanced": {
"title": "Erweiterte",
"description": "Erweiterte Einstellungen für BSManager.",
diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json
index 97d3c90a3..a0517d941 100644
--- a/assets/jsons/translations/en.json
+++ b/assets/jsons/translations/en.json
@@ -228,10 +228,6 @@
"open-logs": "Open logs"
}
},
- "changelogs": {
- "open": "🚀 Check Out the Changelog!",
- "not-founds": "😕 Oops, No Changelog Here!"
- },
"advanced": {
"title": "Advanced",
"description": "Advanced settings for BSManager.",
diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json
index 9d00c590d..bb4c22986 100644
--- a/assets/jsons/translations/es.json
+++ b/assets/jsons/translations/es.json
@@ -228,10 +228,6 @@
"open-logs": "Abrir los registros"
}
},
- "changelogs": {
- "open": "🚀 ¡Descubre lo nuevo en el Changelog!",
- "not-founds": "😕 Uy, ¡Changelog no encontrado!"
- },
"advanced": {
"title": "Avanzados",
"description": "Configuraciones avanzadas para BSManager.",
diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json
index 479212315..ef4ff4962 100644
--- a/assets/jsons/translations/fr.json
+++ b/assets/jsons/translations/fr.json
@@ -228,10 +228,6 @@
"open-logs": "Ouvrir les logs"
}
},
- "changelogs": {
- "open" : "🚀 Jetez un œil au Changelog !",
- "not-founds": "😕 Oups, Changelog introuvable !"
- },
"advanced": {
"title": "Avancés",
"description": "Paramètres avancés pour BSManager.",
diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json
index 7c4ce289f..76f8011f9 100644
--- a/assets/jsons/translations/ja.json
+++ b/assets/jsons/translations/ja.json
@@ -228,10 +228,6 @@
"open-logs": "ログを表示"
}
},
- "changelogs": {
- "open" : "🚀 チェンジログを覗いてみて!",
- "not-founds": "😕 あれ、チェンジログが見当たらない!"
- },
"advanced": {
"title": "高度な設定",
"description": "BSManagerの高度な設定。",
diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json
index e7f2941e4..a2381fcd5 100644
--- a/assets/jsons/translations/ko.json
+++ b/assets/jsons/translations/ko.json
@@ -228,10 +228,6 @@
"open-logs": "로그 보기"
}
},
- "changelogs": {
- "open": "🚀 변경 로그를 확인해보세요!",
- "not-founds": "😕 변경 로그가 보이지 않습니다!"
- },
"advanced": {
"title": "고급 설정",
"description": "BSManager의 고급 설정입니다.",
diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json
index d4fdd86ab..f2044880d 100644
--- a/assets/jsons/translations/ru.json
+++ b/assets/jsons/translations/ru.json
@@ -228,10 +228,6 @@
"open-logs": "Открыть логи"
}
},
- "changelogs": {
- "open" : "🚀 Изучаем Changelog!",
- "not-founds": "😕 Ой, Changelog нигде не видно!"
- },
"advanced": {
"title": "Дополнительные",
"description": "Дополнительные настройки для BSManager.",
diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json
index a83783cd9..55fc0e516 100644
--- a/assets/jsons/translations/zh-tw.json
+++ b/assets/jsons/translations/zh-tw.json
@@ -228,10 +228,6 @@
"open-logs": "打開日誌"
}
},
- "changelogs": {
- "open" : "🚀 探索更新日誌!",
- "not-founds": "😕 噢,找不到更新日誌!"
- },
"advanced": {
"title": "高级设置",
"description": "BSManager的高级设置。",
diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json
index 58ea8f579..9489c6a6d 100644
--- a/assets/jsons/translations/zh.json
+++ b/assets/jsons/translations/zh.json
@@ -228,10 +228,6 @@
"open-logs": "打开日志"
}
},
- "changelogs": {
- "open" : "🚀 探索更新日志!",
- "not-founds": "😕 哎呀,找不到更新日志!"
- },
"advanced": {
"title": "高级设置",
"description": "BSManager的高级设置。",
diff --git a/package-lock.json b/package-lock.json
index 93d359be1..b7b29286f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,7 +20,6 @@
"color": "^4.2.3",
"crypto-js": "^4.2.0",
"dateformat": "^5.0.3",
- "dompurify": "^3.0.9",
"dot-prop": "^8.0.2",
"electron-debug": "^3.2.0",
"electron-log": "^4.4.8",
@@ -76,7 +75,6 @@
"@types/color": "^3.0.3",
"@types/crypto-js": "^4.2.1",
"@types/dateformat": "^5.0.0",
- "@types/dompurify": "^3.0.5",
"@types/got": "^9.6.12",
"@types/jest": "^29.5.11",
"@types/node": "22.8.6",
@@ -6106,15 +6104,6 @@
"@types/ms": "*"
}
},
- "node_modules/@types/dompurify": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz",
- "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==",
- "dev": true,
- "dependencies": {
- "@types/trusted-types": "*"
- }
- },
"node_modules/@types/eslint": {
"version": "8.4.10",
"dev": true,
@@ -6540,12 +6529,6 @@
"integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
"dev": true
},
- "node_modules/@types/trusted-types": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
- "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
- "dev": true
- },
"node_modules/@types/use-double-click": {
"version": "1.0.4",
"dev": true,
@@ -10616,11 +10599,6 @@
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
- "node_modules/dompurify": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.9.tgz",
- "integrity": "sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ=="
- },
"node_modules/domutils": {
"version": "2.8.0",
"dev": true,
diff --git a/package.json b/package.json
index 5342b2b54..0eb92ac48 100644
--- a/package.json
+++ b/package.json
@@ -156,7 +156,6 @@
"@types/color": "^3.0.3",
"@types/crypto-js": "^4.2.1",
"@types/dateformat": "^5.0.0",
- "@types/dompurify": "^3.0.5",
"@types/got": "^9.6.12",
"@types/jest": "^29.5.11",
"@types/node": "22.8.6",
@@ -241,7 +240,6 @@
"color": "^4.2.3",
"crypto-js": "^4.2.0",
"dateformat": "^5.0.3",
- "dompurify": "^3.0.9",
"dot-prop": "^8.0.2",
"electron-debug": "^3.2.0",
"electron-log": "^4.4.8",
diff --git a/src/renderer/components/modal/modal-types/chabgelog-modal/changelog-modal.component.css b/src/renderer/components/modal/modal-types/chabgelog-modal/changelog-modal.component.css
deleted file mode 100644
index fa08a62be..000000000
--- a/src/renderer/components/modal/modal-types/chabgelog-modal/changelog-modal.component.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.content * {
- all: revert;
-}
diff --git a/src/renderer/components/modal/modal-types/chabgelog-modal/changelog-modal.component.tsx b/src/renderer/components/modal/modal-types/chabgelog-modal/changelog-modal.component.tsx
deleted file mode 100644
index d4e569660..000000000
--- a/src/renderer/components/modal/modal-types/chabgelog-modal/changelog-modal.component.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import { BsmButton } from "renderer/components/shared/bsm-button.component";
-import { ChangelogVersion } from "renderer/services/auto-updater.service";
-import { LinkOpenerService } from "renderer/services/link-opener.service";
-import { useService } from "renderer/hooks/use-service.hook";
-import { ModalComponent } from "renderer/services/modale.service";
-import DOMPurify from 'dompurify';
-import './changelog-modal.component.css';
-import Tippy from "@tippyjs/react";
-
-export const ChangelogModal: ModalComponent = ({ options: {data: changelog} }) => {
-
- const linkOpener = useService(LinkOpenerService);
- const openGithub = () => linkOpener.open("https://github.com/Zagrios/bs-manager");
- const openTwitter = () => linkOpener.open("https://twitter.com/BSManager_");
- const openSupportPage = () => linkOpener.open("https://www.patreon.com/bsmanager");
- const openDiscord = () => linkOpener.open("https://discord.gg/uSqbHVpKdV");
- const openWebSite = () => linkOpener.open("https://bsmanager.io/");
- const date = changelog?.timestamp ? new Date(changelog.timestamp * 1000).toLocaleDateString() : '';
-
- return (
-
- )
-}
diff --git a/src/renderer/pages/settings-page.component.tsx b/src/renderer/pages/settings-page.component.tsx
index 4637c61bd..46d44aa19 100644
--- a/src/renderer/pages/settings-page.component.tsx
+++ b/src/renderer/pages/settings-page.component.tsx
@@ -39,15 +39,13 @@ import { BsStore } from "shared/models/bs-store.enum";
import { SteamIcon } from "renderer/components/svgs/icons/steam-icon.component";
import { OculusIcon } from "renderer/components/svgs/icons/oculus-icon.component";
import { BsDownloaderService } from "renderer/services/bs-version-download/bs-downloader.service";
-import { AutoUpdaterService } from "renderer/services/auto-updater.service";
-import BeatWaitingImg from "../../../assets/images/apngs/beat-waiting.png";
import BeatConflict from "../../../assets/images/apngs/beat-conflict.png";
-import { logRenderError } from "renderer";
import { SettingToogleSwitchGrid } from "renderer/components/settings/setting-toogle-switch-grid.component";
import { BasicModal } from "renderer/components/modal/basic-modal.component";
import { StaticConfigurationService } from "renderer/services/static-configuration.service";
import { tryit } from "shared/helpers/error.helpers";
import { InstallationLocationService } from "renderer/services/installation-location.service";
+import { AutoUpdaterService } from "renderer/services/auto-updater.service";
export function SettingsPage() {
@@ -65,9 +63,9 @@ export function SettingsPage() {
const playlistsManager = useService(PlaylistsManagerService);
const modelsManager = useService(ModelsManagerService);
const versionLinker = useService(VersionFolderLinkerService);
- const autoUpdater = useService(AutoUpdaterService);
const staticConfig = useService(StaticConfigurationService);
const installationLocationService = useService(InstallationLocationService);
+ const autoUpdater = useService(AutoUpdaterService);
const { firstColor, secondColor } = useThemeColor();
@@ -100,10 +98,7 @@ export function SettingsPage() {
const [hasDownloaderSession, setHasDownloaderSession] = useState(false);
const [hardwareAccelerationEnabled, setHardwareAccelerationEnabled] = useState(true);
const [useSymlink, setUseSymlink] = useState(false);
- const appVersion = useObservable(() => ipcService.sendV2("current-version"));
-
- const [isChangelogAvailable, setIsChangelogAvailable] = useState(true);
- const [changlogsLoading, setChanglogsLoading] = useState(false);
+ const appVersion = useObservable(() => autoUpdater.getAppVersion());
useEffect(() => {
loadInstallationFolder();
@@ -161,24 +156,6 @@ export function SettingsPage() {
i18nService.setLanguage(item.value);
};
- const handleVersionClick = async () => {
- let isChangelogResolved = false;
- const timeoutId = setTimeout(() => setChanglogsLoading(() => !isChangelogResolved), 100);
-
- await autoUpdater.showChangelog(await lastValueFrom(autoUpdater.getAppVersion()))
- .then(() => {
- setIsChangelogAvailable(() => true);
- })
- .catch(err => {
- logRenderError(err);
- setIsChangelogAvailable(() => false);
- })
- .finally(() => { isChangelogResolved = true; });
-
- setChanglogsLoading(() => false);
- clearTimeout(timeoutId);
- };
-
const setDefaultProtonFolder = async () => {
if (!progressBarService.require()) {
return;
@@ -605,12 +582,7 @@ export function SettingsPage() {
]}/>
-
-
-
-
-
-
+ v{appVersion}
diff --git a/src/renderer/services/auto-updater.service.ts b/src/renderer/services/auto-updater.service.ts
index 912c7fe6f..ccad3fae5 100644
--- a/src/renderer/services/auto-updater.service.ts
+++ b/src/renderer/services/auto-updater.service.ts
@@ -1,8 +1,5 @@
import { IpcService } from "./ipc.service";
import { ProgressBarService } from "./progress-bar.service";
-import { ModalService } from "renderer/services/modale.service";
-import { ChangelogModal } from "renderer/components/modal/modal-types/chabgelog-modal/changelog-modal.component";
-import { ConfigurationService } from "./configuration.service";
import { Observable, lastValueFrom } from "rxjs";
import { Progression } from "main/helpers/fs.helpers";
@@ -22,12 +19,6 @@ export class AutoUpdaterService {
private progressService: ProgressBarService;
private ipcService: IpcService;
- private modal: ModalService;
-
- private configurationService: ConfigurationService;
-
- private cacheChangelog: Changelog;
-
public static getInstance(): AutoUpdaterService {
if (!AutoUpdaterService.instance) {
AutoUpdaterService.instance = new AutoUpdaterService();
@@ -38,8 +29,6 @@ export class AutoUpdaterService {
private constructor() {
this.progressService = ProgressBarService.getInstance();
this.ipcService = IpcService.getInstance();
- this.modal = ModalService.getInstance();
- this.configurationService = ConfigurationService.getInstance();
}
public isUpdateAvailable(): Promise {
@@ -64,56 +53,8 @@ export class AutoUpdaterService {
return lastValueFrom(this.ipcService.sendV2("install-update"));
}
- public getLastAppVersion(): string {
- return this.configurationService.get("last-app-version");
- }
-
- public setLastAppVersion(value : string){
- this.configurationService.set("last-app-version", value);
- }
-
- private async getChangelog(): Promise {
- if (this.cacheChangelog) {
- return this.cacheChangelog;
- }
-
- const path = `https://raw.githubusercontent.com/Zagrios/bs-manager/master/assets/jsons/changelogs.json`
- const response = await fetch(path);
- if (!response.ok) {
- throw new Error(`Failed to fetch changelogs (${response.status})`);
- }
-
- const data = await response.json();
- if (!data) {
- throw new Error(`Failed to parse changelogs`);
- }
-
- this.cacheChangelog = data;
- return data;
- }
-
- private async getChangelogVersion(version:string): Promise {
- const changelogs = await this.getChangelog();
-
- const changelogVersion = changelogs[version];
- if (!changelogVersion) {
- throw new Error(`No changelog found for this version (${version})`);
- }
-
- return changelogVersion;
- }
-
public getAppVersion() : Observable {
return this.ipcService.sendV2("current-version");
}
- public async showChangelog(version:string): Promise{
- if (version.toLowerCase().includes("alpha")) {
- throw new Error("Alpha version, skipping changelog");
- }
-
- const changelog = await this.getChangelogVersion(version);
-
- this.modal.openModal(ChangelogModal, {data: changelog});
- }
}
diff --git a/src/renderer/windows/App.tsx b/src/renderer/windows/App.tsx
index 44ca9e0a0..4982b93ed 100644
--- a/src/renderer/windows/App.tsx
+++ b/src/renderer/windows/App.tsx
@@ -18,16 +18,14 @@ import { MapsManagerService } from "renderer/services/maps-manager.service";
import { PlaylistsManagerService } from "renderer/services/playlists-manager.service";
import { ModelsManagerService } from "renderer/services/models-management/models-manager.service";
import { NotificationService } from "renderer/services/notification.service";
-import { lastValueFrom, timer } from "rxjs";
+import { timer } from "rxjs";
import { ConfigurationService } from "renderer/services/configuration.service";
import { OsDiagnosticService } from "renderer/services/os-diagnostic.service";
import { useService } from "renderer/hooks/use-service.hook";
-import { AutoUpdaterService } from "renderer/services/auto-updater.service";
import { SetupService } from "renderer/services/setup.service";
-import { gt, parse } from "semver"
-import { logRenderError } from "renderer";
export default function App() {
+
useService(OsDiagnosticService);
const pageState = useService(PageStateService);
const maps = useService(MapsManagerService);
@@ -35,43 +33,18 @@ export default function App() {
const models = useService(ModelsManagerService);
const notification = useService(NotificationService);
const config = useService(ConfigurationService);
- const autoUpdater = useService(AutoUpdaterService);
const setup = useService(SetupService);
const location = useLocation();
const navigate = useNavigate();
useEffect(() => {
- checkIsUpdated();
setup.check()
.then(() => {
checkOneClicks();
})
}, []);
- const checkIsUpdated = async () => {
- const appVersion = await lastValueFrom(autoUpdater.getAppVersion());
- const lastAppVersion = autoUpdater.getLastAppVersion();
-
- if(!lastAppVersion) {
- return;
- }
-
- if (lastAppVersion.toLowerCase().includes("alpha")) {
- autoUpdater.setLastAppVersion("0"); // Reset last app version if it's an alpha version for users with alpha versions in the var stored.
- }
-
- if (appVersion.toLowerCase().includes("alpha")) {
- return;
- }
-
- autoUpdater.setLastAppVersion(appVersion);
-
- if (parse(lastAppVersion) && gt(appVersion, lastAppVersion)) {
- await autoUpdater.showChangelog(appVersion).catch(logRenderError);
- }
- };
-
const checkOneClicks = async () => {
if (config.get("not-remind-oneclick") === true) {