UNPKG

nemeeting-electron-sdk

Version:

NetEase Meeting Electron SDK

647 lines 30.2 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var _a = require('electron'), BrowserWindow = _a.BrowserWindow, screen = _a.screen, shell = _a.shell, ipcMain = _a.ipcMain, globalShortcut = _a.globalShortcut, app = _a.app; var path = require('path'); var os = require('os'); var NEMeetingKit = require('./kit/impl/meeting_kit'); var _b = require('./utils/security'), isSafeWindowOpenUrl = _b.isSafeWindowOpenUrl, registerNavigationGuards = _b.registerNavigationGuards; var isLocal = process.env.ENV_MODE === 'local'; var newWins = {}; var isLinux = process.platform === 'linux'; var isWin32 = process.platform === 'win32'; var isWin7 = isWin32 && /^6\.1(?:\.|$)/.test(os.release()); function createBeforeMeetingWindow() { // 获取当前,鼠标所在的屏幕中心 var mousePosition = screen.getCursorScreenPoint(); var nowDisplay = screen.getDisplayNearestPoint(mousePosition); var _a = nowDisplay.workArea, x = _a.x, y = _a.y, width = _a.width, height = _a.height; var beforeMeetingWindow = new BrowserWindow({ titleBarStyle: 'hidden', frame: isWin7 ? false : !isLinux, width: 720, height: 480, x: Math.round(x + (width - 720) / 2), y: Math.round(y + (height - 480) / 2), trafficLightPosition: { x: 6, y: 6, }, resizable: false, maximizable: false, minimizable: true, movable: true, backgroundColor: '#fff', show: false, fullscreenable: false, webPreferences: { webSecurity: false, contextIsolation: false, nodeIntegration: true, enableRemoteModule: true, preload: path.join(__dirname, './before_preload.js'), }, }); var navigationGuardOptions = { allowFileRoot: path.join(__dirname, '../build'), }; registerNavigationGuards(beforeMeetingWindow, navigationGuardOptions); var homeWindowHeight = 480; var homeWindowWidth = 720; if (isLocal) { beforeMeetingWindow.loadURL('https://localhost:8000/'); } else { beforeMeetingWindow.loadFile(path.join(__dirname, '../build/index.html')); } beforeMeetingWindow.webContents.on('did-create-window', function (newWin, _a) { var _b; var originalUrl = _a.url; var url = originalUrl.replace(/.*?(?=#)/, ''); newWins[url] = newWin; registerNavigationGuards(newWin, navigationGuardOptions); // 通过 openWindow 打开的窗口,需要在关闭时通知主窗口 newWin.on('close', function (event) { event.preventDefault(); if (url.includes('scheduleMeeting')) { newWin.webContents.send('scheduleMeetingWindow:close'); return; } else if (url.includes('interpreterSetting')) { newWin.webContents.send('interpreterSettingWindow:close'); return; } beforeMeetingWindow.webContents.send("windowClosed:".concat(url)); newWin.hide(); }); if (url.includes('notification/card')) { (_b = newWin.setWindowButtonVisibility) === null || _b === void 0 ? void 0 : _b.call(newWin, false); } if (isLocal) { // newWin.webContents.openDevTools() } }); beforeMeetingWindow.webContents.setWindowOpenHandler(function (_a) { var originalUrl = _a.url; if (!isSafeWindowOpenUrl(originalUrl, navigationGuardOptions)) { return { action: 'deny' }; } var url = originalUrl.replace(/.*?(?=#)/, ''); var _b = beforeMeetingWindow.getBounds(), x = _b.x, y = _b.y; var commonOptions = { width: 375, height: 670, titleBarStyle: 'hidden', frame: !isLinux, maximizable: false, minimizable: false, resizable: false, fullscreenable: false, trafficLightPosition: { x: 10, y: 13, }, webPreferences: { webSecurity: false, contextIsolation: false, nodeIntegration: true, preload: path.join(__dirname, './ipc.js'), }, }; if (url.includes('#/notification/list')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { x: x + 375, y: y }), }; } else if (url.includes('#/history')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { frame: isWin7 ? false : !isLinux, trafficLightPosition: { x: 19, y: 19, }, width: 375, height: 664, x: Math.round(x + (homeWindowWidth - 375) / 2), y: Math.round(y + (homeWindowHeight - 664) / 2) }), }; } else if (url.includes('#/transcriptionWindow')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { trafficLightPosition: { x: 19, y: 19, }, width: 375, height: 664, x: Math.round(x + (homeWindowWidth - 375) / 2), y: Math.round(y + (homeWindowHeight - 664) / 2) }), }; } else if (url.includes('#/imageCrop')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { width: 600, height: 380 }), }; } else if (url.includes('#/about')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { trafficLightPosition: { x: 19, y: 19, }, width: 375, height: 731 }), }; } else if (url.includes('#/nps')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { width: 601, height: 395, trafficLightPosition: { x: 16, y: 19, } }), }; } else if (url.includes('#/plugin')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { frame: true }), }; } else if (url.includes('#/chat')) { return { action: 'allow', overrideBrowserWindowOptions: __assign({}, commonOptions), }; } else if (url.includes('#/setting')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { width: 800, height: 600, trafficLightPosition: { x: 16, y: 19, } }), }; } else if (url.includes('#/addressBook')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { width: 498, height: 449, trafficLightPosition: { x: 16, y: 19, } }), }; } else if (url.includes('#/notification/card')) { var nowDisplay_1 = screen.getPrimaryDisplay(); var _c = nowDisplay_1.workArea, width_1 = _c.width, height_1 = _c.height; var notifyWidth = 360; var notifyHeight = 260; return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { maximizable: false, titleBarStyle: 'hidden', frame: !isLinux, minimizable: false, fullscreenable: false, alwaysOnTop: 'screen-saver', resizable: false, skipTaskbar: true, width: 360, height: 260, x: Math.round(width_1 - notifyWidth - 60), y: Math.round(height_1 - notifyHeight - 20) }), }; } else if (url.includes('#/scheduleMeeting')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { trafficLightPosition: { x: 19, y: 19, }, width: 375, height: 664, x: Math.round(x + (homeWindowWidth - 375) / 2), y: Math.round(y + (homeWindowHeight - 664) / 2) }), }; } else if (url.includes('#/joinMeeting')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { frame: isWin7 ? false : !isLinux, width: 375, height: 400, trafficLightPosition: { x: 16, y: 19, }, x: Math.round(x + (homeWindowWidth - 375) / 2), y: Math.round(y + (homeWindowHeight - 402) / 2) }), }; } else if (url.includes('#/immediateMeeting')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { frame: isWin7 ? false : !isLinux, width: 375, height: 450, trafficLightPosition: { x: 16, y: 19, }, x: Math.round(x + (homeWindowWidth - 375) / 2), y: Math.round(y + (homeWindowHeight - 594) / 2) }), }; } else if (url.includes('#/interpreterSetting')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { width: 520, height: 541, trafficLightPosition: { x: 10, y: 13, } }), }; } else if (url.includes('#/feedback')) { return { action: 'allow', overrideBrowserWindowOptions: __assign(__assign({}, commonOptions), { width: 375, height: 731, trafficLightPosition: { x: 16, y: 19, } }), }; } return { action: 'deny' }; }); function getKeyByValue(obj, value) { return Object.keys(obj).find(function (key) { return obj[key] === value; }); } ipcMain.on('focusWindow', function (event, url) { var win = BrowserWindow.fromWebContents(event.sender); if (win === beforeMeetingWindow) { if (newWins[url] && !newWins[url].isDestroyed()) { newWins[url].show(); } } }); ipcMain.removeHandler('getBeforeMeetingAppLogsPath'); ipcMain.handle('getBeforeMeetingAppLogsPath', function () { var userDataPath = app.getPath('userData'); return path.join(userDataPath, 'logs', 'app', 'roomkit'); }); ipcMain.on('changeSetting', function (event, setting) { if (beforeMeetingWindow && !beforeMeetingWindow.isDestroyed()) { beforeMeetingWindow.webContents.send('changeSetting', setting); } Object.values(newWins).forEach(function (win) { if (win && !win.isDestroyed()) { win.webContents.send('changeSetting', setting); } }); }); beforeMeetingWindow.on('focus', function () { globalShortcut.register('f5', function () { console.log('f5 is pressed'); //mainWindow.reload() }); globalShortcut.register('CommandOrControl+R', function () { console.log('CommandOrControl+R is pressed'); //mainWindow.reload() }); }); beforeMeetingWindow.on('blur', function () { globalShortcut.unregister('f5'); globalShortcut.unregister('CommandOrControl+R'); }); // 窗口关闭时(close 可能不经过 blur)也确保注销全局快捷键,防止泄露占用系统快捷键资源 beforeMeetingWindow.on('closed', function () { globalShortcut.unregister('f5'); globalShortcut.unregister('CommandOrControl+R'); }); ipcMain.on('childWindow:closed', function (event) { var win = BrowserWindow.fromWebContents(event.sender); var url = getKeyByValue(newWins, win); url && beforeMeetingWindow.webContents.send("windowClosed:".concat(url)); win === null || win === void 0 ? void 0 : win.hide(); }); ipcMain.on('NEMeetingKitElectron', function (event, data) { var _a; var neMeetingKit = NEMeetingKit.default.getInstance(); var module = data.event; var _b = data.payload, replyKey = _b.replyKey, fnKey = _b.fnKey, args = _b.args; var modules = { neMeetingKit: neMeetingKit, getMeetingService: neMeetingKit.getMeetingService(), getMeetingRealtimeRecorderService: neMeetingKit.getMeetingRealtimeRecorderService(), getAccountService: neMeetingKit.getAccountService(), getSettingsService: neMeetingKit.getSettingsService(), getMeetingInviteService: neMeetingKit.getMeetingInviteService(), getPreMeetingService: neMeetingKit.getPreMeetingService(), getMeetingMessageChannelService: neMeetingKit.getMeetingMessageChannelService(), getContactsService: neMeetingKit.getContactsService(), getFeedbackService: neMeetingKit.getFeedbackService(), getGuestService: neMeetingKit.getGuestService(), getMeetingWebAppService: neMeetingKit.getMeetingWebAppService(), getScreenSharingService: neMeetingKit.getScreenSharingService(), }; (_a = modules[module]) === null || _a === void 0 ? void 0 : _a[fnKey].apply(_a, __spreadArray([], __read(args), false)).then(function (res) { event.sender.send(replyKey, { result: res, }); if (fnKey === 'initialize') { console.log('NEMeetingKitElectron initialize success'); neMeetingKit.setExceptionHandler({ onError: function () { // 会中进程崩溃 beforeMeetingWindow.webContents.send('NEMeetingKitCrash'); }, }); neMeetingKit.getMeetingWebAppService().setWebAppClickListener({ onClickWebAppIcon: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return new Promise(function (resolve) { if (!(beforeMeetingWindow === null || beforeMeetingWindow === void 0 ? void 0 : beforeMeetingWindow.isDestroyed())) { var replyKey_1 = "".concat(module, "-click-reply-").concat(Date.now()); ipcMain.once(replyKey_1, function (_, res) { resolve(res); }); beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'webAppClickListener', fnKey: 'onClickWebAppIcon', args: args, replyKey: replyKey_1, }); } }); }, }); neMeetingKit.getMeetingService().addMeetingStatusListener({ onMeetingStatusChanged: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (!(beforeMeetingWindow === null || beforeMeetingWindow === void 0 ? void 0 : beforeMeetingWindow.isDestroyed())) { beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingStatusListeners', fnKey: 'onMeetingStatusChanged', args: args, }); } }, }); neMeetingKit .getMeetingRealtimeRecorderService() .addMeetingRealtimeRecorderStatusListener({ onMeetingRealtimeRecorderStatusChanged: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (!(beforeMeetingWindow === null || beforeMeetingWindow === void 0 ? void 0 : beforeMeetingWindow.isDestroyed())) { beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingRealtimeRecorderStatusListeners', fnKey: 'onMeetingRealtimeRecorderStatusChanged', args: args, }); } }, }); neMeetingKit.getMeetingService().addMeetingListener({ onMemberJoinMeeting: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingListeners', fnKey: 'onMemberJoinMeeting', args: args, }); }, onMemberLeaveMeeting: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingListeners', fnKey: 'onMemberLeaveMeeting', args: args, }); }, }); neMeetingKit.getMeetingService().setOnInjectedMenuItemClickListener({ onInjectedMenuItemClick: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingOnInjectedMenuItemClickListeners', fnKey: 'onInjectedMenuItemClick', args: args, }); }, }); neMeetingKit.getMeetingService().setViewClickListener({ onClickMeetingInfoIcon: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingViewClickListeners', fnKey: 'onClickMeetingInfoIcon', args: args, }); }, }); neMeetingKit.getAccountService().addListener({ onKickOut: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'accountServiceListeners', fnKey: 'onKickOut', args: args, }); }, onAuthInfoExpired: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'accountServiceListeners', fnKey: 'onAuthInfoExpired', args: args, }); }, onReconnected: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'accountServiceListeners', fnKey: 'onReconnected', args: args, }); }, onAccountInfoUpdated: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'accountServiceListeners', fnKey: 'onAccountInfoUpdated', args: args, }); }, }); neMeetingKit.getPreMeetingService().addListener({ onMeetingItemInfoChanged: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (!(beforeMeetingWindow === null || beforeMeetingWindow === void 0 ? void 0 : beforeMeetingWindow.isDestroyed())) { beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'preMeetingListeners', fnKey: 'onMeetingItemInfoChanged', args: args, }); } }, onLocalRecorderStatus: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'preMeetingListeners', fnKey: 'onLocalRecorderStatus', args: args, }); }, onLocalRecorderError: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'preMeetingListeners', fnKey: 'onLocalRecorderError', args: args, }); }, onMyInMeetingDeviceListChanged: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'preMeetingListeners', fnKey: 'onMyInMeetingDeviceListChanged', args: args, }); }, }); neMeetingKit .getMeetingInviteService() .addMeetingInviteStatusListener({ onMeetingInviteStatusChanged: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingInviteStatusListeners', fnKey: 'onMeetingInviteStatusChanged', args: args, }); }, }); neMeetingKit .getMeetingMessageChannelService() .addMeetingMessageChannelListener({ onSessionMessageReceived: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingMessageChannelListeners', fnKey: 'onSessionMessageReceived', args: args, }); }, onCustomMessageReceived: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingMessageChannelListeners', fnKey: 'onCustomMessageReceived', args: args, }); }, onSessionMessageRecentChanged: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingMessageChannelListeners', fnKey: 'onSessionMessageRecentChanged', args: args, }); }, onSessionMessageDeleted: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingMessageChannelListeners', fnKey: 'onSessionMessageDeleted', args: args, }); }, onSessionMessageAllDeleted: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } beforeMeetingWindow.webContents.send('NEMeetingKitElectron-Listener', { module: 'meetingMessageChannelListeners', fnKey: 'onSessionMessageAllDeleted', args: args, }); }, }); } }).catch(function (error) { event.sender.send(replyKey, { error: error, }); }); }); return beforeMeetingWindow; } module.exports = { createBeforeMeetingWindow: createBeforeMeetingWindow, beforeNewWins: newWins, };