This commit is contained in:
sdarbinyan
2026-06-21 01:45:05 +04:00
parent 6410321895
commit 1b2a5af2be

View File

@@ -42,7 +42,6 @@ export class TelegramLoginComponent implements OnDestroy {
this.initQrLogin(); this.initQrLogin();
} else { } else {
this.awaitingTelegramReturn.set(false); this.awaitingTelegramReturn.set(false);
this.clearTelegramFallback();
this.stopPolling(); this.stopPolling();
} }
}); });
@@ -56,7 +55,6 @@ export class TelegramLoginComponent implements OnDestroy {
ngOnDestroy(): void { ngOnDestroy(): void {
this.awaitingTelegramReturn.set(false); this.awaitingTelegramReturn.set(false);
this.clearTelegramFallback();
this.stopPolling(); this.stopPolling();
if (typeof window !== 'undefined') { if (typeof window !== 'undefined') {
@@ -68,53 +66,30 @@ export class TelegramLoginComponent implements OnDestroy {
close(): void { close(): void {
this.awaitingTelegramReturn.set(false); this.awaitingTelegramReturn.set(false);
this.clearTelegramFallback();
this.authService.hideLogin(); this.authService.hideLogin();
this.stopPolling(); this.stopPolling();
} }
openTelegramLogin(): void { openTelegramLogin(): void {
const url = this.loginUrl();
const webSessionID = this.webSessionID(); const webSessionID = this.webSessionID();
if (!url || !webSessionID) return; if (!webSessionID || typeof window === 'undefined') return;
if (!this.pollTimer) { if (!this.pollTimer) {
this.startPolling(webSessionID); this.startPolling(webSessionID);
} }
const appUrl = this.authService.getTelegramAppLoginUrl(webSessionID);
this.awaitingTelegramReturn.set(true); this.awaitingTelegramReturn.set(true);
this.clearTelegramFallback(); window.location.href = this.authService.getTelegramAppLoginUrl(webSessionID);
if (this.isMobileBrowser()) {
window.location.href = appUrl;
return;
}
this.openExternalApp(appUrl);
this.telegramFallbackTimer = window.setTimeout(() => {
if (!this.showDialog() || !this.awaitingTelegramReturn()) {
return;
}
if (typeof document !== 'undefined' && (!document.hasFocus() || document.visibilityState === 'hidden')) {
return;
}
window.open(url, '_blank', 'noopener,noreferrer');
}, 1200);
} }
refreshQr(): void { refreshQr(): void {
this.awaitingTelegramReturn.set(false); this.awaitingTelegramReturn.set(false);
this.clearTelegramFallback();
this.stopPolling(); this.stopPolling();
this.initQrLogin(); this.initQrLogin();
} }
private initQrLogin(): void { private initQrLogin(): void {
this.awaitingTelegramReturn.set(false); this.awaitingTelegramReturn.set(false);
this.clearTelegramFallback();
this.qrStatus.set('loading'); this.qrStatus.set('loading');
this.loginUrl.set(''); this.loginUrl.set('');
this.webSessionID.set(''); this.webSessionID.set('');
@@ -149,7 +124,6 @@ export class TelegramLoginComponent implements OnDestroy {
next: (session) => { next: (session) => {
if (session?.active) { if (session?.active) {
this.awaitingTelegramReturn.set(false); this.awaitingTelegramReturn.set(false);
this.clearTelegramFallback();
this.stopPolling(); this.stopPolling();
this.authService.onTelegramLoginComplete(); this.authService.onTelegramLoginComplete();
} }
@@ -168,13 +142,6 @@ export class TelegramLoginComponent implements OnDestroy {
} }
} }
private clearTelegramFallback(): void {
if (this.telegramFallbackTimer) {
clearTimeout(this.telegramFallbackTimer);
this.telegramFallbackTimer = undefined;
}
}
private checkLoginAfterReturn(): void { private checkLoginAfterReturn(): void {
if (!this.showDialog() || !this.awaitingTelegramReturn()) { if (!this.showDialog() || !this.awaitingTelegramReturn()) {
return; return;
@@ -193,35 +160,9 @@ export class TelegramLoginComponent implements OnDestroy {
this.authService.checkSessionOnce(webSessionID).subscribe(session => { this.authService.checkSessionOnce(webSessionID).subscribe(session => {
if (session?.active) { if (session?.active) {
this.awaitingTelegramReturn.set(false); this.awaitingTelegramReturn.set(false);
this.clearTelegramFallback();
this.stopPolling(); this.stopPolling();
this.authService.onTelegramLoginComplete(); this.authService.onTelegramLoginComplete();
} }
}); });
} }
private openExternalApp(url: string): void {
if (typeof document === 'undefined') {
window.location.href = url;
return;
}
const anchor = document.createElement('a');
anchor.href = url;
anchor.style.display = 'none';
document.body.appendChild(anchor);
anchor.click();
anchor.remove();
}
private isMobileBrowser(): boolean {
if (typeof navigator === 'undefined') {
return false;
}
const userAgent = navigator.userAgent || navigator.vendor;
const isTouchMac = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;
return /Android|iPhone|iPad|iPod|IEMobile|Opera Mini/i.test(userAgent) || isTouchMac;
}
} }