[hotfix] Faster inital loading of mods

This commit is contained in:
MathieuG-P
2023-06-04 17:19:30 +02:00
parent b08aa4c1d9
commit 2a8f4feea8
4 changed files with 22 additions and 25 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ export class BSVersionLibService{
}
private getRemoteVersions(): Promise<BSVersion[]>{
return this.requestService.get<BSVersion[]>(this.REMOTE_BS_VERSIONS_URL);
return this.requestService.getJSON<BSVersion[]>(this.REMOTE_BS_VERSIONS_URL);
}
private async getLocalVersions(): Promise<BSVersion[]>{
@@ -38,7 +38,7 @@ export class BeatModsApiService {
private async getVersionAlias(): Promise<Map<string, BSVersion[]>>{
if(this.aliasesCache.size){ return this.aliasesCache; }
return this.requestService.get<Record<string, string[]>>(this.BEAT_MODS_ALIAS).then(rawAliases => {
return this.requestService.getJSON<Record<string, string[]>>(this.BEAT_MODS_ALIAS).then(rawAliases => {
Object.entries(rawAliases).forEach(([key, value]) => {
this.aliasesCache.set(key, value.map(s => ({BSVersion: s} as BSVersion)));
});
@@ -64,7 +64,7 @@ export class BeatModsApiService {
const alias = await this.getAliasOfVersion(version);
return this.requestService.get<Mod[]>(this.getVersionModsUrl(alias)).then(mods => {
return this.requestService.getJSON<Mod[]>(this.getVersionModsUrl(alias)).then(mods => {
mods = mods.map(mod => this.asignDependencies(mod, mods));
this.versionModsCache.set(version.BSVersion, mods);
return mods;
@@ -73,16 +73,10 @@ export class BeatModsApiService {
public async getAllMods(): Promise<Mod[]>{
if(!!this.allModsCache){ return this.allModsCache; }
return this.requestService.get<Mod[]>(this.getAllModsUrl()).then(mods => {
return this.requestService.getJSON<Mod[]>(this.getAllModsUrl()).then(mods => {
this.allModsCache = mods;
return this.allModsCache;
});
}
public loadAllMods(){ return this.getAllMods(); }
}
@@ -245,7 +245,7 @@ export class BsModsManagerService {
public async getInstalledMods(version: BSVersion): Promise<Mod[]>{
this.manifestMatches = [];
await this.beatModsApi.loadAllMods();
await this.beatModsApi.getAllMods();
const bsipa = await this.getBsipaInstalled(version);
return Promise.all([
this.getModsInDir(version, ModsInstallFolder.PLUGINS_PENDING),
+17 -14
View File
@@ -1,8 +1,9 @@
import { RequestOptions, get } from "https";
import { get } from "https";
import { createWriteStream, unlink } from "fs";
import { Progression, unlinkPath } from "main/helpers/fs.helpers";
import { Observable, buffer, shareReplay, tap } from "rxjs";
import { Progression } from "main/helpers/fs.helpers";
import { Observable, shareReplay, tap } from "rxjs";
import log from "electron-log";
import fetch, { RequestInfo, RequestInit } from "node-fetch";
export class RequestService {
@@ -15,18 +16,20 @@ export class RequestService {
private constructor(){}
public get<T = any>(options: string|RequestOptions): Promise<T>{
public async getJSON<T = unknown>(url: RequestInfo, options?: RequestInit): Promise<T>{
try {
const response = await fetch(url, options);
return new Promise((resolve, reject) => {
let body = ''
get(options, (res) => {
res.on('data', chunk => body += chunk);
res.on('end', () => {
resolve(JSON.parse(body));
});
res.on('error', (err) => {log.error(err); reject(err)})
}).on("error", err =>{log.error(err); reject(err)});
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status} ${response}`);
}
return await response.json();
}
catch (err) {
log.error(err);
throw err;
}
}
public downloadFile(url: string, dest: string): Observable<Progression<string>>{