From 927eae3f2f28d3f2e4623f05e5c8a792e741b3f6 Mon Sep 17 00:00:00 2001 From: redphx <96280+redphx@users.noreply.github.com> Date: Mon, 14 Oct 2024 16:56:05 +0700 Subject: [PATCH] Refactor getInstance() methods --- src/modules/mkb/mkb-handler.ts | 10 ++-------- src/modules/mkb/native-mkb-handler.ts | 10 ++-------- src/modules/mkb/pointer-client.ts | 8 +------- src/modules/remote-play-manager.ts | 8 +------- src/modules/stream/stream-badges.ts | 8 +------- src/modules/stream/stream-stats.ts | 8 +------- src/modules/ui/dialog/navigation-dialog.ts | 7 +------ src/modules/ui/dialog/remote-play-dialog.ts | 7 +------ src/modules/ui/dialog/settings-dialog.ts | 7 +------ src/modules/ui/fullscreen-text.ts | 7 +------ src/utils/stream-stats-collector.ts | 8 +------- src/utils/xcloud-api.ts | 8 +------- 12 files changed, 14 insertions(+), 82 deletions(-) diff --git a/src/modules/mkb/mkb-handler.ts b/src/modules/mkb/mkb-handler.ts index f2c565d..45c2b70 100644 --- a/src/modules/mkb/mkb-handler.ts +++ b/src/modules/mkb/mkb-handler.ts @@ -124,14 +124,8 @@ This class uses some code from Yuzu emulator to handle mouse's movements Source: https://github.com/yuzu-emu/yuzu-mainline/blob/master/src/input_common/drivers/mouse.cpp */ export class EmulatedMkbHandler extends MkbHandler { - static #instance: EmulatedMkbHandler; - public static getInstance(): EmulatedMkbHandler { - if (!EmulatedMkbHandler.#instance) { - EmulatedMkbHandler.#instance = new EmulatedMkbHandler(); - } - - return EmulatedMkbHandler.#instance; - } + private static instance: EmulatedMkbHandler; + public static getInstance = () => EmulatedMkbHandler.instance ?? (EmulatedMkbHandler.instance = new EmulatedMkbHandler()); #CURRENT_PRESET_DATA = MkbPreset.convert(MkbPreset.DEFAULT_PRESET); diff --git a/src/modules/mkb/native-mkb-handler.ts b/src/modules/mkb/native-mkb-handler.ts index 2023f91..f7cefc1 100644 --- a/src/modules/mkb/native-mkb-handler.ts +++ b/src/modules/mkb/native-mkb-handler.ts @@ -23,6 +23,8 @@ type XcloudInputSink = { export class NativeMkbHandler extends MkbHandler { private static instance: NativeMkbHandler; + public static getInstance = () => NativeMkbHandler.instance ?? (NativeMkbHandler.instance = new NativeMkbHandler()); + #pointerClient: PointerClient | undefined; #enabled: boolean = false; @@ -37,14 +39,6 @@ export class NativeMkbHandler extends MkbHandler { #$message?: HTMLElement; - public static getInstance(): NativeMkbHandler { - if (!NativeMkbHandler.instance) { - NativeMkbHandler.instance = new NativeMkbHandler(); - } - - return NativeMkbHandler.instance; - } - #onKeyboardEvent(e: KeyboardEvent) { if (e.type === 'keyup' && e.code === 'F8') { e.preventDefault(); diff --git a/src/modules/mkb/pointer-client.ts b/src/modules/mkb/pointer-client.ts index 6e100e5..495eb19 100644 --- a/src/modules/mkb/pointer-client.ts +++ b/src/modules/mkb/pointer-client.ts @@ -15,13 +15,7 @@ enum PointerAction { export class PointerClient { private static instance: PointerClient; - public static getInstance(): PointerClient { - if (!PointerClient.instance) { - PointerClient.instance = new PointerClient(); - } - - return PointerClient.instance; - } + public static getInstance = () => PointerClient.instance ?? (PointerClient.instance = new PointerClient()); private socket: WebSocket | undefined | null; private mkbHandler: MkbHandler | undefined; diff --git a/src/modules/remote-play-manager.ts b/src/modules/remote-play-manager.ts index 7b418af..4fb1e22 100644 --- a/src/modules/remote-play-manager.ts +++ b/src/modules/remote-play-manager.ts @@ -37,13 +37,7 @@ type RemotePlayConsole = { export class RemotePlayManager { private static instance: RemotePlayManager; - public static getInstance(): RemotePlayManager { - if (!this.instance) { - this.instance = new RemotePlayManager(); - } - - return this.instance; - } + public static getInstance = () => RemotePlayManager.instance ?? (RemotePlayManager.instance = new RemotePlayManager()); private isInitialized = false; diff --git a/src/modules/stream/stream-badges.ts b/src/modules/stream/stream-badges.ts index ce32239..122e2d3 100644 --- a/src/modules/stream/stream-badges.ts +++ b/src/modules/stream/stream-badges.ts @@ -50,13 +50,7 @@ enum StreamBadge { export class StreamBadges { private static instance: StreamBadges; - public static getInstance(): StreamBadges { - if (!StreamBadges.instance) { - StreamBadges.instance = new StreamBadges(); - } - - return StreamBadges.instance; - } + public static getInstance = () => StreamBadges.instance ?? (StreamBadges.instance = new StreamBadges()); private serverInfo: StreamServerInfo = {}; diff --git a/src/modules/stream/stream-stats.ts b/src/modules/stream/stream-stats.ts index 31c06eb..9579053 100644 --- a/src/modules/stream/stream-stats.ts +++ b/src/modules/stream/stream-stats.ts @@ -9,13 +9,7 @@ import { StreamStat, StreamStatsCollector, type StreamStatGrade } from "@/utils/ export class StreamStats { private static instance: StreamStats; - public static getInstance(): StreamStats { - if (!StreamStats.instance) { - StreamStats.instance = new StreamStats(); - } - - return StreamStats.instance; - } + public static getInstance = () => StreamStats.instance ?? (StreamStats.instance = new StreamStats()); private intervalId?: number | null; private readonly REFRESH_INTERVAL = 1 * 1000; diff --git a/src/modules/ui/dialog/navigation-dialog.ts b/src/modules/ui/dialog/navigation-dialog.ts index d1b2c5c..3e76b04 100644 --- a/src/modules/ui/dialog/navigation-dialog.ts +++ b/src/modules/ui/dialog/navigation-dialog.ts @@ -88,12 +88,7 @@ export abstract class NavigationDialog { export class NavigationDialogManager { private static instance: NavigationDialogManager; - public static getInstance(): NavigationDialogManager { - if (!NavigationDialogManager.instance) { - NavigationDialogManager.instance = new NavigationDialogManager(); - } - return NavigationDialogManager.instance; - } + public static getInstance = () => NavigationDialogManager.instance ?? (NavigationDialogManager.instance = new NavigationDialogManager()); private static readonly GAMEPAD_POLLING_INTERVAL = 50; private static readonly GAMEPAD_KEYS = [ diff --git a/src/modules/ui/dialog/remote-play-dialog.ts b/src/modules/ui/dialog/remote-play-dialog.ts index 1f6d8d1..cb0d6f7 100644 --- a/src/modules/ui/dialog/remote-play-dialog.ts +++ b/src/modules/ui/dialog/remote-play-dialog.ts @@ -11,12 +11,7 @@ import { BxEvent } from "@/utils/bx-event"; export class RemotePlayNavigationDialog extends NavigationDialog { private static instance: RemotePlayNavigationDialog; - public static getInstance(): RemotePlayNavigationDialog { - if (!RemotePlayNavigationDialog.instance) { - RemotePlayNavigationDialog.instance = new RemotePlayNavigationDialog(); - } - return RemotePlayNavigationDialog.instance; - } + public static getInstance = () => RemotePlayNavigationDialog.instance ?? (RemotePlayNavigationDialog.instance = new RemotePlayNavigationDialog()); private readonly STATE_LABELS: Record = { [RemotePlayConsoleState.ON]: t('powered-on'), diff --git a/src/modules/ui/dialog/settings-dialog.ts b/src/modules/ui/dialog/settings-dialog.ts index a5dd0dc..d9b10b4 100644 --- a/src/modules/ui/dialog/settings-dialog.ts +++ b/src/modules/ui/dialog/settings-dialog.ts @@ -64,12 +64,7 @@ type SettingTab = { export class SettingsNavigationDialog extends NavigationDialog { private static instance: SettingsNavigationDialog; - public static getInstance(): SettingsNavigationDialog { - if (!SettingsNavigationDialog.instance) { - SettingsNavigationDialog.instance = new SettingsNavigationDialog(); - } - return SettingsNavigationDialog.instance; - } + public static getInstance = () => SettingsNavigationDialog.instance ?? (SettingsNavigationDialog.instance = new SettingsNavigationDialog()); $container!: HTMLElement; private $tabs!: HTMLElement; diff --git a/src/modules/ui/fullscreen-text.ts b/src/modules/ui/fullscreen-text.ts index ff2ab18..fa7bcc3 100644 --- a/src/modules/ui/fullscreen-text.ts +++ b/src/modules/ui/fullscreen-text.ts @@ -2,12 +2,7 @@ import { CE } from "@/utils/html"; export class FullscreenText { private static instance: FullscreenText; - public static getInstance(): FullscreenText { - if (!FullscreenText.instance) { - FullscreenText.instance = new FullscreenText(); - } - return FullscreenText.instance; - } + public static getInstance = () => FullscreenText.instance ?? (FullscreenText.instance = new FullscreenText()); $text: HTMLElement; diff --git a/src/utils/stream-stats-collector.ts b/src/utils/stream-stats-collector.ts index 3818d32..d9b382a 100644 --- a/src/utils/stream-stats-collector.ts +++ b/src/utils/stream-stats-collector.ts @@ -92,13 +92,7 @@ type CurrentStats = { export class StreamStatsCollector { private static instance: StreamStatsCollector; - public static getInstance(): StreamStatsCollector { - if (!StreamStatsCollector.instance) { - StreamStatsCollector.instance = new StreamStatsCollector(); - } - - return StreamStatsCollector.instance; - } + public static getInstance = () => StreamStatsCollector.instance ?? (StreamStatsCollector.instance = new StreamStatsCollector()); // Collect in background - 60 seconds static readonly INTERVAL_BACKGROUND = 60 * 1000; diff --git a/src/utils/xcloud-api.ts b/src/utils/xcloud-api.ts index 959174d..dc93e47 100644 --- a/src/utils/xcloud-api.ts +++ b/src/utils/xcloud-api.ts @@ -3,13 +3,7 @@ import { STATES } from "./global"; export class XcloudApi { private static instance: XcloudApi; - public static getInstance(): XcloudApi { - if (!XcloudApi.instance) { - XcloudApi.instance = new XcloudApi(); - } - - return XcloudApi.instance; - } + public static getInstance = () => XcloudApi.instance ?? (XcloudApi.instance = new XcloudApi()); private CACHE_TITLES: {[key: string]: XcloudTitleInfo} = {}; private CACHE_WAIT_TIME: {[key: string]: XcloudWaitTimeInfo} = {};