[feature] Added admin launch information modal

This commit is contained in:
MathieuG-P
2024-01-24 23:07:49 +01:00
parent 16b9ca79f2
commit 63d35f678d
13 changed files with 151 additions and 14 deletions
@@ -0,0 +1,34 @@
import { BsmButton } from "renderer/components/shared/bsm-button.component"
import { BsmImage } from "renderer/components/shared/bsm-image.component"
import { ModalComponent, ModalExitCode } from "renderer/services/modale.service"
import BeatConflict from "../../../../../assets/images/apngs/beat-conflict.png";
import { useTranslation } from "renderer/hooks/use-translation.hook";
import { BsmCheckbox } from "renderer/components/shared/bsm-checkbox.component";
import { useState } from "react";
export const NeedLaunchAdminModal: ModalComponent<boolean, void> = ({resolver}) => {
const t = useTranslation();
const [dontShowAgain, setDontShowAgain] = useState(false);
return (
<form className="text-gray-800 dark:text-gray-200 flex flex-col min-w-[350px]">
<h1 className="text-3xl uppercase tracking-wide w-full text-center">{t("modals.launch-as-admin.title")}</h1>
<BsmImage className="mx-auto h-24" image={BeatConflict} />
<div className="flex flex-col gap-3">
<p className="w-0 min-w-full">{t("modals.launch-as-admin.body.info")}</p>
<p className="w-0 min-w-full">{t("modals.launch-as-admin.body.info-2")}</p>
<p className="w-0 min-w-full text-sm italic">{t("modals.launch-as-admin.body.info-3")}</p>
</div>
<div className="flex flex-row justify-start items-center gap-1.5 my-4">
<BsmCheckbox className="relative z-[1] w-6 aspect-square" checked={dontShowAgain} onChange={setDontShowAgain} />
<span>{t("modals.launch-as-admin.not-remind-me")}</span>
</div>
<div className="grid grid-flow-col grid-cols-2 gap-4">
<BsmButton typeColor="cancel" className="rounded-md text-center flex items-center justify-center transition-all h-8" onClick={() => resolver({ exitCode: ModalExitCode.CANCELED })} withBar={false} text="misc.cancel" />
<BsmButton typeColor="primary" className="rounded-md text-center flex items-center justify-center transition-all h-8" onClick={() => resolver({ exitCode: ModalExitCode.COMPLETED, data: dontShowAgain })} withBar={false} text="modals.launch-as-admin.launch-as-admin" />
</div>
</form>
)
}
+20 -5
View File
@@ -10,6 +10,7 @@ import { ModalExitCode, ModalService } from "./modale.service";
import { OriginalOculusVersionBackupModal } from "renderer/components/modal/modal-types/original-oculus-version-backup.modal";
import { CustomError } from "shared/models/exceptions/custom-error.class";
import { sToMs } from "shared/helpers/time.helpers";
import { NeedLaunchAdminModal } from "renderer/components/modal/modal-types/need-launch-admin-modal.component";
export class BSLauncherService {
private static instance: BSLauncherService;
@@ -21,7 +22,7 @@ export class BSLauncherService {
private readonly modals: ModalService;
public readonly versionRunning$: BehaviorSubject<BSVersion> = new BehaviorSubject(null);
public static getInstance(){
if(!BSLauncherService.instance){ BSLauncherService.instance = new BSLauncherService(); }
return BSLauncherService.instance;
@@ -70,7 +71,17 @@ export class BSLauncherService {
}
}))
}
private async doMustStartAsAdmin(): Promise<boolean> {
const needAdmin = await lastValueFrom(this.ipcService.sendV2<boolean, void>("bs-launch.need-start-as-admin"));
if(!needAdmin){ return false; }
if(this.config.get("dont-remind-admin")){ return true; }
const modalRes = await this.modals.openModal(NeedLaunchAdminModal);
if(modalRes.exitCode !== ModalExitCode.COMPLETED){ throw new Error("Admin launch canceled"); }
this.config.set("dont-remind-admin", modalRes.data);
return true;
}
public doLaunch(launchOptions: LaunchOption): Observable<BSLaunchEventData>{
return this.ipcService.sendV2<BSLaunchEventData, LaunchOption>("bs-launch.launch", {args: launchOptions});
}
@@ -79,17 +90,21 @@ export class BSLauncherService {
return new Observable<BSLaunchEventData>(obs => {
(async () => {
if(launchOptions.version.metadata?.store === BsStore.OCULUS && !this.notRewindBackupOculus()){
const { exitCode, data: notRewind } = await this.modals.openModal(OriginalOculusVersionBackupModal);
if(exitCode !== ModalExitCode.COMPLETED){ return; }
this.setNotRewindBackupOculus(notRewind);
}
if(launchOptions.version.metadata?.store !== BsStore.OCULUS){
launchOptions.admin = await this.doMustStartAsAdmin();
}
const launch$ = this.handleLaunchEvents(this.doLaunch(launchOptions));
await lastValueFrom(launch$);
})().then(() => {
obs.complete();
}).catch(err => {