From 30a53c013f7e4d108a217634461224f639df68f0 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Wed, 13 Mar 2024 14:51:51 +0100 Subject: [PATCH 1/4] [bugfix] fix downloading models not working Add useragent to requests to not being rejected --- release/app/package-lock.json | 4 ++-- src/main/services/request.service.ts | 33 ++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/release/app/package-lock.json b/release/app/package-lock.json index 24e99b05..9afc7978 100644 --- a/release/app/package-lock.json +++ b/release/app/package-lock.json @@ -1,12 +1,12 @@ { "name": "bs-manager", - "version": "1.4.4", + "version": "1.4.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bs-manager", - "version": "1.4.4", + "version": "1.4.6", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/src/main/services/request.service.ts b/src/main/services/request.service.ts index dbd2fcf9..2c7f6741 100644 --- a/src/main/services/request.service.ts +++ b/src/main/services/request.service.ts @@ -1,9 +1,11 @@ -import { Agent, get } from "https"; +import { Agent, RequestOptions, get } from "https"; import { createWriteStream, unlink } from "fs"; 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"; +import { app } from "electron"; +import os from "os"; export class RequestService { private static instance: RequestService; @@ -15,16 +17,33 @@ export class RequestService { return RequestService.instance; } - private constructor() {} + private readonly defaultRequestInit: RequestInit; - private get ipv4Agent(){ - return new Agent({ family: 4 }); + private constructor() { + + this.defaultRequestInit = { + headers: { + "User-Agent": `BSManager/${app.getVersion()} (${os.type()} ${os.release()})` + }, + agent: new Agent({ family: 4 }), + }; + } + + private getInitWithOptions(options?: RequestInit): RequestInit { + return { ...this.defaultRequestInit, ...(options || {}) }; + } + + private requestOptionsFromDefaultInit(): RequestOptions { + return { + headers: this.defaultRequestInit.headers as Record, + agent: this.defaultRequestInit.agent as Agent, + }; } public async getJSON(url: RequestInfo, options?: RequestInit): Promise { try { - const response = await fetch(url, {...options, agent: this.ipv4Agent}); + const response = await fetch(url, this.getInitWithOptions(options)); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status} ${url}`); @@ -50,7 +69,7 @@ export class RequestService { }); file.on("error", err => unlink(dest, () => subscriber.error(err))); - const req = get(url, { agent: this.ipv4Agent }, res => { + const req = get(url, this.requestOptionsFromDefaultInit(), res => { progress.total = parseInt(res.headers?.["content-length"] || "0", 10); res.on("data", chunk => { @@ -77,7 +96,7 @@ export class RequestService { const allChunks: Buffer[] = []; - const req = get(url, { agent: this.ipv4Agent }, res => { + const req = get(url, this.requestOptionsFromDefaultInit(), res => { progress.total = parseInt(res.headers?.["content-length"] || "0", 10); res.on("data", chunk => { From 88a1691d4b5a1bd2b766ce48db86b493d3bd3a6c Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Wed, 13 Mar 2024 15:04:45 +0100 Subject: [PATCH 2/4] bumb to 1.4.7 --- release/app/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/app/package.json b/release/app/package.json index 0d1d674d..8cc11a8c 100644 --- a/release/app/package.json +++ b/release/app/package.json @@ -1,6 +1,6 @@ { "name": "bs-manager", - "version": "1.4.6", + "version": "1.4.7", "description": "BSManager", "main": "./dist/main/main.js", "author": { From 067b967da1fc58d6e8e15f2f859ca1552848ac35 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Fri, 15 Mar 2024 11:55:16 +0100 Subject: [PATCH 3/4] add patreon --- assets/jsons/patreons.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assets/jsons/patreons.json b/assets/jsons/patreons.json index 873f2d41..00d8f14d 100644 --- a/assets/jsons/patreons.json +++ b/assets/jsons/patreons.json @@ -89,5 +89,8 @@ }, { "username": "rhythmshade" + }, + { + "username": "liborsaf" } ] From d7f3936619bcb72763f792e5c8e9d0d0475c3969 Mon Sep 17 00:00:00 2001 From: Pierce Thompson Date: Sat, 16 Mar 2024 20:57:55 -0400 Subject: [PATCH 4/4] Fix BSIPA not running on Linux --- src/main/services/mods/bs-mods-manager.service.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/services/mods/bs-mods-manager.service.ts b/src/main/services/mods/bs-mods-manager.service.ts index 330d9900..42b5add8 100644 --- a/src/main/services/mods/bs-mods-manager.service.ts +++ b/src/main/services/mods/bs-mods-manager.service.ts @@ -155,8 +155,13 @@ export class BsModsManagerService { } return new Promise(resolve => { - log.info("START IPA PROCESS", `start /wait /min "" "${ipaPath}" ${args.join(" ")}`); - const processIPA = spawn(`start /wait /min "" "${ipaPath}" ${args.join(" ")}`, { cwd: versionPath, detached: true, shell: true }); + const cmd = process.platform === 'linux' + ? `screen -dmS "BSIPA" dotnet ${ipaPath} ${args.join(" ")}` // Must run through screen, otherwise BSIPA tries to move console cursor and crashes. + : `start /wait /min "" "${ipaPath}" ${args.join(" ")}`; + + log.info("START IPA PROCESS", cmd); + const processIPA = spawn(cmd, { cwd: versionPath, detached: true, shell: true }); + processIPA.once("exit", code => { if (code === 0) { log.info("Ipa process exist with code 0"); @@ -230,7 +235,7 @@ export class BsModsManagerService { log.error("Error while extracting mod zip", e); return false; }); - + log.info("Mod zip extraction end", mod.name, "to", destDir, "success:", extracted); const res = isBSIPA