From a62038450f71961a0d75265217a79a526a99e199 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Thu, 6 Apr 2023 00:53:05 +0200 Subject: [PATCH] use "allSettled" helper everywhere its needed --- src/main/helpers/promise.helpers.ts | 19 +++++++++++++++++-- .../local-maps-manager.service.ts | 8 ++------ src/main/services/bs-version-lib.service.ts | 5 ++++- .../services/version-folder-linker.service.ts | 8 ++------ 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/main/helpers/promise.helpers.ts b/src/main/helpers/promise.helpers.ts index 21ba61a0..46d9c19b 100644 --- a/src/main/helpers/promise.helpers.ts +++ b/src/main/helpers/promise.helpers.ts @@ -1,4 +1,19 @@ -export async function allSettled(promises: Promise[]): Promise { +export type AllSettledHelperOptions = { + keepStructure?: boolean; + removeFalsy?: boolean; +} + +export async function allSettled(promises: Promise[], options?: AllSettledHelperOptions): Promise { const settledPromises = await Promise.allSettled(promises); - return settledPromises.map(p => p.status === 'fulfilled' ? p.value : null); + if(options?.keepStructure){ + return settledPromises.map(p => p.status === 'fulfilled' ? p.value : null); + } + + return settledPromises.reduce((acc, p) => { + if(p.status === 'fulfilled'){ + if(options?.removeFalsy && !p.value){ return acc; } + acc.push(p.value); + } + return acc; + }, []); } \ No newline at end of file diff --git a/src/main/services/additional-content/local-maps-manager.service.ts b/src/main/services/additional-content/local-maps-manager.service.ts index 106558e9..f94add4e 100644 --- a/src/main/services/additional-content/local-maps-manager.service.ts +++ b/src/main/services/additional-content/local-maps-manager.service.ts @@ -21,6 +21,7 @@ import { Archive } from "../../models/archive.class"; import { deleteFolder, ensureFolderExist, getFoldersInFolder, pathExist } from "../../helpers/fs.helpers"; import { readFile } from "fs/promises"; import { FolderLinkerService } from "../folder-linker.service"; +import { allSettled } from "../../helpers/promise.helpers"; export class LocalMapsManagerService { @@ -155,12 +156,7 @@ export class LocalMapsManagerService { return mapInfo; }); - const mapsInfo = (await Promise.allSettled(promises)).reduce((acc, mapInfo) => { - if(mapInfo.status === "fulfilled" && mapInfo.value){ - acc.push(mapInfo.value); - } - return acc; - } ,[] as BsmLocalMap[]); + const mapsInfo = await allSettled(promises, {removeFalsy: true}); progression.maps = mapsInfo; diff --git a/src/main/services/bs-version-lib.service.ts b/src/main/services/bs-version-lib.service.ts index c58563b0..6e573eb7 100644 --- a/src/main/services/bs-version-lib.service.ts +++ b/src/main/services/bs-version-lib.service.ts @@ -44,10 +44,13 @@ export class BSVersionLibService{ }; private async loadBsVersions(): Promise{ + if(this.bsVersions){ return this.bsVersions; } + const [localVersions, remoteVersions] = await allSettled([ this.getLocalVersions(), this.getRemoteVersions() - ]); + ], {keepStructure: true}); + let resVersions = localVersions; if(remoteVersions && remoteVersions.length){ resVersions = remoteVersions; this.updateLocalVersions(resVersions); } this.bsVersions = resVersions; diff --git a/src/main/services/version-folder-linker.service.ts b/src/main/services/version-folder-linker.service.ts index f82024bd..b540dd35 100644 --- a/src/main/services/version-folder-linker.service.ts +++ b/src/main/services/version-folder-linker.service.ts @@ -5,6 +5,7 @@ import { BSVersion } from "shared/bs-version.interface"; import { LocalMapsManagerService } from "./additional-content/local-maps-manager.service"; import { BSLocalVersionService } from "./bs-local-version.service"; import { FolderLinkerService, LinkOptions } from "./folder-linker.service"; +import { allSettled } from "../helpers/promise.helpers"; export class VersionFolderLinkerService { @@ -37,12 +38,7 @@ export class VersionFolderLinkerService { private async isOtherVersionHaveFolderLinked(relativeFolder: string, ignorePath: string): Promise{ const versions = await this.localVersion.getInstalledVersions(); - const versionPaths = (await Promise.allSettled(versions.map(version => this.localVersion.getVersionPath(version)))).reduce((acc, res) => { - if(res.status === "fulfilled"){ - acc.push(res.value); - } - return acc; - }, [] as string[]); + const versionPaths = await allSettled(versions.map(version => this.localVersion.getVersionPath(version))); for(const versionPath of versionPaths){ const folderPath = this.relativeToFullPath(versionPath, relativeFolder);