From 488724aa62de7445a68631211a24584ecc9073a7 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Thu, 2 Jan 2025 11:42:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 8 ++++-- preload.js | 55 ++++++++++++++++++++++++++++++++++++-- src/page/Meeting/index.tsx | 39 ++++----------------------- src/render.d.ts | 2 +- src/utils/package/agora.ts | 6 +++++ 5 files changed, 71 insertions(+), 39 deletions(-) diff --git a/main.js b/main.js index 0415f85..bfcd67b 100644 --- a/main.js +++ b/main.js @@ -610,10 +610,14 @@ app.on('ready', () => { } } } else { - if (childWindow[config.key].isVisible()) { + if (config.bool) { childWindow[config.key].hide() } else { - childWindow[config.key].show() + if (childWindow[config.key].isVisible()) { + childWindow[config.key].hide() + } else { + childWindow[config.key].show() + } } } }); diff --git a/preload.js b/preload.js index 55a0c47..4879689 100644 --- a/preload.js +++ b/preload.js @@ -116,8 +116,59 @@ window.electron = { ipcRenderer.invoke('setRegistry', uuid) }, // 创建子窗口 - createChildWindow: (config) => { - ipcRenderer.invoke('createChildWindow', config) + createChildWindow: (str) => { + switch (str) { + case 'show': + ipcRenderer.invoke('setChildWindowShow', { + key: 'shareScreenWindow', + }) + ipcRenderer.invoke('setChildWindowShow', { + key: 'chatSmallWindow', + }) + break; + case 'hide': + ipcRenderer.invoke('createChildWindow', { + url: location.origin + `/#/noticeWindow`, + width: 388, + height: 150, + key: 'noticeWindow', + }) + ipcRenderer.invoke('createChildWindow', { + url: location.origin + `/#/shareScreenWindow`, + width: 400, + height: 80, + key: 'shareScreenWindow', + }) + ipcRenderer.invoke('createChildWindow', { + url: location.origin + `/#/chatSmallWindow`, + width: 200, + height: 150, + key: 'chatSmallWindow', + }) + ipcRenderer.invoke('createChildWindow', { + url: location.origin + `/#/chatBigWindow`, + width: 540, + height: 640, + key: 'chatBigWindow', + }) + ipcRenderer.invoke('createChildWindow', { + url: location.origin + `/#/userListWindow`, + width: 440, + height: 540, + key: 'userListWindow', + }) + break; + case 'stop': + ipcRenderer.invoke('setChildWindowShow', { + key: 'shareScreenWindow', + bool: true + }) + ipcRenderer.invoke('setChildWindowShow', { + key: 'chatSmallWindow', + bool: true + }) + break; + } }, // 关闭子窗口 closeChildWindow: (key) => { diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index e85500f..4db2a3b 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -209,6 +209,7 @@ const Meeting: React.FC = () => { const channel = new BroadcastChannel('meeting_channel'); let storeDevice: any; useEffect(() => { + window.electron.createChildWindow('hide') let time: NodeJS.Timeout; setUser(userInfo) window.electron.getIsMaximized().then((res: boolean) => { @@ -485,6 +486,7 @@ const Meeting: React.FC = () => { window.removeEventListener('wheel', handleWheelChange); clearInterval(time) channel.close(); + window.electron.closeChildWindow('shareScreenWindow') }; }, []); @@ -1728,39 +1730,7 @@ const Meeting: React.FC = () => { const isOpen = await getKeyOpenChildWindow('shareScreenWindow') setIsScreenCapture(true) if (!isOpen) { - window.electron.createChildWindow({ - url: location.origin + `/#/noticeWindow`, - width: 388, - height: 150, - key: 'noticeWindow', - show: true, - }) - window.electron.createChildWindow({ - url: location.origin + `/#/shareScreenWindow`, - width: 400, - height: 80, - key: 'shareScreenWindow', - show: true, - }) - window.electron.createChildWindow({ - url: location.origin + `/#/chatSmallWindow`, - width: 200, - height: 150, - key: 'chatSmallWindow', - show: true, - }) - window.electron.createChildWindow({ - url: location.origin + `/#/chatBigWindow`, - width: 540, - height: 640, - key: 'chatBigWindow', - }) - window.electron.createChildWindow({ - url: location.origin + `/#/userListWindow`, - width: 440, - height: 540, - key: 'userListWindow', - }) + window.electron.createChildWindow('show') setKeyOpenChildWindow('shareScreenWindow', true) window.electron.setMainWindowSize({ width: 250, @@ -1819,9 +1789,10 @@ const Meeting: React.FC = () => { const footerListTemplate = [...footerList] await agora.leaveChannelEx(userInfo.screenShareId) agora.stopScreenCapture() + await agora.destroyRendererByView() footerListTemplate[1][0].title = '共享屏幕' setFooterList(footerListTemplate) - window.electron.closeChildWindow('shareScreenWindow') + window.electron.createChildWindow('stop') setKeyOpenChildWindow('shareScreenWindow', false) setIsScreenCapture(bool => { if (bool) { diff --git a/src/render.d.ts b/src/render.d.ts index 95e2967..ad0eae5 100644 --- a/src/render.d.ts +++ b/src/render.d.ts @@ -29,7 +29,7 @@ export interface IElectronAPI { isVisible: () => Promise; setRegistry: (uuid: string) => any; getRegistry: () => any; - createChildWindow: (config: any) => void; + createChildWindow: (str: string) => void; setChildWindow: (config: any) => void; setChildWindowShow: (config: any) => void; closeChildWindow: (key: string) => void; diff --git a/src/utils/package/agora.ts b/src/utils/package/agora.ts index 78b4c1c..d4d544d 100644 --- a/src/utils/package/agora.ts +++ b/src/utils/package/agora.ts @@ -385,6 +385,12 @@ export const agora = { destroyRendererByConfig: async (uid: number, channelId?: string) => { await rtcEngine.destroyRendererByConfig(VideoSourceType.VideoSourceRemote, channelId, uid); }, + destroyRendererByView: async () => { + let dom = document.getElementById(`meetingAbsoluteVideo`); + if (dom) { + await rtcEngine.destroyRendererByView(dom); + } + }, // ai降噪 setAINSMode: async (enabled: boolean, mode: AudioAinsMode) => { rtcEngine.setAINSMode(enabled, mode)