From 52d9c519920d235f3454a0fec592dc899a55e42f Mon Sep 17 00:00:00 2001 From: Alex Yusiuk Date: Thu, 8 May 2025 08:14:50 +0000 Subject: [PATCH] refactor(iron-remote-desktop): use `PartialObserver` instead of single callback for `onSessionEvent` --- .../src/interfaces/UserInteraction.ts | 3 +- .../src/services/PublicAPI.ts | 4 +-- .../src/lib/login/login.svelte | 28 ++++++++++--------- .../src/lib/popup-screen/popup-screen.svelte | 14 ++++++---- .../lib/remote-screen/remote-screen.svelte | 16 ++++++----- 5 files changed, 36 insertions(+), 29 deletions(-) diff --git a/web-client/iron-remote-desktop/src/interfaces/UserInteraction.ts b/web-client/iron-remote-desktop/src/interfaces/UserInteraction.ts index 75366f57b..7810347f4 100644 --- a/web-client/iron-remote-desktop/src/interfaces/UserInteraction.ts +++ b/web-client/iron-remote-desktop/src/interfaces/UserInteraction.ts @@ -3,6 +3,7 @@ import type { NewSessionInfo } from './NewSessionInfo'; import type { SessionEvent } from './session-event'; import { ConfigBuilder } from '../services/ConfigBuilder'; import type { Config } from '../services/Config'; +import type { PartialObserver } from 'rxjs'; export interface UserInteraction { setVisibility(state: boolean): void; @@ -23,7 +24,7 @@ export interface UserInteraction { setCursorStyleOverride(style: string | null): void; - onSessionEvent(callback: (event: SessionEvent) => void): void; + onSessionEvent(partialObserver: PartialObserver): void; resize(width: number, height: number, scale?: number): void; diff --git a/web-client/iron-remote-desktop/src/services/PublicAPI.ts b/web-client/iron-remote-desktop/src/services/PublicAPI.ts index 909cb88b9..d58e5c793 100644 --- a/web-client/iron-remote-desktop/src/services/PublicAPI.ts +++ b/web-client/iron-remote-desktop/src/services/PublicAPI.ts @@ -68,8 +68,8 @@ export class PublicAPI { configBuilder: this.configBuilder.bind(this), connect: this.connect.bind(this), setScale: this.setScale.bind(this), - onSessionEvent: (callback) => { - this.remoteDesktopService.sessionObserver.subscribe(callback); + onSessionEvent: (partialObserver) => { + this.remoteDesktopService.sessionObserver.subscribe(partialObserver); }, ctrlAltDel: this.ctrlAltDel.bind(this), metaKey: this.metaKey.bind(this), diff --git a/web-client/iron-svelte-client/src/lib/login/login.svelte b/web-client/iron-svelte-client/src/lib/login/login.svelte index b8024a879..7dc19cf05 100644 --- a/web-client/iron-svelte-client/src/lib/login/login.svelte +++ b/web-client/iron-svelte-client/src/lib/login/login.svelte @@ -30,20 +30,22 @@ }); const initListeners = () => { - userInteraction.onSessionEvent((event) => { - if (event.type === 2) { - console.log('Error event', event.data); + userInteraction.onSessionEvent({ + next: (event) => { + if (event.type === 2) { + console.log('Error event', event.data); - toast.set({ - type: 'error', - message: typeof event.data !== 'string' ? event.data.backtrace() : event.data, - }); - } else { - toast.set({ - type: 'info', - message: typeof event.data === 'string' ? event.data : event.data?.backtrace() ?? 'No info', - }); - } + toast.set({ + type: 'error', + message: typeof event.data !== 'string' ? event.data.backtrace() : event.data, + }); + } else { + toast.set({ + type: 'info', + message: typeof event.data === 'string' ? event.data : event.data?.backtrace() ?? 'No info', + }); + } + }, }); }; diff --git a/web-client/iron-svelte-client/src/lib/popup-screen/popup-screen.svelte b/web-client/iron-svelte-client/src/lib/popup-screen/popup-screen.svelte index 8f4165c0a..aba739416 100644 --- a/web-client/iron-svelte-client/src/lib/popup-screen/popup-screen.svelte +++ b/web-client/iron-svelte-client/src/lib/popup-screen/popup-screen.svelte @@ -12,12 +12,14 @@ userInteractionService.subscribe((val) => { if (val != null) { userInteraction = val; - userInteraction.onSessionEvent((event) => { - if (event.type === 0) { - userInteraction.setVisibility(true); - } else if (event.type === 1) { - setCurrentSessionActive(false); - } + userInteraction.onSessionEvent({ + next: (event) => { + if (event.type === 0) { + userInteraction.setVisibility(true); + } else if (event.type === 1) { + setCurrentSessionActive(false); + } + }, }); } }); diff --git a/web-client/iron-svelte-client/src/lib/remote-screen/remote-screen.svelte b/web-client/iron-svelte-client/src/lib/remote-screen/remote-screen.svelte index b1e2ee72d..1982f0e71 100644 --- a/web-client/iron-svelte-client/src/lib/remote-screen/remote-screen.svelte +++ b/web-client/iron-svelte-client/src/lib/remote-screen/remote-screen.svelte @@ -12,13 +12,15 @@ userInteractionService.subscribe((uis) => { if (uis != null) { uiService = uis; - uiService.onSessionEvent((event) => { - if (event.type === 0) { - uiService.setVisibility(true); - } else if (event.type === 1) { - setCurrentSessionActive(false); - showLogin.set(true); - } + uiService.onSessionEvent({ + next: (event) => { + if (event.type === 0) { + uiService.setVisibility(true); + } else if (event.type === 1) { + setCurrentSessionActive(false); + showLogin.set(true); + } + }, }); } });