From af69c821a736d9d6cd43cc1d8feb46a3d3cd63d4 Mon Sep 17 00:00:00 2001 From: MathieuG-P Date: Mon, 26 Dec 2022 20:48:36 +0100 Subject: [PATCH] add oneClick system notifications translations --- assets/jsons/translations/en.json | 18 ++++++++++++++++++ assets/jsons/translations/es.json | 18 ++++++++++++++++++ assets/jsons/translations/fr.json | 18 ++++++++++++++++++ src/renderer/services/notification.service.ts | 7 ------- .../services/playlist-downloader.service.ts | 2 -- .../windows/OneClick/OneClickDownloadMap.tsx | 12 ++++++++---- .../windows/OneClick/OneClickDownloadModel.tsx | 16 ++++++++++++---- .../OneClick/OneClickDownloadPlaylist.tsx | 16 ++++++++++------ 8 files changed, 84 insertions(+), 23 deletions(-) diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index 368e5270..378ed692 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -327,6 +327,24 @@ } } } + }, + "maps":{ + "one-click-install":{ + "success":"Map installation complete", + "error":"An error occurred while installing the map" + } + }, + "playlists":{ + "one-click-install":{ + "success":"Playlist installation complete", + "error":"An error occurred while installing the playlist" + } + }, + "models":{ + "one-click-install":{ + "success":"Model installation complete", + "error":"An error occurred while installing the model" + } } }, "modals": { diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index 6760a4a0..24b0fee8 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -327,6 +327,24 @@ } } } + }, + "maps":{ + "one-click-install":{ + "success":"Instalación del mapa completada", + "error":"Se produjo un error durante la instalación del mapa" + } + }, + "playlists":{ + "one-click-install":{ + "success":"Instalación de la lista de reproducción completada", + "error":"Se produjo un error durante la instalación de la lista de reproducción" + } + }, + "models":{ + "one-click-install":{ + "success":"Instalación del modelo completada", + "error":"Se produjo un error durante la instalación del modelo" + } } }, "modals": { diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index ea1ddfe5..41f386ec 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -327,6 +327,24 @@ } } } + }, + "maps":{ + "one-click-install":{ + "success":"Installation de la map terminée", + "error":"Une erreur s'est produite lors de l'installation de la map" + } + }, + "playlists":{ + "one-click-install":{ + "success":"Installation de la playlist terminée", + "error":"Une erreur s'est produite lors de l'installation de la playlist" + } + }, + "models":{ + "one-click-install":{ + "success":"Installation du modèle terminée", + "error":"Une erreur s'est produite lors de l'installation du modèle" + } } }, "modals": { diff --git a/src/renderer/services/notification.service.ts b/src/renderer/services/notification.service.ts index 19d15f51..c63d3748 100644 --- a/src/renderer/services/notification.service.ts +++ b/src/renderer/services/notification.service.ts @@ -1,6 +1,5 @@ import { BehaviorSubject } from "rxjs"; import { SystemNotificationOptions } from "shared/models/notification/system-notification.model"; -import { I18nService } from "./i18n.service"; import { IpcService } from "./ipc.service"; export class NotificationService{ @@ -17,11 +16,9 @@ export class NotificationService{ public readonly notifications$: BehaviorSubject; private readonly ipc: IpcService; - private readonly i18n: I18nService; private constructor(){ this.ipc = IpcService.getInstance(); - this.i18n = I18nService.getInstance(); this.notifications$ = new BehaviorSubject([]); } @@ -57,10 +54,6 @@ export class NotificationService{ } public notifySystem(options: SystemNotificationOptions){ - - options.body = options.body && this.i18n.translate(options.body); - options.title = options.title && this.i18n.translate(options.title); - this.ipc.sendLazy("notify-system", {args: options}); } diff --git a/src/renderer/services/playlist-downloader.service.ts b/src/renderer/services/playlist-downloader.service.ts index ae52eb7e..0dcdc7b2 100644 --- a/src/renderer/services/playlist-downloader.service.ts +++ b/src/renderer/services/playlist-downloader.service.ts @@ -40,8 +40,6 @@ export class PlaylistDownloaderService{ public oneClickInstallPlaylist(bpListUrl: string): Observable{ - if(!this.progress.require()){ return null; } - this.progressWatcher$.next(null); const res = new Subject(); diff --git a/src/renderer/windows/OneClick/OneClickDownloadMap.tsx b/src/renderer/windows/OneClick/OneClickDownloadMap.tsx index 4fbd0932..b95e5b1c 100644 --- a/src/renderer/windows/OneClick/OneClickDownloadMap.tsx +++ b/src/renderer/windows/OneClick/OneClickDownloadMap.tsx @@ -2,6 +2,7 @@ import { useEffect, useState } from "react"; import { BsmProgressBar } from "renderer/components/progress-bar/bsm-progress-bar.component"; import { BsmImage } from "renderer/components/shared/bsm-image.component"; import TitleBar from "renderer/components/title-bar/title-bar.component"; +import { useTranslation } from "renderer/hooks/use-translation.hook"; import { IpcService } from "renderer/services/ipc.service"; import { MapsDownloaderService } from "renderer/services/maps-downloader.service"; import { NotificationService } from "renderer/services/notification.service"; @@ -24,6 +25,7 @@ export default function OneClickDownloadMap() { const notification = NotificationService.getInstance(); const [mapInfo, setMapInfo] = useState(null); + const t = useTranslation(); const cover = mapInfo ? mapInfo.versions.at(0).coverURL : null; const title = mapInfo ? mapInfo.name : null; @@ -49,10 +51,12 @@ export default function OneClickDownloadMap() { setMapInfo(() => mapDetails); - await mapsDownloader.oneClickInstallMap(mapDetails); + const res = await mapsDownloader.oneClickInstallMap(mapDetails); progressBar.complete(); + if(!res){ return reject(); } + await timer(300).toPromise(); resolve(); @@ -66,11 +70,11 @@ export default function OneClickDownloadMap() { // TODO TRANSLATE promise.catch(() => { - notification.notifySystem({title: "Erreur", body: "Une erreur c'est produite lors de l'installation de la map"}); - }) + notification.notifySystem({title: t("notifications.types.error"), body: t("notifications.maps.one-click-install.error")}); + }); promise.then(() => { - notification.notifySystem({title: "OneClick", body: "Installation de la map terminé"}); + notification.notifySystem({title: "OneClick", body: t("notifications.maps.one-click-install.success")}); }); promise.finally(() =>{ diff --git a/src/renderer/windows/OneClick/OneClickDownloadModel.tsx b/src/renderer/windows/OneClick/OneClickDownloadModel.tsx index d078196b..765dc3d0 100644 --- a/src/renderer/windows/OneClick/OneClickDownloadModel.tsx +++ b/src/renderer/windows/OneClick/OneClickDownloadModel.tsx @@ -2,6 +2,7 @@ import { useEffect, useState } from "react"; import { BsmProgressBar } from "renderer/components/progress-bar/bsm-progress-bar.component"; import { BsmImage } from "renderer/components/shared/bsm-image.component"; import TitleBar from "renderer/components/title-bar/title-bar.component"; +import { useTranslation } from "renderer/hooks/use-translation.hook"; import { IpcService } from "renderer/services/ipc.service"; import { ModelDownloaderService } from "renderer/services/model-downloader.service"; import { NotificationService } from "renderer/services/notification.service"; @@ -23,6 +24,7 @@ export default function OneClickDownloadModel() { const notification = NotificationService.getInstance(); const [model, setModel] = useState(null); + const t = useTranslation(); const cover = model ? model.thumbnail : null; const title = model ? model.name : null; @@ -38,26 +40,32 @@ export default function OneClickDownloadModel() { const infos = await ipc.send<{id: string, type: string}>("one-click-model-info"); - if(!infos.success){ reject(); } + if(!infos.success){ return reject(); } const model = await modelSaber.getModelById(infos.data.id); + + if(!model){ return reject(); } setModel(() => model); progress.open(); - resolve(modelDownloader.oneClickInstallModel(model)); + const res = await modelDownloader.oneClickInstallModel(model); + + if(!res){ return reject(); } + + resolve(res); }); // TODO TRANSLATE promise.catch(() => { - notification.notifySystem({title: "Erreur", body: "Une erreur c'est produite lors de l'installation du model"}); + notification.notifySystem({title: t("notifications.types.error"), body: t("notifications.models.one-click-install.error")}); }) promise.then(() => { - notification.notifySystem({title: "OneClick", body: "Installation du model terminé"}); + notification.notifySystem({title: "OneClick", body: t("notifications.models.one-click-install.success")}); }); promise.finally(() => windows.close("oneclick-download-model.html")); diff --git a/src/renderer/windows/OneClick/OneClickDownloadPlaylist.tsx b/src/renderer/windows/OneClick/OneClickDownloadPlaylist.tsx index 89fb3056..2e7d387a 100644 --- a/src/renderer/windows/OneClick/OneClickDownloadPlaylist.tsx +++ b/src/renderer/windows/OneClick/OneClickDownloadPlaylist.tsx @@ -4,6 +4,7 @@ import { BsmProgressBar } from "renderer/components/progress-bar/bsm-progress-ba import { BsmImage } from "renderer/components/shared/bsm-image.component"; import TitleBar from "renderer/components/title-bar/title-bar.component"; import { useObservable } from "renderer/hooks/use-observable.hook"; +import { useTranslation } from "renderer/hooks/use-translation.hook"; import { IpcService } from "renderer/services/ipc.service" import { NotificationService } from "renderer/services/notification.service"; import { PlaylistDownloaderService } from "renderer/services/playlist-downloader.service"; @@ -26,6 +27,7 @@ export default function OneClickDownloadPlaylist() { const [playlist, setPlaylist] = useState(null); const downloadedMap = useObservable(playlistDownloader.progress$.pipe(filter(download => !!download), map(download => [...(download.downloadedMaps ?? []), download?.current])), []); + const t = useTranslation(); const cover = playlist ? playlist.playlistImage : null; const title = playlist ? playlist.name : null; @@ -41,24 +43,26 @@ export default function OneClickDownloadPlaylist() { const infos = await ipc.send<{bpListUrl: string, id: string}>("one-click-playlist-info"); - if(!infos.success){ reject(infos.error); } + if(!infos.success){ return reject(infos.error); } bSaver.getPlaylistDetailsById(infos.data.id).then(details => setPlaylist(details)); - const res = await playlistDownloader.oneClickInstallPlaylist(infos.data.bpListUrl).toPromise(); - - resolve(res); + playlistDownloader.oneClickInstallPlaylist(infos.data.bpListUrl).toPromise().then(res => { + resolve(res); + }).catch(() => { + reject(); + }); }); // TODO TRANSLATE promise.catch(() => { - notification.notifySystem({title: "Erreur", body: "Une erreur c'est produite lors de l'installation de la playlist"}); + notification.notifySystem({title: t("notifications.types.error"), body: t("notifications.playlists.one-click-install.error")}); }) promise.then(() => { - notification.notifySystem({title: "OneClick", body: "Installation de la playlist terminé"}); + notification.notifySystem({title: "OneClick", body: t("notifications.playlists.one-click-install.success")}); }); promise.finally(() => {