From c2e77f2520fa2a5a1574c579e53ddedb4d9d6f0b Mon Sep 17 00:00:00 2001 From: silentrald Date: Thu, 5 Dec 2024 21:04:11 +0800 Subject: [PATCH] [bugfix] use static config when install files are readonly like NixOS & flatpak --- src/main/services/bs-version-lib.service.ts | 38 ++++++++++++------- src/main/services/linux.service.ts | 12 +----- .../services/static-configuration.service.ts | 2 + 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/main/services/bs-version-lib.service.ts b/src/main/services/bs-version-lib.service.ts index eac8d0f1..0cb99c5d 100644 --- a/src/main/services/bs-version-lib.service.ts +++ b/src/main/services/bs-version-lib.service.ts @@ -3,10 +3,11 @@ import path from "path"; import { writeFileSync } from "fs"; import { BSVersion } from "shared/bs-version.interface"; import { RequestService } from "./request.service"; -import { pathExistsSync, readJSON } from "fs-extra"; +import { readJSON } from "fs-extra"; import { allSettled } from "../../shared/helpers/promise.helpers"; import { LinuxService } from "./linux.service"; import { IS_FLATPAK } from "main/constants"; +import { StaticConfigurationService } from "./static-configuration.service"; export class BSVersionLibService { private readonly REMOTE_BS_VERSIONS_URL: string = "https://raw.githubusercontent.com/Zagrios/bs-manager/master/assets/jsons/bs-versions.json"; @@ -17,6 +18,7 @@ export class BSVersionLibService { private linuxService: LinuxService; private utilsService: UtilsService; private requestService: RequestService; + private configService: StaticConfigurationService; private bsVersions: BSVersion[]; @@ -24,6 +26,7 @@ export class BSVersionLibService { this.linuxService = LinuxService.getInstance(); this.utilsService = UtilsService.getInstance(); this.requestService = RequestService.getInstance(); + this.configService = StaticConfigurationService.getInstance(); } public static getInstance(): BSVersionLibService { @@ -37,25 +40,32 @@ export class BSVersionLibService { return this.requestService.getJSON(this.REMOTE_BS_VERSIONS_URL).then(res => res.data); } + private async shouldLoadFromConfig(): Promise { + // Some special cases of readonly memory installations + return IS_FLATPAK || this.linuxService.isNixOS(); + } + private async getLocalVersions(): Promise { - if (IS_FLATPAK) { - const flatpakVersionsPath = path.join(this.linuxService.getFlatpakLocalVersionFolder(), this.VERSIONS_FILE); - if (pathExistsSync(flatpakVersionsPath)) { - return readJSON(flatpakVersionsPath); - } + const localVersionsPath = path.join(this.utilsService.getAssestsJsonsPath(), this.VERSIONS_FILE); + + if (!this.shouldLoadFromConfig()) { + return readJSON(localVersionsPath); } - const localVersionsPath = path.join(this.utilsService.getAssestsJsonsPath(), this.VERSIONS_FILE); - return readJSON(localVersionsPath); + let versions = this.configService.get("versions"); + if (!versions) { + versions = await readJSON(localVersionsPath) + } + return versions; } private async updateLocalVersions(versions: BSVersion[]): Promise { - const localVersionsPath = path.join( - IS_FLATPAK - ? this.linuxService.getFlatpakLocalVersionFolder() - : this.utilsService.getAssestsJsonsPath(), - this.VERSIONS_FILE - ); + if (this.shouldLoadFromConfig()) { + this.configService.set("versions", versions); + return; + } + + const localVersionsPath = path.join(this.utilsService.getAssestsJsonsPath(), this.VERSIONS_FILE); writeFileSync(localVersionsPath, JSON.stringify(versions, null, "\t"), { encoding: "utf-8", flag: "w" }); } diff --git a/src/main/services/linux.service.ts b/src/main/services/linux.service.ts index 5985eaee..c03364f7 100644 --- a/src/main/services/linux.service.ts +++ b/src/main/services/linux.service.ts @@ -122,19 +122,9 @@ export class LinuxService { return this.protonPrefix; } - // === Flatpak Specific === // - - public getFlatpakLocalVersionFolder(): string { - return path.join( - app.getPath("home"), - ".var", "app", config.appId, - "resources", "assets", "jsons" - ); - } - // === NixOS Specific === // - private async isNixOS(): Promise { + public async isNixOS(): Promise { if (this.nixOS !== undefined) { return this.nixOS; } diff --git a/src/main/services/static-configuration.service.ts b/src/main/services/static-configuration.service.ts index c1386130..1748b42d 100644 --- a/src/main/services/static-configuration.service.ts +++ b/src/main/services/static-configuration.service.ts @@ -4,6 +4,7 @@ import path from "path"; 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"; export class StaticConfigurationService { private static instance: StaticConfigurationService; @@ -90,6 +91,7 @@ export interface StaticConfigKeyValues { // Linux Specific static configs "proton-folder": string; + "versions": BSVersion[]; }; export type StaticConfigKeys = keyof StaticConfigKeyValues;