diff --git a/apps/app/src/electron/app.ts b/apps/app/src/electron/app.ts index 28df6626..f523f100 100644 --- a/apps/app/src/electron/app.ts +++ b/apps/app/src/electron/app.ts @@ -27,22 +27,25 @@ const App = () => { const createWindows = () => app .whenReady() - .then(() => ElectronWindowManager.registerInstance( - 'messenger', - createMessengerWindow, - )) - .then(() => ElectronWindowManager.registerInstance( - 'overlay', - createOverlayWindow, - )) - .then(() => ElectronWindowManager.registerInstance( - 'speech-worker', - createSpeechWorkerWindow, - )) - .then(() => ElectronWindowManager.registerInstance( - 'messenger-game-overlay', - createMessengerGameOverlayWindow, - )) + .then(async () => Promise.all([ + ElectronWindowManager.registerInstance( + 'messenger', + createMessengerWindow, + ), + ElectronWindowManager.registerInstance( + 'overlay', + createOverlayWindow, + ), + ElectronWindowManager.registerInstance( + 'speech-worker', + createSpeechWorkerWindow, + ), + ElectronWindowManager.registerInstance( + 'messenger-game-overlay', + createMessengerGameOverlayWindow, + ), + ])) + const registerElectronPinia = () => { createApp(h({})).use( diff --git a/apps/app/src/electron/bridge.ts b/apps/app/src/electron/bridge.ts index b2b4e37a..d14f0592 100644 --- a/apps/app/src/electron/bridge.ts +++ b/apps/app/src/electron/bridge.ts @@ -2,13 +2,13 @@ import { bridge } from '@packages/electron-bridger' import electronDialog from '@/modules/electron-dialog' import electronFilesystem from '@/modules/electron-filesystem' import electronMessengerWindow from '@/teams/messenger/modules/electron-messenger-window' +import electronOverlayWindow from '@/teams/overlay/modules/electron-overlay-window' import electronSpeechWorkerWindow from '@/teams/speech-worker/modules/electron-speech-worker-window' import electronKeybinding from '@/modules/electron-keybinding' import electronDisplay from '@/modules/electron-display' import electronResources from '@/modules/electron-resources' import electronSi from '@/modules/electron-si' import electronTranslation from '@/modules/electron-translation' -import electronOverlayWindow from '@/teams/overlay/modules/electron-overlay-window' export const bridgeModules = () => bridge.register([ diff --git a/apps/app/src/electron/game-overlay.ts b/apps/app/src/electron/game-overlay.ts index 9af5a8ea..978f9d27 100644 --- a/apps/app/src/electron/game-overlay.ts +++ b/apps/app/src/electron/game-overlay.ts @@ -8,7 +8,6 @@ import { mouse, Point } from '@nut-tree-fork/nut-js' import path from 'path' import { EXTERNALS_DIR } from '@/electron/utils.ts' import { fork } from 'child_process' -import { Window } from 'win-control' import { Deferred } from '@packages/toolbox' import { useGameOverlayStore } from '@/features/game-overlay/store' import { onWatcherCleanup, watch } from 'vue' @@ -30,6 +29,7 @@ type ProcessEvent = { const ready = Deferred() class GameOverlay { + public WinControl: any = null public Overlay: any = null public hookedProcesses: ProcessInfo[] = [] public intercepting = false @@ -86,7 +86,7 @@ class GameOverlay { if (focusWin) { focusWin.blurWebView() focusWin.focusOnWebView() - const { top, left, right, bottom } = Window.getByPid( + const { top, left, right, bottom } = this.WinControl.getByPid( payload.pid, ).getDimensions() const width = right-left @@ -236,7 +236,7 @@ class GameOverlay { let timeout: ReturnType let interval: ReturnType interval = setInterval(() => { - const foregroundWindow = Window.getForeground() + const foregroundWindow = this.WinControl.getForeground() if (pid === foregroundWindow?.getPid()) { clearInterval(interval) clearTimeout(timeout) @@ -266,7 +266,9 @@ class GameOverlay { public start() { const databasesStore = useDatabasesStore() const gameOverlayStore = useGameOverlayStore() - return Promise.all([import('@packages/electron-game-overlay'), gameOverlayStore.$whenReady()]).then(([Overlay]) => { + /* Importing win-control in preload breaks reload so we import it dynamically on start instead */ + return Promise.all([import('@packages/electron-game-overlay'), import('win-control'), gameOverlayStore.$whenReady()]).then(([Overlay, WinControl]) => { + this.WinControl = WinControl this.Overlay = Overlay.default this.scaleFactor = screen.getDisplayNearestPoint({ x: 0, diff --git a/apps/app/src/teams/messenger/modules/electron-messenger-window/index.ts b/apps/app/src/teams/messenger/modules/electron-messenger-window/index.ts index b3c6a4eb..096ad281 100644 --- a/apps/app/src/teams/messenger/modules/electron-messenger-window/index.ts +++ b/apps/app/src/teams/messenger/modules/electron-messenger-window/index.ts @@ -9,7 +9,6 @@ import { useHitboxesStore } from '@/modules/vue-hitboxes/hitboxes.store' import { Deferred } from '@packages/toolbox' import ffi from 'ffi-napi' import { getNativeWindowHandleInt } from '@/utils/electron-window' -import { Window } from 'win-control' import gameOverlay from '@/electron/game-overlay.ts' export const ElectronMessengerWindow = () => { @@ -21,6 +20,7 @@ export const ElectronMessengerWindow = () => { // let lastKeypressTime = 0 // const doubleKeypressDelta = 500 let registeredWindow: BrowserWindow | null = null + let WinControl: any | null = null let hitboxesStore: ReturnType | undefined let settingsStore: ReturnType | undefined let messengerStore: ReturnType | undefined @@ -199,7 +199,7 @@ export const ElectronMessengerWindow = () => { } const toggleWindow = throttle((context: 'mouse' | 'keyboard') => { - const foregroundWindowPid = Window.getForeground()?.getPid() + const foregroundWindowPid = WinControl?.getForeground()?.getPid() const hookedProcess = gameOverlay.hookedProcesses.find((process) => process.pid === foregroundWindowPid) if (hookedProcess && !gameOverlay.intercepting) { gameOverlay.startIntercept() @@ -293,6 +293,7 @@ export const ElectronMessengerWindow = () => { setDisplay(localSettingsStore.display) }) ready.resolve(window) + import('win-control').then((module) => WinControl = module) } isReady().then(() => {