diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index e838d4e3..a92e3c71 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -381,6 +381,9 @@ } }, "modals": { + "misc":{ + "remember-my-choice": "Remember my choice" + }, "guard": { "title": "Steam Guard", "inputs": { diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index bb4209be..63c2ba8d 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -381,6 +381,9 @@ } }, "modals": { + "misc":{ + "remember-my-choice": "Recordar mi elección" + }, "guard": { "title": "Steam Guard", "inputs": { diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index cdf58eb6..aac0f376 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -381,6 +381,9 @@ } }, "modals": { + "misc":{ + "remember-my-choice": "Se souvenir de mon choix" + }, "guard": { "title": "Steam Guard", "inputs": { diff --git a/src/renderer/components/modal/modal-types/delete-maps-modal.component.tsx b/src/renderer/components/modal/modal-types/delete-maps-modal.component.tsx index 601df8c3..8fbb3eba 100644 --- a/src/renderer/components/modal/modal-types/delete-maps-modal.component.tsx +++ b/src/renderer/components/modal/modal-types/delete-maps-modal.component.tsx @@ -1,14 +1,28 @@ +import { useEffect, useState } from "react"; import { BsmButton } from "renderer/components/shared/bsm-button.component"; +import { BsmCheckbox } from "renderer/components/shared/bsm-checkbox.component"; import { BsmImage } from "renderer/components/shared/bsm-image.component"; import { useTranslation } from "renderer/hooks/use-translation.hook"; +import { ConfigurationService } from "renderer/services/configuration.service"; +import { MapsManagerService } from "renderer/services/maps-manager.service"; import { ModalComponent, ModalExitCode } from "renderer/services/modale.service"; import { BsmLocalMap } from "shared/models/maps/bsm-local-map.interface"; import BeatConflict from '../../../../../assets/images/apngs/beat-conflict.png' export const DeleteMapsModal: ModalComponent = ({resolver, data:{linked, maps}}) => { + const config = ConfigurationService.getInstance(); + const t = useTranslation(); + const [remember, setRemember] = useState(false); + + useEffect(() => { + const key = MapsManagerService.REMEMBER_CHOICE_DELETE_MAP_KEY; + config.set(key, remember); + }, [remember]) + + const multiple = maps.length > 1; const titleText = multiple ? "modals.maps-actions.delete-maps.title.multiple" : "modals.maps-actions.delete-maps.title.single"; @@ -22,7 +36,13 @@ export const DeleteMapsModal: ModalComponent

{t(descText, multiple ? {nb: maps.length.toString()} : {name: maps.at(0).rawInfo._songName})}

{linked &&

{t(infoText)}

} -
+ {!multiple && ( +
+ setRemember(val)}/> + {t("modals.misc.remember-my-choice")} +
+ )} +
resolver({exitCode: ModalExitCode.CANCELED})} withBar={false} text="misc.cancel"/> resolver({exitCode: ModalExitCode.COMPLETED})} withBar={false} text="misc.delete"/>
diff --git a/src/renderer/services/maps-manager.service.ts b/src/renderer/services/maps-manager.service.ts index 53ff40c4..0838458f 100644 --- a/src/renderer/services/maps-manager.service.ts +++ b/src/renderer/services/maps-manager.service.ts @@ -10,6 +10,7 @@ import { DeleteMapsModal } from "renderer/components/modal/modal-types/delete-ma import { ProgressBarService } from "./progress-bar.service"; import { OpenSaveDialogOption } from "shared/models/ipc"; import { NotificationService } from "./notification.service"; +import { ConfigurationService } from "./configuration.service"; export class MapsManagerService { @@ -20,11 +21,14 @@ export class MapsManagerService { return MapsManagerService.instance; } + public static readonly REMEMBER_CHOICE_DELETE_MAP_KEY = "not-confirm-delete-map" + private readonly ipcService: IpcService; private readonly bsaver: BeatSaverService; private readonly modal: ModalService; private readonly progressBar: ProgressBarService; private readonly notifications: NotificationService; + private readonly config: ConfigurationService; private readonly lastLinkedVersion$: Subject = new Subject(); private readonly lastUnlinkedVersion$: Subject = new Subject(); @@ -35,6 +39,7 @@ export class MapsManagerService { this.modal = ModalService.getInsance(); this.progressBar = ProgressBarService.getInstance(); this.notifications = NotificationService.getInstance(); + this.config = ConfigurationService.getInstance(); } public getMaps(version?: BSVersion, withDetails = true): Observable{ @@ -115,19 +120,22 @@ export class MapsManagerService { const versionLinked = await this.versionHaveMapsLinked(version); - const modalRes = await this.modal.openModal(DeleteMapsModal, {linked: versionLinked, maps}); + const askModal = maps.length > 1 || !this.config.get(MapsManagerService.REMEMBER_CHOICE_DELETE_MAP_KEY); - if(modalRes.exitCode !== ModalExitCode.COMPLETED){ return false; } + if(askModal){ + const modalRes = await this.modal.openModal(DeleteMapsModal, {linked: versionLinked, maps}); + if(modalRes.exitCode !== ModalExitCode.COMPLETED){ return false; } + } const showProgressBar = this.progressBar.require(); - if(showProgressBar && maps.length > 1){ + if(showProgressBar){ this.progressBar.showFake(.008); } const res = await this.ipcService.send("delete-maps", {args: {version, maps}}); - if(showProgressBar && maps.length > 1){ + if(showProgressBar){ this.progressBar.hide(true); }