diff --git a/src/screenshare/main.ts b/src/screenshare/main.ts index e36ab43..c0b7597 100644 --- a/src/screenshare/main.ts +++ b/src/screenshare/main.ts @@ -2,36 +2,35 @@ import {BrowserWindow, desktopCapturer, ipcMain, session, shell} from "electron" import path from "path"; import {iconPath} from "../main"; var capturerWindow: BrowserWindow; -session.defaultSession.setDisplayMediaRequestHandler(async (request, callback) => { - const sources = await desktopCapturer.getSources({ - types: ["screen", "window"] +function registerCustomHandler() { + session.defaultSession.setDisplayMediaRequestHandler(async (request, callback) => { + const sources = await desktopCapturer.getSources({ + types: ["screen", "window"] + }); + console.log(sources); + capturerWindow = new BrowserWindow({ + width: 800, + height: 600, + title: "ArmCord Screenshare", + darkTheme: true, + icon: iconPath, + frame: true, + autoHideMenuBar: true, + webPreferences: { + sandbox: false, + spellcheck: false, + preload: path.join(__dirname, "preload.js") + } + }); + ipcMain.once("selectScreenshareSource", (event, id, name) => { + console.log(sources[id]); + console.log(id); + capturerWindow.close(); + var result = {id, name}; + callback({video: result}); + }); + capturerWindow.loadURL(`file://${__dirname}/picker.html`); + capturerWindow.webContents.send("getSources", sources); }); - console.log(sources); - capturerWindow = new BrowserWindow({ - width: 800, - height: 600, - title: "ArmCord Screenshare", - darkTheme: true, - icon: iconPath, - frame: true, - autoHideMenuBar: true, - webPreferences: { - sandbox: false, - spellcheck: false, - preload: path.join(__dirname, "preload.js") - } - }); - ipcMain.on("selectScreenshareSource", (event, id, name) => { - console.log(sources[id]); - console.log(id); - callback({video: {id, name}}); - - capturerWindow.close(); - }); - capturerWindow.webContents.setWindowOpenHandler(({url}) => { - shell.openExternal(url); - return {action: "deny"}; - }); - capturerWindow.loadURL(`file://${__dirname}/picker.html`); - capturerWindow.webContents.send("getSources", sources); -}); +} +registerCustomHandler(); diff --git a/src/screenshare/preload.ts b/src/screenshare/preload.ts index 5965428..2f6c8a2 100644 --- a/src/screenshare/preload.ts +++ b/src/screenshare/preload.ts @@ -5,7 +5,7 @@ interface IPCSources { thumbnail: HTMLCanvasElement; } async function addDisplays() { - ipcRenderer.on("getSources", (event, arg) => { + ipcRenderer.once("getSources", (event, arg) => { var sources: IPCSources[] = arg; console.log(sources); const selectionElem = document.createElement("div"); @@ -45,8 +45,6 @@ async function addDisplays() { } } catch (err) { console.error(err); - } finally { - ipcRenderer.sendSync("closeScreenshareWindow"); } }); });