From 7b22387fc563348c5435483078ba855beabaf569 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Wed, 27 Dec 2023 00:40:32 +0100 Subject: [PATCH] [chore] add id in version's metadatas for future features --- src/main/services/bs-local-version.service.ts | 54 +++++++++---------- .../bs-oculus-downloader.service.ts | 6 +-- .../bs-steam-downloader.service.ts | 4 +- src/shared/bs-version.interface.ts | 1 + 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/main/services/bs-local-version.service.ts b/src/main/services/bs-local-version.service.ts index d58dbe05..eb33c388 100644 --- a/src/main/services/bs-local-version.service.ts +++ b/src/main/services/bs-local-version.service.ts @@ -18,6 +18,8 @@ import readline from "readline"; import { Observable, Subject, catchError, finalize, from, map, switchMap, throwError } from "rxjs"; import { BsStore } from "../../shared/models/bs-store.enum"; import { CustomError } from "../../shared/models/exceptions/custom-error.class"; +import crypto from "crypto"; + export class BSLocalVersionService { private static instance: BSLocalVersionService; @@ -119,7 +121,14 @@ export class BSLocalVersionService { folderVersion.ino = folderStats.ino; } - folderVersion.metadata = await this.getAllVersionMetadata(folderVersion, { store: BsStore.STEAM }); + + let metadata = await this.getAllVersionMetadata(folderVersion); + + // Will be removed in future version. It just to prepare future features + if(!metadata?.id){ + metadata = await this.initVersionMetadata(folderVersion, metadata ?? { store: BsStore.STEAM }); + } + folderVersion.metadata = metadata; const customVersion = this.getCustomVersions().find(customVersion => { return customVersion.BSVersion === folderVersion.BSVersion && customVersion.name === folderVersion.name; @@ -130,36 +139,27 @@ export class BSLocalVersionService { return folderVersion; } - public getAllVersionMetadata(version: BSVersion, defaultMetadata?: BSVersionMetadata): Promise{ + private async writeVersionMetadata(version: BSVersion, metadata: BSVersionMetadata): Promise{ + const versionPath = await this.getVersionPath(version); + const metadataPath = path.join(versionPath, this.METADATA_FILE); + return writeFile(metadataPath, JSON.stringify(metadata)); + } + + public initVersionMetadata(version: BSVersion, metadata: Omit): Promise{ + const firstMetadata = { id: crypto.randomUUID(), ...metadata }; + return this.writeVersionMetadata(version, firstMetadata).then(() => firstMetadata).catch(err => { + log.error("initVersionMetadata error", err); + return firstMetadata; + }); + } + + public getAllVersionMetadata(version: BSVersion): Promise{ return (async () => { const versionPath = await this.getVersionPath(version); const contents = await readFile(path.join(versionPath, this.METADATA_FILE), "utf-8"); return JSON.parse(contents); })().catch(e => { - log.warn("Not a critical error", e); - return {}; - }).then(metadata => ({...defaultMetadata, ...metadata})); - } - - public getVersionMetadata(version: BSVersion, key: K, defaultValue?: T): Promise{ - return (async () => { - const metadata = await this.getAllVersionMetadata(version); - return metadata?.[key]; - })().catch(e => { - log.warn("Not a critical error", e); - return null; - }).then(value => (value ?? defaultValue) as T); - } - - public setVersionMetadata(version: BSVersion, key: K, value: T): Promise{ - return (async () => { - const versionPath = await this.getVersionPath(version); - const metadataPath = path.join(versionPath, this.METADATA_FILE); - const metadata = await this.getAllVersionMetadata(version) ?? ({} as BSVersionMetadata); - metadata[key] = value; - await writeFile(metadataPath, JSON.stringify(metadata)); - })().catch(e => { - log.error(e); + log.warn("Error getAllVersionMetadata", e); }); } @@ -378,7 +378,7 @@ export class BSLocalVersionService { }), finalize(async () => { if(failed){ return; } - await this.setVersionMetadata(versionDest.version, "store", store); + await this.initVersionMetadata(versionDest.version, { store }); }) ); } diff --git a/src/main/services/bs-version-download/bs-oculus-downloader.service.ts b/src/main/services/bs-version-download/bs-oculus-downloader.service.ts index 3b974a0c..21820526 100644 --- a/src/main/services/bs-version-download/bs-oculus-downloader.service.ts +++ b/src/main/services/bs-version-download/bs-oculus-downloader.service.ts @@ -111,7 +111,7 @@ export class BsOculusDownloaderService { version: { ...version, ...(path.basename(dest) !== version.BSVersion && { name: path.basename(dest) }), - metadata: { store: BsStore.OCULUS } + metadata: { store: BsStore.OCULUS, id: "" } }, dest }; @@ -141,7 +141,7 @@ export class BsOculusDownloaderService { progress => ({...progress, data: version}) )); }), - finalize(() => downloadVersion && this.versions.setVersionMetadata(downloadVersion, "store", BsStore.OCULUS)), + finalize(() => downloadVersion && this.versions.initVersionMetadata(downloadVersion, { store: BsStore.OCULUS })), finalize(() => this.oculusDownloader.stopDownload()) ); } @@ -171,7 +171,7 @@ export class BsOculusDownloaderService { map(progress => ({...progress, data: version})), ); }), - finalize(() => downloadVersion && this.versions.setVersionMetadata(downloadVersion, "store", BsStore.OCULUS)), + finalize(() => downloadVersion && this.versions.initVersionMetadata(downloadVersion, { store: BsStore.OCULUS })), finalize(() => this.oculusDownloader.stopDownload()), ); } diff --git a/src/main/services/bs-version-download/bs-steam-downloader.service.ts b/src/main/services/bs-version-download/bs-steam-downloader.service.ts index a86c7639..2660b929 100644 --- a/src/main/services/bs-version-download/bs-steam-downloader.service.ts +++ b/src/main/services/bs-version-download/bs-steam-downloader.service.ts @@ -67,7 +67,7 @@ export class BsSteamDownloaderService { const downloadVersion: BSVersion = { ...downloadInfos.bsVersion, ...(path.basename(dest) !== downloadInfos.bsVersion.BSVersion && { name: path.basename(dest) }), - metadata: { store: BsStore.STEAM } + metadata: { store: BsStore.STEAM, id: "" } }; const depotDownloaderOptions: DepotDownloaderArgsOptions = { @@ -118,7 +118,7 @@ export class BsSteamDownloaderService { } return event; }), - finalize(() => this.localVersionService.setVersionMetadata(version, "store", BsStore.STEAM)) + finalize(() => this.localVersionService.initVersionMetadata(version, { store: BsStore.STEAM })) ).subscribe(sub); }).catch(err => sub.error({ diff --git a/src/shared/bs-version.interface.ts b/src/shared/bs-version.interface.ts index f6d84d51..4bd6edd3 100644 --- a/src/shared/bs-version.interface.ts +++ b/src/shared/bs-version.interface.ts @@ -21,6 +21,7 @@ export interface BSVersion extends PartialBSVersion { } export interface BSVersionMetadata { + id: string; store: BsStore; }