mirror of
https://github.com/Zagrios/bs-manager.git
synced 2026-07-03 14:08:25 +02:00
[chore] reimplement login with meta
This commit is contained in:
+42
-20
@@ -1,25 +1,52 @@
|
||||
import { ModalComponent, ModalExitCode } from "../../../../services/modale.service";
|
||||
import { useState } from "react";
|
||||
import { ModalComponent, ModalExitCode, ModalService } from "../../../../services/modale.service";
|
||||
import { MouseEventHandler, useState } from "react";
|
||||
import { BsmButton } from "renderer/components/shared/bsm-button.component";
|
||||
import { useTranslation } from "renderer/hooks/use-translation.hook";
|
||||
import { useTranslationV2 } from "renderer/hooks/use-translation.hook";
|
||||
import { MetaIcon } from "renderer/components/svgs/icons/meta-icon.component";
|
||||
import { BsmCheckbox } from "renderer/components/shared/bsm-checkbox.component";
|
||||
import Tippy from "@tippyjs/react";
|
||||
import { useService } from "renderer/hooks/use-service.hook";
|
||||
import { IpcService } from "renderer/services/ipc.service";
|
||||
import { lastValueFrom } from "rxjs";
|
||||
import { EnterMetaTokenModal } from "./enter-meta-token-modal.component";
|
||||
import { CustomError } from "shared/models/exceptions/custom-error.class";
|
||||
import { MetaAuthErrorCodes } from "shared/models/bs-version-download/oculus-download.model";
|
||||
import { NotificationService } from "renderer/services/notification.service";
|
||||
|
||||
type ReturnType = { method: MetaAuthMethod.META, stay: boolean } | { method: MetaAuthMethod.MANUAL };
|
||||
export const LoginToMetaModal: ModalComponent<string> = ({ resolver }) => {
|
||||
|
||||
export const LoginToMetaModal: ModalComponent<ReturnType> = ({ resolver }) => {
|
||||
const { text: t } = useTranslationV2();
|
||||
|
||||
const t = useTranslation();
|
||||
const ipc = useService(IpcService);
|
||||
const modal = useService(ModalService);
|
||||
const notifications = useService(NotificationService);
|
||||
|
||||
const [stay, setStay] = useState(false);
|
||||
const [stay, setStay] = useState(true);
|
||||
const [authWindowOpen, setAuthWindowOpen] = useState(false);
|
||||
|
||||
const submit = () => {
|
||||
resolver({ exitCode: ModalExitCode.COMPLETED, data: { method: MetaAuthMethod.META, stay } });
|
||||
};
|
||||
const handleLoginWithMeta = () => {
|
||||
setAuthWindowOpen(() => true);
|
||||
lastValueFrom(ipc.sendV2("login-with-meta", stay)).then(token => {
|
||||
resolver({ exitCode: ModalExitCode.COMPLETED, data: token });
|
||||
}).catch((e: CustomError) => {
|
||||
if(e.code === MetaAuthErrorCodes.META_LOGIN_WINDOW_CLOSED_BY_USER){
|
||||
return;
|
||||
}
|
||||
|
||||
const enterTokenManually = () => {
|
||||
resolver({ exitCode: ModalExitCode.COMPLETED, data: { method: MetaAuthMethod.MANUAL } });
|
||||
if(e.code){
|
||||
notifications.notifyError({title: "notifications.types.error", desc: `notifications.bs-download.oculus-download.errors.msg.${e.code}`});
|
||||
}
|
||||
|
||||
resolver({ exitCode: ModalExitCode.CANCELED });
|
||||
}).finally(() => {
|
||||
setAuthWindowOpen(() => false);
|
||||
})
|
||||
}
|
||||
|
||||
const handleEnterTokenManually: MouseEventHandler<HTMLButtonElement> = async (e) => {
|
||||
e.preventDefault();
|
||||
const res = await modal.openModal(EnterMetaTokenModal);
|
||||
resolver(res);
|
||||
}
|
||||
|
||||
return (
|
||||
@@ -38,17 +65,12 @@ export const LoginToMetaModal: ModalComponent<ReturnType> = ({ resolver }) => {
|
||||
<span>{t("modals.connect-to-meta.stay")}</span>
|
||||
</div>
|
||||
|
||||
<BsmButton className="rounded-md flex justify-center items-center transition-all h-10 w-full" typeColor="primary" text="modals.connect-to-meta.connect-to-meta" withBar={false} onClick={submit}/>
|
||||
<BsmButton className="rounded-md flex justify-center items-center transition-all h-10 w-full" typeColor="primary" text="modals.connect-to-meta.connect-to-meta" withBar={false} onClick={handleLoginWithMeta} disabled={authWindowOpen}/>
|
||||
|
||||
<Tippy className="!bg-neutral-900" arrow={false} content={t("modals.connect-to-meta.body.enter-token-manually-tooltip")} >
|
||||
<p className="text-sm italic underline text-center -translate-y-1 leading-3 cursor-pointer" onClick={enterTokenManually}>{t("modals.connect-to-meta.body.enter-token-manually")}</p>
|
||||
<button className="text-sm italic underline text-center -translate-y-1 leading-3 cursor-pointer" onClick={handleEnterTokenManually}>{t("modals.connect-to-meta.body.enter-token-manually")}</button>
|
||||
</Tippy>
|
||||
|
||||
|
||||
</form>
|
||||
);
|
||||
};
|
||||
|
||||
export enum MetaAuthMethod {
|
||||
MANUAL = "manual",
|
||||
META = "meta"
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ import { StaticConfigurationService } from "renderer/services/static-configurati
|
||||
import { tryit } from "shared/helpers/error.helpers";
|
||||
import { InstallationLocationService } from "renderer/services/installation-location.service";
|
||||
import { AutoUpdaterService } from "renderer/services/auto-updater.service";
|
||||
import { OculusDownloaderService } from "renderer/services/bs-version-download/oculus-downloader.service";
|
||||
|
||||
export function SettingsPage() {
|
||||
|
||||
@@ -55,6 +56,7 @@ export function SettingsPage() {
|
||||
const modalService = useService(ModalService);
|
||||
const bsDownloader = useService(BsDownloaderService);
|
||||
const steamDownloader = useService(SteamDownloaderService);
|
||||
const oculusDownloader = useService(OculusDownloaderService);
|
||||
const progressBarService = useService(ProgressBarService);
|
||||
const notificationService = useService(NotificationService);
|
||||
const i18nService = useService(I18nService);
|
||||
@@ -121,16 +123,17 @@ export function SettingsPage() {
|
||||
});
|
||||
};
|
||||
|
||||
const loadDownloadersSession = () => {
|
||||
setHasDownloaderSession(steamDownloader.sessionExist());
|
||||
const loadDownloadersSession = async () => {
|
||||
setHasDownloaderSession(steamDownloader.sessionExist() || await oculusDownloader.metaSessionExists());
|
||||
}
|
||||
|
||||
const clearDownloadersSession = () => {
|
||||
const clearDownloadersSession = async () => {
|
||||
if (!hasDownloaderSession) {
|
||||
return;
|
||||
}
|
||||
|
||||
steamDownloader.deleteSteamSession();
|
||||
await oculusDownloader.deleteMetaSession()
|
||||
notificationService.notifyInfo({
|
||||
title: "pages.settings.steam-and-oculus.logout-success",
|
||||
});
|
||||
|
||||
@@ -8,10 +8,9 @@ import { NotificationService } from "../notification.service";
|
||||
import { ModalExitCode, ModalService } from "../modale.service";
|
||||
import { DownloaderServiceInterface } from "./bs-store-downloader.interface";
|
||||
import { AbstractBsDownloaderService } from "./abstract-bs-downloader.service";
|
||||
import { DownloadInfo } from "main/services/bs-version-download/bs-steam-downloader.service";
|
||||
import { MetaAuthErrorCodes, OculusDownloaderErrorCodes } from "shared/models/bs-version-download/oculus-download.model";
|
||||
import { EnterMetaTokenModal } from "renderer/components/modal/modal-types/bs-downgrade/enter-meta-token-modal.component";
|
||||
import { addFilterStringLog } from "renderer";
|
||||
import { LoginToMetaModal } from "renderer/components/modal/modal-types/bs-downgrade/login-to-meta-modal.component";
|
||||
import { OculusDownloadInfo } from "main/services/bs-version-download/bs-oculus-downloader.service";
|
||||
|
||||
export class OculusDownloaderService extends AbstractBsDownloaderService implements DownloaderServiceInterface{
|
||||
|
||||
@@ -69,7 +68,7 @@ export class OculusDownloaderService extends AbstractBsDownloaderService impleme
|
||||
);
|
||||
}
|
||||
|
||||
private startDownloadBsVersion(downloadInfo: DownloadInfo): Observable<Progression<BSVersion>>{
|
||||
private startDownloadBsVersion(downloadInfo: OculusDownloadInfo): Observable<Progression<BSVersion>>{
|
||||
const ignoreCode = [MetaAuthErrorCodes.META_LOGIN_WINDOW_CLOSED_BY_USER, OculusDownloaderErrorCodes.DOWNLOAD_CANCELLED];
|
||||
return this.handleDownload(
|
||||
this.ipc.sendV2("bs-oculus-download", downloadInfo ),
|
||||
@@ -77,25 +76,16 @@ export class OculusDownloaderService extends AbstractBsDownloaderService impleme
|
||||
);
|
||||
}
|
||||
|
||||
private async doDownloadBsVersion(bsVersion: BSVersion, isVerification: boolean): Promise<BSVersion> {
|
||||
private async doDownloadBsVersion(bsVersion: BSVersion, isVerification: boolean): Promise<BSVersion|undefined> {
|
||||
|
||||
const autoDownloadFailed = false;
|
||||
const {exitCode, data: token} = await this.modals.openModal(LoginToMetaModal)
|
||||
|
||||
return (async () => {
|
||||
if(exitCode !== ModalExitCode.COMPLETED){
|
||||
return undefined
|
||||
}
|
||||
|
||||
const tokenRes = await this.modals.openModal(EnterMetaTokenModal);
|
||||
|
||||
if(tokenRes.exitCode !== ModalExitCode.COMPLETED){
|
||||
return false;
|
||||
}
|
||||
|
||||
addFilterStringLog(tokenRes.data);
|
||||
|
||||
return lastValueFrom(this.startDownloadBsVersion({ bsVersion, isVerification, token: tokenRes.data })).then(() => true);
|
||||
|
||||
})().then(res => {
|
||||
|
||||
if(autoDownloadFailed || !res){
|
||||
return lastValueFrom(this.startDownloadBsVersion({ bsVersion, isVerification, token })).then(() => true).then(res => {
|
||||
if(!res){
|
||||
return bsVersion;
|
||||
}
|
||||
|
||||
@@ -121,4 +111,12 @@ export class OculusDownloaderService extends AbstractBsDownloaderService impleme
|
||||
return lastValueFrom(this.ipc.sendV2("bs-oculus-stop-download"));
|
||||
}
|
||||
|
||||
public deleteMetaSession(): Promise<void>{
|
||||
return lastValueFrom(this.ipc.sendV2("delete-meta-session"));
|
||||
}
|
||||
|
||||
public metaSessionExists(): Promise<boolean>{
|
||||
return lastValueFrom(this.ipc.sendV2("meta-session-exists"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user