From 2b9895de70855bc0ab5791001fd00f900e1633bc Mon Sep 17 00:00:00 2001 From: Wurielle Date: Sun, 12 Jan 2025 14:54:39 +0100 Subject: [PATCH] feat: add messenger reposition within overlay --- apps/app/src/electron/events/main.ts | 42 +- apps/app/src/electron/events/renderer.ts | 50 +- apps/app/src/electron/game-overlay.ts | 24 +- apps/app/src/electron/renderer.ts | 8 + .../messenger/components/NvMessenger.vue | 84 +-- .../messenger/electron/overlay-window.ts | 12 +- .../src/teams/messenger/electron/window.ts | 92 ++-- .../electron-messenger-window/index.ts | 482 +++++++++--------- apps/app/src/teams/overlay/electron/window.ts | 14 +- .../teams/speech-worker/electron/window.ts | 18 +- 10 files changed, 447 insertions(+), 379 deletions(-) diff --git a/apps/app/src/electron/events/main.ts b/apps/app/src/electron/events/main.ts index 44063542e..5de93a31e 100644 --- a/apps/app/src/electron/events/main.ts +++ b/apps/app/src/electron/events/main.ts @@ -2,41 +2,45 @@ import { processes } from '@/types/electron' import { ipcMain } from 'electron-postman' export const onIPCProcessError = (callback: (error: Error, process: string) => any) => { - processes.forEach((process) => { - ipcMain.on(process, 'error', (payload: { name: string; message: string }) => - callback(payload, process), - ) - }) + processes.forEach((process) => { + ipcMain.on(process, 'error', (payload: { name: string; message: string }) => + callback(payload, process), + ) + }) } export const onIPCGameOverlayStartIntercept = (callback: () => any) => { - processes.forEach((process) => { - ipcMain.on(process, 'game-overlay-start-intercept', () => - callback(), - ) - }) + processes.forEach((process) => { + ipcMain.on(process, 'game-overlay-start-intercept', () => + callback(), + ) + }) } export const onIPCGameOverlayStopIntercept = (callback: () => any) => { - processes.forEach((process) => { - ipcMain.on(process, 'game-overlay-stop-intercept', () => - callback(), - ) - }) + processes.forEach((process) => { + ipcMain.on(process, 'game-overlay-stop-intercept', () => + callback(), + ) + }) } export const emitIPCCancelCurrentMessage = () => { - ipcMain.sendTo('speech-worker', 'cancel-current-message') + ipcMain.sendTo('speech-worker', 'cancel-current-message') } export const emitIPCCancelAllMessages = () => { - ipcMain.sendTo('speech-worker', 'cancel-all-messages') + ipcMain.sendTo('speech-worker', 'cancel-all-messages') } export const emitIPCOverlayInputCharacter = (character: string) => { - ipcMain.sendTo('overlay', 'overlay-input-character', character) + ipcMain.sendTo('overlay', 'overlay-input-character', character) } export const emitIPCOverlayInputCommand = (command: string, args: any[] = []) => { - ipcMain.sendTo('overlay', 'overlay-input-command', [command, ...args]) + ipcMain.sendTo('overlay', 'overlay-input-command', [command, ...args]) +} + +export const emitIPCGameOverlayResize = (size: { width: number, height: number }) => { + ipcMain.sendTo('messenger-game-overlay', 'resize', size) } diff --git a/apps/app/src/electron/events/renderer.ts b/apps/app/src/electron/events/renderer.ts index 428c3026a..9bdf97db3 100644 --- a/apps/app/src/electron/events/renderer.ts +++ b/apps/app/src/electron/events/renderer.ts @@ -4,52 +4,58 @@ import { IzabelaMessage } from '@/modules/izabela/types' const { ipc } = window export const emitIPCProcessError = (payload: { name: string; message: string }) => { - processes.forEach((process) => { - ipc.sendTo(process, 'error', payload) - }) + processes.forEach((process) => { + ipc.sendTo(process, 'error', payload) + }) } export const emitIPCGameOverlayStartIntercept = () => { - ipc.sendTo(mainProcess, 'game-overlay-start-intercept') + ipc.sendTo(mainProcess, 'game-overlay-start-intercept') } export const emitIPCGameOverlayStopIntercept = () => { - ipc.sendTo(mainProcess, 'game-overlay-stop-intercept') + ipc.sendTo(mainProcess, 'game-overlay-stop-intercept') } type IPCSayPayload = string | IzabelaMessage export const onIPCSay = (callback: (payload: IPCSayPayload) => any) => { - processes.forEach((process) => { - ipc.on(process, 'say', callback) - }) + processes.forEach((process) => { + ipc.on(process, 'say', callback) + }) } export const emitIPCSay = (payload: IPCSayPayload) => { - console.log(ipc, payload) - ipc.sendTo('speech-worker', 'say', payload) + console.log(ipc, payload) + ipc.sendTo('speech-worker', 'say', payload) } export const onIPCCancelCurrentMessage = (callback: () => any) => { - processes.forEach((process) => { - ipc.on(process, 'cancel-current-message', callback) - }) + processes.forEach((process) => { + ipc.on(process, 'cancel-current-message', callback) + }) } export const onIPCCancelAllMessages = (callback: () => void) => { - processes.forEach((process) => { - ipc.on(process, 'cancel-all-messages', callback) - }) + processes.forEach((process) => { + ipc.on(process, 'cancel-all-messages', callback) + }) } export const onIPCOverlayInputCharacter = (callback: (key: any) => void) => { - processes.forEach((process) => { - ipc.on(process, 'overlay-input-character', callback) - }) + processes.forEach((process) => { + ipc.on(process, 'overlay-input-character', callback) + }) } export const onIPCOverlayInputCommand = (callback: (args: any[]) => void) => { - processes.forEach((process) => { - ipc.on(process, 'overlay-input-command', callback) - }) + processes.forEach((process) => { + ipc.on(process, 'overlay-input-command', callback) + }) +} + +export const onIPCGameOverlayResize = (callback: (size: { width: number, height: number }) => void) => { + processes.forEach((process) => { + ipc.on(process, 'resize', callback) + }) } diff --git a/apps/app/src/electron/game-overlay.ts b/apps/app/src/electron/game-overlay.ts index 351834852..820a955dc 100644 --- a/apps/app/src/electron/game-overlay.ts +++ b/apps/app/src/electron/game-overlay.ts @@ -1,5 +1,6 @@ import { app, BrowserWindow, screen, shell } from 'electron' import { + emitIPCGameOverlayResize, onIPCGameOverlayStartIntercept, onIPCGameOverlayStopIntercept, } from '@/electron/events/main.ts' @@ -46,12 +47,12 @@ class GameOverlay { ]) this.Overlay!.setEventCallback((event: string, payload: any) => { - if (event === 'graphics.window.event.resize') { - const focusWin = this.windows.get('messenger-game-overlay') - if (focusWin) { - const { width, height } = payload - focusWin.setSize(width, height) - } + if (['graphics.window.event.resize', 'graphics.window'].includes(event)) { + const { width, height } = payload + emitIPCGameOverlayResize({ + width, + height, + }) } if (event === 'game.input') { const window = BrowserWindow.fromId(payload.windowId) @@ -69,19 +70,17 @@ class GameOverlay { if (event === 'game.input.intercept' && payload.intercepting) { const focusWin = this.windows.get('messenger-game-overlay') if (focusWin) { - console.log(payload) focusWin.blurWebView() focusWin.focusOnWebView() const { top, left, right, bottom } = Window.getByPid( payload.pid, ).getDimensions() - const width = right - left - const height = bottom - top - // focusWin.setSize(width, height) + const width = right-left + const height = bottom-top mouse.getPosition().then(async (initialPosition) => { await mouse.setPosition( - new Point(left + width / 2, top + height / 2), + new Point(left+width / 2, top+height / 2), ) await mouse.leftClick() await mouse.setPosition(initialPosition) @@ -145,7 +144,6 @@ class GameOverlay { }) window.on('resize', () => { - console.log(`${name} resizing`) this.Overlay!.sendWindowBounds(window.id, { rect: { x: window.getBounds().x, @@ -224,7 +222,7 @@ class GameOverlay { for (const window of this.Overlay.getTopWindows()) { if (window.processId === pid) { console.log( - `--------------------\n injecting ${JSON.stringify(window)}`, + `--------------------\n injecting ${ JSON.stringify(window) }`, ) this.Overlay.injectProcess(window) } diff --git a/apps/app/src/electron/renderer.ts b/apps/app/src/electron/renderer.ts index 3d03fe980..d9c45c0fa 100644 --- a/apps/app/src/electron/renderer.ts +++ b/apps/app/src/electron/renderer.ts @@ -1 +1,9 @@ import '@/modules/electron-log/renderer' + +import { onIPCGameOverlayResize } from '@/electron/events/renderer.ts' + +onIPCGameOverlayResize(({ width, height }) => { + const appEl = document.getElementById('app') + appEl.style.width = width+'px' + appEl.style.height = height+'px' +}) \ No newline at end of file diff --git a/apps/app/src/teams/messenger/components/NvMessenger.vue b/apps/app/src/teams/messenger/components/NvMessenger.vue index ac22f8dfc..748aaf586 100644 --- a/apps/app/src/teams/messenger/components/NvMessenger.vue +++ b/apps/app/src/teams/messenger/components/NvMessenger.vue @@ -58,16 +58,7 @@