mirror of
https://github.com/finos/SymphonyElectron.git
synced 2024-12-31 19:27:00 -06:00
08c25e4b58
1. Completed functionality 2. Refactored and added code comments 3. Fixed some style issues 4. Added some safety checks 5. Updated Window size 6. Added some safety checks 7. Fixed some keyboard interaction 8. Fixed styles for Windows OS 9. Added a functionality to place screen picker based on the event sender 10. Updated the code to open the screen picker on top of the focused window instead of finding a ref using window name 11. Added a HTML content to display error message 12. Updated window title 13. Added missing return 14. Changed the method name from `openScreenPickerWindowWindow` to `openScreenPickerWindow` 15. Fixed a typo and added code comment 16. Changes as per PR review 17. Created Enum for key code 18. Updated for loop to for..of loop 19. Updated colors from hex to rgba 20. Setting cursor property as pointer for cancel button and item-container 21. Made window draggable 22. Changed font-family to system fonts 23. Added box shadow for buttons 24. Added a new API to support backward compatibility and deprecated the existing one 25. Fixed the condition prevent a new window from being opened if there is an existing window
154 lines
5.0 KiB
JavaScript
154 lines
5.0 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* This module runs in the main process and handles api calls
|
|
* from the renderer process.
|
|
*/
|
|
const electron = require('electron');
|
|
|
|
const windowMgr = require('./windowMgr.js');
|
|
const log = require('./log.js');
|
|
const logLevels = require('./enums/logLevels');
|
|
const activityDetection = require('./activityDetection');
|
|
const badgeCount = require('./badgeCount.js');
|
|
const protocolHandler = require('./protocolHandler');
|
|
const configureNotification = require('./notify/settings/configure-notification-position');
|
|
const { bringToFront } = require('./bringToFront.js');
|
|
const eventEmitter = require('./eventEmitter');
|
|
const { isMac } = require('./utils/misc');
|
|
const { openScreenPickerWindow } = require('./desktopCapturer');
|
|
|
|
const apiEnums = require('./enums/api.js');
|
|
const apiCmds = apiEnums.cmds;
|
|
const apiName = apiEnums.apiName;
|
|
|
|
// can be overridden for testing
|
|
let checkValidWindow = true;
|
|
|
|
/**
|
|
* Ensure events comes from a window that we have created.
|
|
* @param {EventEmitter} event node emitter event to be tested
|
|
* @return {Boolean} returns true if exists otherwise false
|
|
*/
|
|
function isValidWindow(event) {
|
|
if (!checkValidWindow) {
|
|
return true;
|
|
}
|
|
let result = false;
|
|
if (event && event.sender) {
|
|
// validate that event sender is from window we created
|
|
const browserWin = electron.BrowserWindow.fromWebContents(event.sender);
|
|
const winKey = event.sender.browserWindowOptions &&
|
|
event.sender.browserWindowOptions.winKey;
|
|
|
|
result = windowMgr.hasWindow(browserWin, winKey);
|
|
}
|
|
|
|
if (!result) {
|
|
log.send(logLevels.WARN, 'invalid window try to perform action, ignoring action');
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Method that is invoked when the application is reloaded/navigated
|
|
* window.addEventListener('beforeunload')
|
|
* @param windowName
|
|
*/
|
|
function sanitize(windowName) {
|
|
// To make sure the reload event is from the main window
|
|
if (windowMgr.getMainWindow() && windowName === windowMgr.getMainWindow().winName) {
|
|
// reset the badge count whenever an user refreshes the electron client
|
|
badgeCount.show(0);
|
|
|
|
// Terminates the screen snippet process on reload
|
|
if (!isMac) {
|
|
eventEmitter.emit('killScreenSnippet');
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handle API related ipc messages from renderers. Only messages from windows
|
|
* we have created are allowed.
|
|
*/
|
|
electron.ipcMain.on(apiName, (event, arg) => {
|
|
if (!isValidWindow(event)) {
|
|
return;
|
|
}
|
|
|
|
if (!arg) {
|
|
return;
|
|
}
|
|
|
|
switch(arg.cmd) {
|
|
case apiCmds.isOnline:
|
|
if (typeof arg.isOnline === 'boolean') {
|
|
windowMgr.setIsOnline(arg.isOnline);
|
|
}
|
|
break;
|
|
case apiCmds.setBadgeCount:
|
|
if (typeof arg.count === 'number') {
|
|
badgeCount.show(arg.count);
|
|
}
|
|
break;
|
|
case apiCmds.registerProtocolHandler:
|
|
protocolHandler.setProtocolWindow(event.sender);
|
|
protocolHandler.checkProtocolAction();
|
|
break;
|
|
case apiCmds.badgeDataUrl:
|
|
if (typeof arg.dataUrl === 'string' && typeof arg.count === 'number') {
|
|
badgeCount.setDataUrl(arg.dataUrl, arg.count);
|
|
}
|
|
break;
|
|
case apiCmds.activate:
|
|
if (typeof arg.windowName === 'string') {
|
|
windowMgr.activate(arg.windowName);
|
|
}
|
|
break;
|
|
case apiCmds.registerBoundsChange:
|
|
windowMgr.setBoundsChangeWindow(event.sender);
|
|
break;
|
|
case apiCmds.registerLogger:
|
|
// renderer window that has a registered logger from JS.
|
|
log.setLogWindow(event.sender);
|
|
break;
|
|
case apiCmds.registerActivityDetection:
|
|
if (typeof arg.period === 'number') {
|
|
// renderer window that has a registered activity detection from JS.
|
|
activityDetection.setActivityWindow(arg.period, event.sender);
|
|
}
|
|
break;
|
|
case apiCmds.showNotificationSettings:
|
|
if (typeof arg.windowName === 'string') {
|
|
configureNotification.openConfigurationWindow(arg.windowName);
|
|
}
|
|
break;
|
|
case apiCmds.sanitize:
|
|
if (typeof arg.windowName === 'string') {
|
|
sanitize(arg.windowName);
|
|
}
|
|
break;
|
|
case apiCmds.bringToFront:
|
|
// validates the user bring to front config and activates the wrapper
|
|
if (typeof arg.reason === 'string' && arg.reason === 'notification') {
|
|
bringToFront(arg.windowName, arg.reason);
|
|
}
|
|
break;
|
|
case apiCmds.openScreenPickerWindow:
|
|
if (Array.isArray(arg.sources) && typeof arg.id === 'number') {
|
|
openScreenPickerWindow(event.sender, arg.sources, arg.id);
|
|
}
|
|
break;
|
|
default:
|
|
}
|
|
|
|
});
|
|
|
|
// expose these methods primarily for testing...
|
|
module.exports = {
|
|
shouldCheckValidWindow: function(shouldCheck) {
|
|
checkValidWindow = shouldCheck;
|
|
}
|
|
}; |