manage install uninstall results and errors

This commit is contained in:
MathieuG-P
2022-10-04 23:03:03 +02:00
parent 4e7865e312
commit 840ff225f8
9 changed files with 209 additions and 29 deletions
@@ -1,16 +1,19 @@
import { BehaviorSubject } from "rxjs";
import { map } from "rxjs/operators";
import { BSVersion } from "shared/bs-version.interface";
import { Mod, ModInstallProgression } from "shared/models/mods/mod.interface";
import { InstallModsResult, UninstallModsResult } from "shared/models/mods";
import { Mod, ModInstallProgression } from "shared/models/mods";
import { IpcService } from "./ipc.service";
import { ModalExitCode, ModalService, ModalType } from "./modale.service";
import { NotificationService } from "./notification.service";
import { NotificationService, NotificationType } from "./notification.service";
import { ProgressBarService } from "./progress-bar.service";
export class BsModsManagerService {
private static instance: BsModsManagerService;
private readonly NOTIFICATION_DURATION = 3000;
private readonly ipcService: IpcService;
private readonly progressBar: ProgressBarService;
private readonly modals: ModalService;
@@ -46,8 +49,18 @@ export class BsModsManagerService {
this.progressBar.show(progress$, true, {paddingLeft: "190px", paddingRight: "190px", bottom: "20px"});
this.isInstalling$.next(true);
return this.ipcService.send<number, {mods: Mod[], version: BSVersion}>("install-mods", {args: {mods, version}}).then(res => {
return this.ipcService.send<InstallModsResult, {mods: Mod[], version: BSVersion}>("install-mods", {args: {mods, version}}).then(res => {
if(res.success && res.data){
const isFullyInstalled = res.data.nbInstalledMods === res.data.nbModsToInstall;
const title = `notifications.mods.install-mods.titles.${isFullyInstalled ? "success" : "warning"}`;
const desc = `notifications.mods.install-mods.msg.${isFullyInstalled ? "success" : "warning"}`;
this.notifications.notify({type: isFullyInstalled ? NotificationType.SUCCESS : NotificationType.WARNING, title, desc, duration: this.NOTIFICATION_DURATION});
}
else{
this.notifications.notifyError({title: "notifications.types.error", desc: `notifications.mods.install-mods.msg.errors.${res.error}`, duration: this.NOTIFICATION_DURATION})
}
this.isInstalling$.next(false);
this.progressBar.hide();
});
@@ -65,6 +78,14 @@ export class BsModsManagerService {
this.isUninstalling$.next(true);
return this.ipcService.send("uninstall-mods", {args: {mods: [mod], version}}).then(res => {
if(res.success){
this.notifications.notifySuccess({title: "notifications.mods.uninstall-mod.titles.success", duration: this.NOTIFICATION_DURATION})
}
else{
this.notifications.notifyError({title: "notifications.types.error", desc: `notifications.mods.uninstall-mod.msg.errors.${res.error}`, duration: this.NOTIFICATION_DURATION})
}
this.isUninstalling$.next(false);
this.progressBar.hide();
});
@@ -82,7 +103,15 @@ export class BsModsManagerService {
this.progressBar.show(progress$, true, {paddingLeft: "190px", paddingRight: "190px", bottom: "20px"});
this.isUninstalling$.next(true);
return this.ipcService.send("uninstall-all-mods", {args: version}).then(res => {
return this.ipcService.send<UninstallModsResult>("uninstall-all-mods", {args: version}).then(res => {
if(res.success){
this.notifications.notifySuccess({title: "notifications.mods.uninstall-all-mods.titles.success", desc: "notifications.mods.uninstall-all-mods.msg.success", duration: this.NOTIFICATION_DURATION})
}
else{
this.notifications.notifyError({title: "notifications.types.error", desc: `notifications.mods.uninstall-all-mods.msg.errors.${res.error}`, duration: this.NOTIFICATION_DURATION})
}
this.isUninstalling$.next(false);
this.progressBar.hide();
});