diff --git a/assets/images/steam/login_mobile_auth.png b/assets/images/steam/login_mobile_auth.png new file mode 100644 index 00000000..e83a4f7b Binary files /dev/null and b/assets/images/steam/login_mobile_auth.png differ diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index f8907647..57287cd0 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -509,6 +509,12 @@ "submit": "Anmelden" } }, + "steam-auth-approve":{ + "title": "Warten auf Bestätigung", + "protected-by-mobile-auth": "Konto durch mobile Authentifizierung geschützt.", + "use-steam-app-to-approve": "Verwenden Sie die Steam Mobile-App, um die Verbindung zu bestätigen...", + "not-access-to-steam-app": "Ich habe keinen Zugang zur Steam Mobile-App" + }, "steam-credentials": { "title": "Steam Anmeldeinformationen", "p-1": "Die Anmeldeinformationen werden nur zum Herunterladen des Spiels verwendet, da Steam überprüfen muss, ob Du das Spiel bezahlt hast, um es herunterladen zu dürfen. Sie werden nicht gespeichert und direkt an DepotDownloader weitergegeben. Wenn Du deine Anmeldeinformationen nicht eingeben möchtest, kannst Du diesem Tutorial folgen:", diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index 3c296b47..daf45831 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -509,6 +509,12 @@ "submit": "Sign in" } }, + "steam-auth-approve":{ + "title": "Waiting for confirmation", + "protected-by-mobile-auth": "Account protected by mobile authenticator.", + "use-steam-app-to-approve": "Use the Steam mobile app to confirm the connection...", + "not-access-to-steam-app": "I don't have access to the Steam mobile app" + }, "steam-credentials": { "title": "Steam Credentials", "p-1": "The credentials are only used to download the game because steam need to verify that you paid the game in order to be allowed to download it. They aren't saved and directly passed to DepotDownloader. If you don't want to enter your credentials you can follow this tutorial :", diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index 6392ff57..9cbeaaf4 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -508,6 +508,12 @@ "submit": "Iniciar sesión" } }, + "steam-auth-approve":{ + "title": "Esperando confirmación", + "protected-by-mobile-auth": "Cuenta protegida por el autenticador móvil.", + "use-steam-app-to-approve": "Use la aplicación móvil de Steam para confirmar la conexión...", + "not-access-to-steam-app": "No tengo acceso a la aplicación móvil de Steam" + }, "steam-credentials": { "title": "Steam Credentials", "p-1": "Las credenciales sólo se utilizan para descargar el juego porque steam necesita verificar que has pagado el juego para que se te permita descargarlo. No se guardan y se pasan directamente a DepotDownloader. Si no quieres introducir tus credenciales puedes seguir este tutorial :", diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index 23ac8c5f..7524ec91 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -508,6 +508,12 @@ "submit": "Se connecter" } }, + "steam-auth-approve":{ + "title": "Attente de confirmation", + "protected-by-mobile-auth": "Compte protégé par l'authentificateur mobile.", + "use-steam-app-to-approve": "Utilisez l'application mobile Steam pour confirmer la connexion...", + "not-access-to-steam-app": "Je n'ai pas accès à l'application mobile Steam" + }, "steam-credentials": { "title": "Steam Credentials", "p-1": "Les informations d'identification ne sont utilisées que pour télécharger le jeu, car Steam doit vérifier que vous avez payé le jeu afin d'être autorisé à le télécharger. Ils ne sont pas sauvegardés et transmis directement à DepotDownloader. Si vous ne voulez pas entrer vos informations d'identification, vous pouvez suivre ce tutoriel :", diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index cd0e3ecc..cabdd6a4 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -509,6 +509,12 @@ "submit": "Войти" } }, + "steam-auth-approve":{ + "title": "Ожидание подтверждения", + "protected-by-mobile-auth": "Учетная запись защищена мобильным аутентификатором.", + "use-steam-app-to-approve": "Используйте мобильное приложение Steam для подтверждения подключения...", + "not-access-to-steam-app": "У меня нет доступа к мобильному приложению Steam" + }, "steam-credentials": { "title": "Данные входа Steam", "p-1": "Данные входа используются только при скачивании, чтобы проверить наличие у вас Beat Saber, это нужно Steam, чтобы разрешить скачивание. Они не сохраняются и напрямую передаются в DepotDownloader. Если вы не хотите вводить данные для входа, воспользуйтесь руководством(Оно на английском языке) :", diff --git a/src/renderer/components/modal/modal-types/steam-mobile-approve-modal.component.tsx b/src/renderer/components/modal/modal-types/steam-mobile-approve-modal.component.tsx new file mode 100644 index 00000000..4a95050e --- /dev/null +++ b/src/renderer/components/modal/modal-types/steam-mobile-approve-modal.component.tsx @@ -0,0 +1,39 @@ +import { ModalComponent, ModalExitCode } from "../../../services/modale.service"; +import BeatWaiting from "../../../../../assets/images/apngs/beat-waiting.png"; +import LoginMobileAuthImage from "../../../../../assets/images/steam/login_mobile_auth.png"; +import { BsmImage } from "renderer/components/shared/bsm-image.component"; +import { useTranslation } from "renderer/hooks/use-translation.hook"; +import { Observable } from "rxjs"; +import { useOnUpdate } from "renderer/hooks/use-on-update.hook"; + +export const SteamMobileApproveModal: ModalComponent }> = ({ resolver, data }) => { + + const t = useTranslation(); + + useOnUpdate(() => { + const sub = data.logged$.subscribe({ + next: () => resolver({ exitCode: ModalExitCode.COMPLETED }), + error: () => resolver({ exitCode: ModalExitCode.NO_CHOICE }), + complete: () => resolver({ exitCode: ModalExitCode.NO_CHOICE }), + }); + + return () => sub.unsubscribe(); + }, []); + + return ( +
+

{t("modals.steam-auth-approve.title")}

+ +

{t("modals.steam-auth-approve.protected-by-mobile-auth")}

+ +
+ +
+

{t("modals.steam-auth-approve.use-steam-app-to-approve")}

+
+ +
+ {t("modals.steam-auth-approve.not-access-to-steam-app")} +
+ ); +}; \ No newline at end of file diff --git a/src/renderer/services/bs-downloader.service.ts b/src/renderer/services/bs-downloader.service.ts index 93902338..ccfbf2cc 100644 --- a/src/renderer/services/bs-downloader.service.ts +++ b/src/renderer/services/bs-downloader.service.ts @@ -14,6 +14,7 @@ import { GuardModal } from "renderer/components/modal/modal-types/guard-modal.co import { LinkOpenerService } from "./link-opener.service"; import { DepotDownloaderErrorEvent, DepotDownloaderEvent, DepotDownloaderEventType, DepotDownloaderInfoEvent, DepotDownloaderSubTypeOfEventType, DepotDownloaderWarningEvent } from "../../shared/models/depot-downloader.model"; import equal from "fast-deep-equal"; +import { SteamMobileApproveModal } from "renderer/components/modal/modal-types/steam-mobile-approve-modal.component"; export class BsDownloaderService { private static instance: BsDownloaderService; @@ -123,7 +124,10 @@ export class BsDownloaderService { take(1), ).subscribe(async () => { const logged$ = events$.pipe(filter(event => event.subType === DepotDownloaderInfoEvent.SteamID), take(1)); - // Show awaiting mobile confirmation modal + const res = await this.modalService.openModal(SteamMobileApproveModal, { logged$ }); + if(res.exitCode !== ModalExitCode.COMPLETED){ + return this.stopDownload(); + } })); subs.push(events$.pipe(