From 65b08f09521109550284af6aa4f21d490c500af8 Mon Sep 17 00:00:00 2001 From: Vikas Shashidhar Date: Wed, 24 May 2017 19:02:49 +0530 Subject: [PATCH 01/26] Electron-17: Crash Reporter 1. Implemented crash reporter for both main and renderer processes 2. Fetch crash log details from Symphony.config 3. Send reports to a break pad server --- config/Symphony.config | 1 + demo/index.html | 13 +++++++++++++ js/crashReporter/index.js | 34 ++++++++++++++++++++++++++++++++++ js/main.js | 21 ++++++++++++++++++++- js/preload/preloadMain.js | 11 +++++++++++ js/windowMgr.js | 34 ++++++++++++++++++++++++++++++++++ 6 files changed, 113 insertions(+), 1 deletion(-) create mode 100755 js/crashReporter/index.js diff --git a/config/Symphony.config b/config/Symphony.config index fd18abec..c6864d5e 100644 --- a/config/Symphony.config +++ b/config/Symphony.config @@ -1,5 +1,6 @@ { "url": "https://foundation-dev.symphony.com", + "sendCrashReports": true, "minimizeOnClose" : true, "launchOnStartup" : true } \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index d4d67749..5d4d67fe 100644 --- a/demo/index.html +++ b/demo/index.html @@ -36,6 +36,13 @@



+

+ Crash Process: +

+ +

+
+

Badge Count:


@@ -165,6 +172,12 @@ console.log('bounds changed for=', arg) } + // crash the renderer process + const crash = document.getElementById('crash'); + crash.addEventListener('click', function () { + ssf.crashRendererProcess(); + }); + var getSources = document.getElementById('get-sources'); getSources.addEventListener('click', function() { ssf.getMediaSources({types: ['window', 'screen']}, function(error, sources) { diff --git a/js/crashReporter/index.js b/js/crashReporter/index.js new file mode 100755 index 00000000..50cef570 --- /dev/null +++ b/js/crashReporter/index.js @@ -0,0 +1,34 @@ +'use strict'; + +const {crashReporter} = require('electron'); + +/** + * Setup the crash reporter with appropriate information + * @param sendCrashReports: An object to get crash information + * from the global config file + * @param detailObj: An object to send extra parameters + * via the crash reporter + */ +function setupCrashReporter(detailObj, sendCrashReports) { + // Will eventually have to fetch all these from the config file. + let crashReportInfo = { + companyName: "Symphony Communication Services, LLC", + submitURL: "http://crash.symphony.com", + autoSubmit: true, + uploadToServer: sendCrashReports, + extra: detailObj + } + + // App store builds cannot use crash reporter, so, return if that's the case + if (process.platform === 'darwin' && process.mas) { + return + } + + if (process.type === 'renderer' && !(process.platform === 'darwin')) { + return; + } + + crashReporter.start(crashReportInfo); +} + +exports.setupCrashReporter = setupCrashReporter; \ No newline at end of file diff --git a/js/main.js b/js/main.js index f1b2d8fd..79c14d1f 100644 --- a/js/main.js +++ b/js/main.js @@ -7,9 +7,11 @@ const squirrelStartup = require('electron-squirrel-startup'); const AutoLaunch = require('auto-launch'); const urlParser = require('url'); const { getConfigField } = require('./config.js'); -const { isDevEnv} = require('./utils/misc.js'); +const { isDevEnv } = require('./utils/misc.js'); const protocolHandler = require('./protocolHandler'); +const crashReporter = require('./crashReporter'); + // used to check if a url was opened when the app was already open let isAppAlreadyOpen = false; @@ -161,6 +163,20 @@ function createWin(urlFromConfig) { windowMgr.createMainWindow(url); } +/** + * Get crash info from global config and setup crash reporter for Main Process. + */ +function initializeCrashReporter () { + getConfigField('sendCrashReports').then( + function (data) { + crashReporter.setupCrashReporter({'window': 'main'}, data); + } + ).catch(function (err) { + let title = 'Error loading configuration'; + electron.dialog.showErrorBox(title, title + ': ' + err); + }) +} + /** * processes protocol action for windows clients * @param argv {Array} an array of command line arguments @@ -207,3 +223,6 @@ function handleProtocolAction(uri) { protocolHandler.processProtocolAction(uri); } } + +// Initialize the crash reporter +initializeCrashReporter(); \ No newline at end of file diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index 0f78d090..4994805a 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -18,6 +18,7 @@ const apiEnums = require('../enums/api.js'); const apiCmds = apiEnums.cmds; const apiName = apiEnums.apiName; const getMediaSources = require('../desktopCapturer/getSources'); +const crashReporter = require('../crashReporter'); // hold ref so doesn't get GC'ed const local = { @@ -32,6 +33,9 @@ const throttledSetBadgeCount = throttle(1000, function(count) { }); }); +// Setup the crash reporter +crashReporter.setupCrashReporter({'window': 'preloadMain'}); + createAPI(); // creates API exposed from electron. @@ -88,6 +92,13 @@ function createAPI() { */ ScreenSnippet: remote.require('./screenSnippet/ScreenSnippet.js'), + /** + * Provides API to crash the renderer process that calls this function + */ + crashRendererProcess: function () { + process.crash(); + }, + /** * Brings window forward and gives focus. * @param {String} windowName Name of window. Note: main window name is 'main' diff --git a/js/windowMgr.js b/js/windowMgr.js index 8406d421..f8584c73 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -6,6 +6,8 @@ const BrowserWindow = electron.BrowserWindow; const path = require('path'); const nodeURL = require('url'); const querystring = require('querystring'); +const {dialog} = require('electron'); +const {shell} = require('electron'); const { getTemplate, getMinimizeOnClose } = require('./menus/menuTemplate.js'); const loadErrors = require('./dialogs/showLoadError.js'); @@ -20,6 +22,8 @@ const activityDetection = require('./activityDetection/activityDetection.js'); const throttle = require('./utils/throttle.js'); const { getConfigField, updateConfigField } = require('./config.js'); +const crashReporter = require('./crashReporter'); + //context menu const contextMenu = require('./menus/contextMenu.js'); @@ -68,6 +72,18 @@ function doCreateMainWindow(initialUrl, initialBounds) { let url = initialUrl; let key = getGuid(); + /** + * Get crash info from global config and setup crash reporter. + */ + getConfigField('sendCrashReports').then( + function (data) { + crashReporter.setupCrashReporter({'window': 'main'}, data); + } + ).catch(function (err) { + let title = 'Error loading configuration'; + electron.dialog.showErrorBox(title, title + ': ' + err); + }); + let newWinOpts = { title: 'Symphony', show: true, @@ -146,6 +162,24 @@ function doCreateMainWindow(initialUrl, initialBounds) { loadErrors.showLoadFailure(mainWindow, validatedURL, errorDesc, errorCode, retry); }); + // In case a renderer process crashes, provide an + // option for the user to either reload or close the window + mainWindow.webContents.on('crashed', function () { + const options = { + type: 'error', + title: 'Renderer Process Crashed', + message: 'Uh oh! Looks like we have had a crash. Please reload or close this window.', + buttons: ['Reload', 'Close'] + }; + + dialog.showMessageBox(options, function (index) { + if (index === 0) { + mainWindow.reload(); + } + else mainWindow.close(); + }); + }); + addWindowKey(key, mainWindow); mainWindow.loadURL(url); From abdd8da1fa5158d34f56ffe1de6cb1df73b69459 Mon Sep 17 00:00:00 2001 From: Vikas Shashidhar Date: Mon, 5 Jun 2017 16:09:31 +0530 Subject: [PATCH 02/26] 1. Crash Details such as Company Name and Crashpad URL are now being fetched from the global config file. --- config/Symphony.config | 6 +++++- js/crashReporter/index.js | 25 ++++++++++++++++--------- js/main.js | 2 +- js/preload/preloadMain.js | 7 ++++++- js/windowMgr.js | 2 +- 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/config/Symphony.config b/config/Symphony.config index c6864d5e..d4f25ee0 100644 --- a/config/Symphony.config +++ b/config/Symphony.config @@ -1,6 +1,10 @@ { "url": "https://foundation-dev.symphony.com", - "sendCrashReports": true, + "crashReporterDetails": { + "backendURL": "http://crash.symphony.com/", + "sendCrashReports": true, + "autoSubmit": true + }, "minimizeOnClose" : true, "launchOnStartup" : true } \ No newline at end of file diff --git a/js/crashReporter/index.js b/js/crashReporter/index.js index 50cef570..32cc3bb2 100755 --- a/js/crashReporter/index.js +++ b/js/crashReporter/index.js @@ -1,24 +1,31 @@ 'use strict'; +const electron = require('electron'); const {crashReporter} = require('electron'); +const {app} = process.type === 'browser' ? electron : electron.remote; /** * Setup the crash reporter with appropriate information - * @param sendCrashReports: An object to get crash information + * @param crashReporterDetails: An object to get crash information * from the global config file * @param detailObj: An object to send extra parameters * via the crash reporter */ -function setupCrashReporter(detailObj, sendCrashReports) { - // Will eventually have to fetch all these from the config file. - let crashReportInfo = { - companyName: "Symphony Communication Services, LLC", - submitURL: "http://crash.symphony.com", - autoSubmit: true, - uploadToServer: sendCrashReports, - extra: detailObj +function setupCrashReporter(detailObj, crashReporterDetails) { + + // Fetch details from config file + if (!crashReporterDetails){ + return } + let crashReportInfo = { + companyName: app.getName(), + submitURL: crashReporterDetails.backendURL, + autoSubmit: crashReporterDetails.autoSubmit, + uploadToServer: crashReporterDetails.sendCrashReports, + extra: detailObj + }; + // App store builds cannot use crash reporter, so, return if that's the case if (process.platform === 'darwin' && process.mas) { return diff --git a/js/main.js b/js/main.js index 79c14d1f..107ee0da 100644 --- a/js/main.js +++ b/js/main.js @@ -167,7 +167,7 @@ function createWin(urlFromConfig) { * Get crash info from global config and setup crash reporter for Main Process. */ function initializeCrashReporter () { - getConfigField('sendCrashReports').then( + getConfigField('crashReporterDetails').then( function (data) { crashReporter.setupCrashReporter({'window': 'main'}, data); } diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index 4994805a..e3565bef 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -34,7 +34,12 @@ const throttledSetBadgeCount = throttle(1000, function(count) { }); // Setup the crash reporter -crashReporter.setupCrashReporter({'window': 'preloadMain'}); +var demoData = { + "backendURL": "http://localhost:1127/post", + "sendCrashReports": true, + "autoSubmit": true +}; +crashReporter.setupCrashReporter({'window': 'preloadMain'}, demoData); createAPI(); diff --git a/js/windowMgr.js b/js/windowMgr.js index f8584c73..6ac43e33 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -75,7 +75,7 @@ function doCreateMainWindow(initialUrl, initialBounds) { /** * Get crash info from global config and setup crash reporter. */ - getConfigField('sendCrashReports').then( + getConfigField('crashReporterDetails').then( function (data) { crashReporter.setupCrashReporter({'window': 'main'}, data); } From cc1c50945e33e772ad6c78afad1574fb91d5c306 Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Fri, 14 Jul 2017 09:43:03 +0530 Subject: [PATCH 03/26] changed the default url for the crash server --- config/Symphony.config | 2 +- js/preload/preloadMain.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/Symphony.config b/config/Symphony.config index 4e40aa90..0f459520 100644 --- a/config/Symphony.config +++ b/config/Symphony.config @@ -9,7 +9,7 @@ "display": "" }, "crashReporterDetails": { - "backendURL": "http://crash.symphony.com/", + "backendURL": "https://crash.symphony.com/", "sendCrashReports": true, "autoSubmit": true } diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index 3c31a1a6..6a5519a9 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -39,7 +39,7 @@ const throttledSetBadgeCount = throttle(1000, function(count) { // Setup the crash reporter var demoData = { - "backendURL": "http://localhost:1127/post", + "backendURL": "https://crash.symphony.com/", "sendCrashReports": true, "autoSubmit": true }; From 9de7e3f7e8edf7ddce2eeb15fd097ea47357f27c Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Fri, 4 Aug 2017 13:21:15 +0530 Subject: [PATCH 04/26] Electron-158 - Removed spellchecker dependencies from aip --- installer/win/Symphony-x64.aip | 37 ++++------------------------------ 1 file changed, 4 insertions(+), 33 deletions(-) diff --git a/installer/win/Symphony-x64.aip b/installer/win/Symphony-x64.aip index 68263679..ea740ada 100644 --- a/installer/win/Symphony-x64.aip +++ b/installer/win/Symphony-x64.aip @@ -43,27 +43,16 @@ - - - - - - - - - - - @@ -71,7 +60,6 @@ - @@ -114,34 +102,28 @@ - - - + - + - - - - @@ -188,10 +170,7 @@ - - - @@ -204,7 +183,6 @@ - @@ -219,10 +197,6 @@ - - - - @@ -239,8 +213,6 @@ - - @@ -256,12 +228,10 @@ - - - + @@ -464,6 +434,7 @@ + From be55c4df8442647d4a0b9173f5c309df8c750eab Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Wed, 13 Sep 2017 16:31:09 +0530 Subject: [PATCH 05/26] electron-17: disabled uploading crash reports to server --- js/crashReporter/index.js | 2 +- js/preload/preloadMain.js | 2 +- js/windowMgr.js | 9 ++------- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/js/crashReporter/index.js b/js/crashReporter/index.js index 32cc3bb2..b4783dfe 100755 --- a/js/crashReporter/index.js +++ b/js/crashReporter/index.js @@ -22,7 +22,7 @@ function setupCrashReporter(detailObj, crashReporterDetails) { companyName: app.getName(), submitURL: crashReporterDetails.backendURL, autoSubmit: crashReporterDetails.autoSubmit, - uploadToServer: crashReporterDetails.sendCrashReports, + uploadToServer: false, extra: detailObj }; diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index fbaa4ed5..a3e61099 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -55,7 +55,7 @@ const throttledSetBadgeCount = throttle(1000, function(count) { }); // Setup the crash reporter -var demoData = { +let demoData = { "backendURL": "https://crash.symphony.com/", "sendCrashReports": true, "autoSubmit": true diff --git a/js/windowMgr.js b/js/windowMgr.js index 7c41eee1..94a75116 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -16,16 +16,11 @@ const log = require('./log.js'); const logLevels = require('./enums/logLevels.js'); const notify = require('./notify/electron-notify.js'); const eventEmitter = require('./eventEmitter'); - const throttle = require('./utils/throttle.js'); const { getConfigField, updateConfigField } = require('./config.js'); const { isMac, isNodeEnv } = require('./utils/misc'); - const crashReporter = require('./crashReporter'); -//context menu -const contextMenu = require('./menus/contextMenu.js'); - // show dialog when certificate errors occur require('./dialogs/showCertError.js'); @@ -203,11 +198,11 @@ function doCreateMainWindow(initialUrl, initialBounds) { const options = { type: 'error', title: 'Renderer Process Crashed', - message: 'Uh oh! Looks like we have had a crash. Please reload or close this window.', + message: 'Oops! Looks like we have had a crash. Please reload or close this window.', buttons: ['Reload', 'Close'] }; - dialog.showMessageBox(options, function (index) { + electron.dialog.showMessageBox(options, function (index) { if (index === 0) { mainWindow.reload(); } From 9f7bc10287590911fe14e97f18b2b0a3dcf769dd Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Thu, 14 Sep 2017 21:08:42 +0530 Subject: [PATCH 06/26] electron-17: added support to get crash directory info for users amongst other minor changes --- config/Symphony.config | 6 +++--- js/crashReporter/index.js | 44 ++++++++++++++++++++++----------------- js/main.js | 5 +++-- js/menus/menuTemplate.js | 29 ++++++++++++++++++++++---- js/preload/preloadMain.js | 9 +------- js/windowMgr.js | 13 +----------- 6 files changed, 58 insertions(+), 48 deletions(-) diff --git a/config/Symphony.config b/config/Symphony.config index c3f4e882..b3fb9d64 100644 --- a/config/Symphony.config +++ b/config/Symphony.config @@ -8,8 +8,8 @@ "display": "" }, "crashReporterDetails": { - "backendURL": "https://crash.symphony.com/", - "sendCrashReports": true, - "autoSubmit": true + "submitURL": "https://crash.symphony.com/", + "uploadToServer": false, + "companyName": "Symphony" } } \ No newline at end of file diff --git a/js/crashReporter/index.js b/js/crashReporter/index.js index b4783dfe..786504a0 100755 --- a/js/crashReporter/index.js +++ b/js/crashReporter/index.js @@ -1,32 +1,19 @@ 'use strict'; -const electron = require('electron'); const {crashReporter} = require('electron'); -const {app} = process.type === 'browser' ? electron : electron.remote; + +let crashReporterDetails; +let crashDirectoryPath; /** * Setup the crash reporter with appropriate information - * @param crashReporterDetails: An object to get crash information * from the global config file * @param detailObj: An object to send extra parameters * via the crash reporter */ -function setupCrashReporter(detailObj, crashReporterDetails) { +function setupCrashReporter(detailObj) { - // Fetch details from config file - if (!crashReporterDetails){ - return - } - - let crashReportInfo = { - companyName: app.getName(), - submitURL: crashReporterDetails.backendURL, - autoSubmit: crashReporterDetails.autoSubmit, - uploadToServer: false, - extra: detailObj - }; - - // App store builds cannot use crash reporter, so, return if that's the case + // App store builds cannot use crash reporter, so, exit if that's the case if (process.platform === 'darwin' && process.mas) { return } @@ -35,7 +22,26 @@ function setupCrashReporter(detailObj, crashReporterDetails) { return; } + // If the crash reporter info is empty, exit + if (!crashReporterDetails){ + return + } + + let crashReportInfo = crashReporterDetails; + crashReportInfo.extra = detailObj; crashReporter.start(crashReportInfo); + + crashDirectoryPath = crashReporter.getCrashesDirectory(); } -exports.setupCrashReporter = setupCrashReporter; \ No newline at end of file +function setCrashReporterDetails(crashReporterInfo) { + crashReporterDetails = crashReporterInfo; +} + +function getCrashDirectoryPath() { + return crashDirectoryPath; +} + +exports.setupCrashReporter = setupCrashReporter; +exports.setCrashReporterDetails = setCrashReporterDetails; +exports.getCrashDirectoryPath = getCrashDirectoryPath; \ No newline at end of file diff --git a/js/main.js b/js/main.js index c55431a3..2136fe03 100644 --- a/js/main.js +++ b/js/main.js @@ -220,12 +220,13 @@ function createWin(urlFromConfig) { function initializeCrashReporter () { getConfigField('crashReporterDetails').then( function (data) { - crashReporter.setupCrashReporter({'window': 'main'}, data); + crashReporter.setCrashReporterDetails(data); + crashReporter.setupCrashReporter({'window': 'main'}); } ).catch(function (err) { let title = 'Error loading configuration'; electron.dialog.showErrorBox(title, title + ': ' + err); - }) + }); } /** diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index 4b3d3eef..f5f6ce27 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -7,6 +7,7 @@ const isMac = require('../utils/misc.js').isMac; const log = require('../log.js'); const logLevels = require('../enums/logLevels.js'); const eventEmitter = require('../eventEmitter'); +const crashReporter = require('../crashReporter'); let minimizeOnClose = false; let launchOnStartup = false; @@ -97,10 +98,30 @@ const template = [{ }, { role: 'help', - submenu: [{ - label: 'Learn More', - click() { electron.shell.openExternal('https://www.symphony.com'); } - }] + submenu: [ + { + label: 'Learn More', + click() { electron.shell.openExternal('https://www.symphony.com'); } + }, + { + label: 'Crash Directory Info', + click() { + electron.dialog.showMessageBox(null, { + type: 'info', + buttons: ['Copy', 'OK'], + defaultId: 0, + cancelId: 1, + noLink: true, + title: 'Crash Directory Path', + message: crashReporter.getCrashDirectoryPath() + }, response); + function response(buttonId) { + if (buttonId === 0) { + electron.clipboard.writeText(crashReporter.getCrashDirectoryPath()); + } + } + } + }] } ]; diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index a3e61099..23b4ce73 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -54,14 +54,7 @@ const throttledSetBadgeCount = throttle(1000, function(count) { }); }); -// Setup the crash reporter -let demoData = { - "backendURL": "https://crash.symphony.com/", - "sendCrashReports": true, - "autoSubmit": true -}; -crashReporter.setupCrashReporter({'window': 'preloadMain'}, demoData); - +crashReporter.setupCrashReporter({'window': 'preloadMain'}); createAPI(); // creates API exposed from electron. diff --git a/js/windowMgr.js b/js/windowMgr.js index 94a75116..f7790a99 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -93,18 +93,7 @@ function doCreateMainWindow(initialUrl, initialBounds) { let url = initialUrl; let key = getGuid(); - /** - * Get crash info from global config and setup crash reporter. - */ - getConfigField('crashReporterDetails').then( - function (data) { - crashReporter.setupCrashReporter({'window': 'main'}, data); - } - ).catch(function (err) { - let title = 'Error loading configuration'; - electron.dialog.showErrorBox(title, title + ': ' + err); - }); - + crashReporter.setupCrashReporter({'window': 'windowMgr'}); log.send(logLevels.INFO, 'creating main window url: ' + url); let newWinOpts = { From a1c2de3621f3ccb415d6ed59da73e6f5cf3474c3 Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Fri, 15 Sep 2017 12:16:20 +0530 Subject: [PATCH 07/26] electron-17: supported opening crashes directory from the menu --- js/menus/menuTemplate.js | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index f5f6ce27..b8be4691 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -66,6 +66,10 @@ const template = [{ } } }, + { + label: 'Open Crashes Directory', + click() { electron.shell.showItemInFolder(crashReporter.getCrashDirectoryPath()); } + }, { type: 'separator' }, @@ -102,25 +106,6 @@ const template = [{ { label: 'Learn More', click() { electron.shell.openExternal('https://www.symphony.com'); } - }, - { - label: 'Crash Directory Info', - click() { - electron.dialog.showMessageBox(null, { - type: 'info', - buttons: ['Copy', 'OK'], - defaultId: 0, - cancelId: 1, - noLink: true, - title: 'Crash Directory Path', - message: crashReporter.getCrashDirectoryPath() - }, response); - function response(buttonId) { - if (buttonId === 0) { - electron.clipboard.writeText(crashReporter.getCrashDirectoryPath()); - } - } - } }] } ]; From 511d616e7496b5caf0a4684253a9affe24307b88 Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Mon, 18 Sep 2017 21:17:45 +0530 Subject: [PATCH 08/26] electron-17: changed logic to use the electron crash reporter directly in all the processes --- js/main.js | 24 ++++-------------------- js/preload/preloadMain.js | 5 ++--- js/windowMgr.js | 6 +++--- 3 files changed, 9 insertions(+), 26 deletions(-) diff --git a/js/main.js b/js/main.js index 2136fe03..8bd41664 100644 --- a/js/main.js +++ b/js/main.js @@ -3,6 +3,7 @@ // Third Party Dependencies const electron = require('electron'); const app = electron.app; +const crashReporter = electron.crashReporter; const nodeURL = require('url'); const squirrelStartup = require('electron-squirrel-startup'); const AutoLaunch = require('auto-launch'); @@ -13,7 +14,6 @@ const {getConfigField, updateUserConfigWin, updateUserConfigMac} = require('./co const { isMac, isDevEnv } = require('./utils/misc.js'); const protocolHandler = require('./protocolHandler'); const getCmdLineArg = require('./utils/getCmdLineArg.js'); -const crashReporter = require('./crashReporter'); require('electron-dl')(); @@ -32,6 +32,8 @@ require('./memoryMonitor.js'); const windowMgr = require('./windowMgr.js'); +crashReporter.start({companyName: 'Symphony', uploadToServer: false, submitURL: 'http://localhost:3000/', extra: {'process': 'main'}}); + // only allow a single instance of app. const shouldQuit = app.makeSingleInstance((argv) => { // Someone tried to run a second instance, we should focus our window. @@ -214,21 +216,6 @@ function createWin(urlFromConfig) { windowMgr.createMainWindow(url); } -/** - * Get crash info from global config and setup crash reporter for Main Process. - */ -function initializeCrashReporter () { - getConfigField('crashReporterDetails').then( - function (data) { - crashReporter.setCrashReporterDetails(data); - crashReporter.setupCrashReporter({'window': 'main'}); - } - ).catch(function (err) { - let title = 'Error loading configuration'; - electron.dialog.showErrorBox(title, title + ': ' + err); - }); -} - /** * processes protocol action for windows clients * @param argv {Array} an array of command line arguments @@ -269,7 +256,4 @@ function handleProtocolAction(uri) { // app is already open, so, just trigger the protocol action method protocolHandler.processProtocolAction(uri); } -} - -// Initialize the crash reporter -initializeCrashReporter(); \ No newline at end of file +} \ No newline at end of file diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index 23b4ce73..c01d7675 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -11,14 +11,13 @@ // also to bring pieces of node.js: // https://github.com/electron/electron/issues/2984 // -const { ipcRenderer, remote } = require('electron'); +const { ipcRenderer, remote, crashReporter } = require('electron'); const throttle = require('../utils/throttle.js'); const apiEnums = require('../enums/api.js'); const apiCmds = apiEnums.cmds; const apiName = apiEnums.apiName; const getMediaSources = require('../desktopCapturer/getSources'); -const crashReporter = require('../crashReporter'); require('../downloadManager'); @@ -54,7 +53,7 @@ const throttledSetBadgeCount = throttle(1000, function(count) { }); }); -crashReporter.setupCrashReporter({'window': 'preloadMain'}); +crashReporter.start({companyName: 'Symphony', uploadToServer: false, submitURL: 'http://localhost:3000/', extra: {'process': 'preload script / renderer'}}); createAPI(); // creates API exposed from electron. diff --git a/js/windowMgr.js b/js/windowMgr.js index f7790a99..19b5d80b 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -2,6 +2,7 @@ const electron = require('electron'); const app = electron.app; +const crashReporter = electron.crashReporter; const BrowserWindow = electron.BrowserWindow; const path = require('path'); const nodeURL = require('url'); @@ -19,7 +20,6 @@ const eventEmitter = require('./eventEmitter'); const throttle = require('./utils/throttle.js'); const { getConfigField, updateConfigField } = require('./config.js'); const { isMac, isNodeEnv } = require('./utils/misc'); -const crashReporter = require('./crashReporter'); // show dialog when certificate errors occur require('./dialogs/showCertError.js'); @@ -81,7 +81,7 @@ function createMainWindow(initialUrl) { // failed, use default bounds doCreateMainWindow(initialUrl, null); } - ) + ); } /** @@ -93,7 +93,7 @@ function doCreateMainWindow(initialUrl, initialBounds) { let url = initialUrl; let key = getGuid(); - crashReporter.setupCrashReporter({'window': 'windowMgr'}); + crashReporter.start({companyName: 'Symphony', uploadToServer: false, submitURL: 'http://localhost:3000/', extra: {'process': 'renderer / window manager'}}); log.send(logLevels.INFO, 'creating main window url: ' + url); let newWinOpts = { From 01f1532fccad33841c4f377ca76e37a40a8095fd Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Mon, 18 Sep 2017 22:05:30 +0530 Subject: [PATCH 09/26] electron-17: fixed crashes directory menu templates issue --- js/menus/menuTemplate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index b8be4691..7b7942eb 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -68,7 +68,7 @@ const template = [{ }, { label: 'Open Crashes Directory', - click() { electron.shell.showItemInFolder(crashReporter.getCrashDirectoryPath()); } + click() { electron.shell.showItemInFolder(electron.crashReporter.getCrashesDirectory()); } }, { type: 'separator' From d4b30ba148800aeda50d7ecca405214175ffbb2f Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Mon, 18 Sep 2017 22:06:41 +0530 Subject: [PATCH 10/26] electron-17: removed unnecessary import --- js/menus/menuTemplate.js | 1 - 1 file changed, 1 deletion(-) diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index 7b7942eb..4773033d 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -7,7 +7,6 @@ const isMac = require('../utils/misc.js').isMac; const log = require('../log.js'); const logLevels = require('../enums/logLevels.js'); const eventEmitter = require('../eventEmitter'); -const crashReporter = require('../crashReporter'); let minimizeOnClose = false; let launchOnStartup = false; From 08b58b51bb493e6e9927416a828ef0890c86f213 Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Tue, 19 Sep 2017 11:56:11 +0530 Subject: [PATCH 11/26] electron-17: refactored code related to crash reporter --- js/crashReporter/index.js | 47 --------------------------------------- js/main.js | 2 +- js/preload/preloadMain.js | 2 +- js/windowMgr.js | 2 +- 4 files changed, 3 insertions(+), 50 deletions(-) delete mode 100755 js/crashReporter/index.js diff --git a/js/crashReporter/index.js b/js/crashReporter/index.js deleted file mode 100755 index 786504a0..00000000 --- a/js/crashReporter/index.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -const {crashReporter} = require('electron'); - -let crashReporterDetails; -let crashDirectoryPath; - -/** - * Setup the crash reporter with appropriate information - * from the global config file - * @param detailObj: An object to send extra parameters - * via the crash reporter - */ -function setupCrashReporter(detailObj) { - - // App store builds cannot use crash reporter, so, exit if that's the case - if (process.platform === 'darwin' && process.mas) { - return - } - - if (process.type === 'renderer' && !(process.platform === 'darwin')) { - return; - } - - // If the crash reporter info is empty, exit - if (!crashReporterDetails){ - return - } - - let crashReportInfo = crashReporterDetails; - crashReportInfo.extra = detailObj; - crashReporter.start(crashReportInfo); - - crashDirectoryPath = crashReporter.getCrashesDirectory(); -} - -function setCrashReporterDetails(crashReporterInfo) { - crashReporterDetails = crashReporterInfo; -} - -function getCrashDirectoryPath() { - return crashDirectoryPath; -} - -exports.setupCrashReporter = setupCrashReporter; -exports.setCrashReporterDetails = setCrashReporterDetails; -exports.getCrashDirectoryPath = getCrashDirectoryPath; \ No newline at end of file diff --git a/js/main.js b/js/main.js index 8bd41664..3812d038 100644 --- a/js/main.js +++ b/js/main.js @@ -32,7 +32,7 @@ require('./memoryMonitor.js'); const windowMgr = require('./windowMgr.js'); -crashReporter.start({companyName: 'Symphony', uploadToServer: false, submitURL: 'http://localhost:3000/', extra: {'process': 'main'}}); +crashReporter.start({companyName: 'Symphony', uploadToServer: false, extra: {'process': 'main'}}); // only allow a single instance of app. const shouldQuit = app.makeSingleInstance((argv) => { diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index c01d7675..24777aa8 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -53,7 +53,7 @@ const throttledSetBadgeCount = throttle(1000, function(count) { }); }); -crashReporter.start({companyName: 'Symphony', uploadToServer: false, submitURL: 'http://localhost:3000/', extra: {'process': 'preload script / renderer'}}); +crashReporter.start({companyName: 'Symphony', uploadToServer: false, extra: {'process': 'preload script / renderer'}}); createAPI(); // creates API exposed from electron. diff --git a/js/windowMgr.js b/js/windowMgr.js index 19b5d80b..55e46f10 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -93,7 +93,7 @@ function doCreateMainWindow(initialUrl, initialBounds) { let url = initialUrl; let key = getGuid(); - crashReporter.start({companyName: 'Symphony', uploadToServer: false, submitURL: 'http://localhost:3000/', extra: {'process': 'renderer / window manager'}}); + crashReporter.start({companyName: 'Symphony', uploadToServer: false, extra: {'process': 'renderer / window manager'}}); log.send(logLevels.INFO, 'creating main window url: ' + url); let newWinOpts = { From 605c725a08925e94aaf67d664ee3f41d69fa93d2 Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Tue, 19 Sep 2017 12:04:57 +0530 Subject: [PATCH 12/26] electron-17: removed config that was not needed --- config/Symphony.config | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/config/Symphony.config b/config/Symphony.config index b3fb9d64..a114cf43 100644 --- a/config/Symphony.config +++ b/config/Symphony.config @@ -6,10 +6,5 @@ "notificationSettings": { "position": "upper-right", "display": "" - }, - "crashReporterDetails": { - "submitURL": "https://crash.symphony.com/", - "uploadToServer": false, - "companyName": "Symphony" - } + } } \ No newline at end of file From a647c0d3cde7b8a28c35509e6063835e53d35fff Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Mon, 25 Sep 2017 14:33:12 +0530 Subject: [PATCH 13/26] electron-17: added logic to check dev environment for crashing the renderer process --- js/preload/preloadMain.js | 6 ++++++ js/windowMgr.js | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index 24777aa8..c1394d71 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -112,8 +112,14 @@ function createAPI() { /** * Provides API to crash the renderer process that calls this function + * Is only used for demos. */ crashRendererProcess: function () { + // For practical purposes, we don't allow + // this method to work in non-dev environments + if (!process.env.ELECTRON_DEV) { + return; + } process.crash(); }, diff --git a/js/windowMgr.js b/js/windowMgr.js index e9239a63..4f1e0845 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -195,7 +195,9 @@ function doCreateMainWindow(initialUrl, initialBounds) { if (index === 0) { mainWindow.reload(); } - else mainWindow.close(); + else { + mainWindow.close(); + } }); }); From 40cf6b6d7335c91999e83aa6a546914f2aa318f2 Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Mon, 25 Sep 2017 16:10:03 +0530 Subject: [PATCH 14/26] electron-17: added an event to capture a renderer crash for child windows and initialized the crash reporter there too. --- js/main.js | 2 +- js/preload/preloadMain.js | 2 +- js/windowMgr.js | 22 +++++++++++++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/js/main.js b/js/main.js index 3812d038..3fd8f093 100644 --- a/js/main.js +++ b/js/main.js @@ -32,7 +32,7 @@ require('./memoryMonitor.js'); const windowMgr = require('./windowMgr.js'); -crashReporter.start({companyName: 'Symphony', uploadToServer: false, extra: {'process': 'main'}}); +crashReporter.start({companyName: 'Symphony', submitURL: 'http://localhost:3000', uploadToServer: false, extra: {'process': 'main'}}); // only allow a single instance of app. const shouldQuit = app.makeSingleInstance((argv) => { diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index c1394d71..9b325e32 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -53,7 +53,7 @@ const throttledSetBadgeCount = throttle(1000, function(count) { }); }); -crashReporter.start({companyName: 'Symphony', uploadToServer: false, extra: {'process': 'preload script / renderer'}}); +crashReporter.start({companyName: 'Symphony', submitURL: 'http://localhost:3000', uploadToServer: false, extra: {'process': 'preload script / renderer'}}); createAPI(); // creates API exposed from electron. diff --git a/js/windowMgr.js b/js/windowMgr.js index 4f1e0845..205f7863 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -93,7 +93,7 @@ function doCreateMainWindow(initialUrl, initialBounds) { let url = initialUrl; let key = getGuid(); - crashReporter.start({companyName: 'Symphony', uploadToServer: false, extra: {'process': 'renderer / window manager'}}); + crashReporter.start({companyName: 'Symphony', submitURL: 'http://localhost:3000', uploadToServer: false, extra: {'process': 'renderer / main window'}}); log.send(logLevels.INFO, 'creating main window url: ' + url); let newWinOpts = { @@ -336,6 +336,8 @@ function doCreateMainWindow(initialUrl, initialBounds) { if (browserWin) { log.send(logLevels.INFO, 'loaded pop-out window url: ' + newWinParsedUrl); + crashReporter.start({companyName: 'Symphony', submitURL: 'http://localhost:3000', uploadToServer: false, extra: {'process': 'renderer / pop out window - winKey -> ' + newWinKey}}); + browserWin.winName = frameName; browserWin.setAlwaysOnTop(alwaysOnTop); @@ -345,6 +347,24 @@ function doCreateMainWindow(initialUrl, initialBounds) { browserWin.removeListener('resize', throttledBoundsChange); }); + browserWin.webContents.on('crashed', function () { + const options = { + type: 'error', + title: 'Renderer Process Crashed', + message: 'Oops! Looks like we have had a crash. Please reload or close this window.', + buttons: ['Reload', 'Close'] + }; + + electron.dialog.showMessageBox(options, function (index) { + if (index === 0) { + mainWindow.reload(); + } + else { + mainWindow.close(); + } + }); + }); + addWindowKey(newWinKey, browserWin); // throttle changes so we don't flood client. From ceae0aa7425f7b6318feb462713d7ea3c076508d Mon Sep 17 00:00:00 2001 From: Vikas Shashidhar Date: Tue, 26 Sep 2017 12:54:04 +0530 Subject: [PATCH 15/26] Add tooltip to display full filename in download manager. --- js/downloadManager/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/downloadManager/index.js b/js/downloadManager/index.js index bf7ac47e..b4b63538 100644 --- a/js/downloadManager/index.js +++ b/js/downloadManager/index.js @@ -109,6 +109,7 @@ function createDOM(arg) { let h2FileName = document.createElement('h2'); h2FileName.classList.add('text-cutoff'); h2FileName.innerHTML = arg.fileName; + h2FileName.title = arg.fileName; fileNameDiv.appendChild(h2FileName); let fileProgressTitle = document.createElement('span'); From dfbcf464123819aa754be97b1b13906536e37981 Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Tue, 26 Sep 2017 16:10:53 +0530 Subject: [PATCH 16/26] Electron-142 - Added a new menu item to show application version details --- js/aboutApp/about-app.css | 39 ++++++++++++++++ js/aboutApp/about-app.html | 16 +++++++ js/aboutApp/index.js | 83 ++++++++++++++++++++++++++++++++++ js/aboutApp/renderer.js | 21 +++++++++ js/aboutApp/symphony-logo.png | Bin 0 -> 11066 bytes js/menus/menuTemplate.js | 8 ++++ 6 files changed, 167 insertions(+) create mode 100644 js/aboutApp/about-app.css create mode 100644 js/aboutApp/about-app.html create mode 100644 js/aboutApp/index.js create mode 100644 js/aboutApp/renderer.js create mode 100644 js/aboutApp/symphony-logo.png diff --git a/js/aboutApp/about-app.css b/js/aboutApp/about-app.css new file mode 100644 index 00000000..3e137350 --- /dev/null +++ b/js/aboutApp/about-app.css @@ -0,0 +1,39 @@ +html, body { + margin: 0; + height: 100%; + font-family: sans-serif; +} + +.content { + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + margin: 0 auto; + text-align: center; +} + +.logo { + width: 100px; + height: 100px; +} + +.name { + display: block; + font-size: 1.3em; + padding: 10px; + font-weight: bold; +} + +.version-text { + display: block; + font-size: 1em; + color: #2f2f2f; +} + +.copyright-text { + display: block; + padding: 10px; + font-size: 0.6em; + color: #7f7f7f; +} \ No newline at end of file diff --git a/js/aboutApp/about-app.html b/js/aboutApp/about-app.html new file mode 100644 index 00000000..ca455487 --- /dev/null +++ b/js/aboutApp/about-app.html @@ -0,0 +1,16 @@ + + + + + About + + + +

+ + Symphony + + +
+ + \ No newline at end of file diff --git a/js/aboutApp/index.js b/js/aboutApp/index.js new file mode 100644 index 00000000..5a000adc --- /dev/null +++ b/js/aboutApp/index.js @@ -0,0 +1,83 @@ +'use strict'; + +const electron = require('electron'); +const BrowserWindow = electron.BrowserWindow; +const path = require('path'); +const fs = require('fs'); +const log = require('../log.js'); +const logLevels = require('../enums/logLevels.js'); + +let aboutWindow; + +let windowConfig = { + width: 350, + height: 260, + show: false, + modal: true, + autoHideMenuBar: true, + titleBarStyle: true, + resizable: false, + webPreferences: { + preload: path.join(__dirname, 'renderer.js'), + sandbox: true, + nodeIntegration: false + } +}; + +/** + * method to get the HTML template path + * @returns {string} + */ +function getTemplatePath() { + let templatePath = path.join(__dirname, 'about-app.html'); + try { + fs.statSync(templatePath).isFile(); + } catch (err) { + log.send(logLevels.ERROR, 'about-window: Could not find template ("' + templatePath + '").'); + } + return 'file://' + templatePath; +} + +/** + * Opens the about application window for a specific window + * @param {String} windowName - name of the window upon + * which this window should show + */ +function openAboutWindow(windowName) { + let allWindows = BrowserWindow.getAllWindows(); + allWindows = allWindows.find((window) => { return window.winName === windowName }); + + // if we couldn't find any window matching the window name + // it will render as a new window + if (allWindows) { + windowConfig.parent = allWindows; + } + + aboutWindow = new BrowserWindow(windowConfig); + aboutWindow.setVisibleOnAllWorkspaces(true); + aboutWindow.loadURL(getTemplatePath()); + + aboutWindow.once('ready-to-show', () => { + aboutWindow.show(); + }); + + aboutWindow.on('close', () => { + destroyWindow(); + }); + + aboutWindow.on('closed', () => { + destroyWindow(); + }); +} + +/** + * Destroys a window + */ +function destroyWindow() { + aboutWindow = null; +} + + +module.exports = { + openAboutWindow: openAboutWindow +}; \ No newline at end of file diff --git a/js/aboutApp/renderer.js b/js/aboutApp/renderer.js new file mode 100644 index 00000000..4cfcaf6e --- /dev/null +++ b/js/aboutApp/renderer.js @@ -0,0 +1,21 @@ +'use strict'; +const { remote } = require('electron'); + +renderDom(); + +/** + * Method that renders the data from user config + */ +function renderDom() { + document.addEventListener('DOMContentLoaded', function () { + const applicationName = remote.app.getName() || 'Symphony'; + const version = remote.app.getVersion(); + let appName = document.getElementById('app-name'); + let versionText = document.getElementById('version'); + let copyright = document.getElementById('copyright'); + + appName.innerHTML = applicationName; + versionText.innerHTML = version ? `Version ${version} (${version})` : null; + copyright.innerHTML = `Copyright © ${new Date().getFullYear()} ${applicationName}` + }); +} \ No newline at end of file diff --git a/js/aboutApp/symphony-logo.png b/js/aboutApp/symphony-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..36c0f63a1bc043b42a993c6f8a42f01933591a8d GIT binary patch literal 11066 zcmV-AE5+1_P)PyK^hrcPRCodHeFwZ%)tT=)w{WS_v4K=+B1Rp=E~p`jMw3{hQInYQO-wSA#4(PV zV1kht=jYSOGc(Ccd6rnP#8{(7BNpr}D54-DMHB?3x68fvegA#;fAgJn)^4ZVd+y;Z zew(kZZ?*s3W$m@s$(WrZWh$hZEfvy^&}LN1K-mo}b-R+rFExNl9pCQPlFLauw&WEl zuz+H=qnNRhG^?1PDrT%CbuYS4TX%jj8&Hh8=My7so_s)(PaeB(ixI<)S#mjT=a#%e z2?{8r&Pnnn@kvn4#4bsIlf);iz(Vqd#Vnb=tvf&8h7?lIsJ!{w@@iABp;16^*^=r|2bXVL-SWv37qcLHu{ye-N~p~F)W?-4i7tr`s^;=j zRZh*iK#)Y2#0Qme`NdT-pFD9f^RgGav-7HipDAr!T>iFB%bG`#ak9(Duc}Av{MrUS zYLHzvTNfoq*;o(Thx#y@);}yxLHf8(Ehu=x%xUXj`$x%1Z8?6YopxI7^y$-w4j3?C zWY?};_pYt29Z^$L(_7lq1BdY4K{J_*NBy?0Z)s`SApH8~=4Oxj{AW!~P48{mv}wW0 zl`H2@n>KCHU3cBpBsLoaS`On;R8pJm3pp<7*m1r^x7!0z^a3IRrY+m{kCL^`#b@bm zxZ#GbXPj}yVLf{EI9z}?MvjpJw4qY>`iS}$VrmrNE)tN=mt)@g_3NLVIdkUh?|%2Y zn$c_Uk@jKk2@6^=;B|X%kSQGHsEPmSg*AnLH`#O&&Dh=ggTi zc;v{D-|Ez<(^utQaF4cVU|W?Te=*AioVU-PKmYgR$B$nuz+RP(G-l+N~{97Y){ z%wDjbgII8&kN`>J+kRRmPl}?*g9iM&@4h>7=+L1T*VosdA$pu4DmiU$Y;2slXwjno z95rgxd}%1b0;+lTL6pw+p&UjTE6kp^o`acpfQXDqW7~d|Nl^rOO#@yAW&FT_123to zt2(og_~poydC7y8&dP?3-)ec=JXalsD+OVdu>|9#*>CbI(1yZ`rctcXB_~RIX1U?O3lS^bPt5 zeI*C_jQxkcWWVaZX8+sc5;u-KQApVGOi3DGH=3Qn4q}J#$q}9DJvGbOu*;e?Yc7z% zUfGTV-cgEPiM~RgvHygkFWIl`XZAbC!5*I^V=7^blZuJ(B(b!Qi>D4Wi-C7UL4j%dE|#LuiZQVRI#&*JW>09RU+eO^uaF8>^XBxxDtTA_t=)Fp?J=?NGRw=imXXnxwGMn( zV!kkYs2=FgHxWEh`Lz#uO~Gd!vh1r)E-%vsjQ5JI3dX43&Ck{keTzOuU)%k!WJK3v z1sRFDR>}Q;5+8TYJhfRMk{B*opXzz~=j8yGhn)LGnW`8lmzCM}rKT#ErU%g1=yMs1 zu=`4m7spSJscXz_U21qCK-!cfkMvQ6XcS^fk`mNG(!^VfFrpf(@K@~Z2Q zJ@?%6Zt=nA0oBxgJ@DCwAAWeMOr$?ARUn86NLxlNsk3>=cGAAKElVaavXmi0oUgW% z2etV?UcGwt)INRs+#)`>hpDFa?}5#qe){P-ef#!(SgJx0f$~5NZ5}!#`nO8C|Hs+A z90W&h_H0d@pSF_+wfR8jgYgdW!Hsh@l}`_B7f_z*gA%nO07xS!5Cqz{3_`&Bo7mKBvPCAjOst_r_?*xI6%e*@I%p0Q}C2MH%#r| zX)-ogZnBu+Z%q#o5b zFr|6h(iTxMb{In$Q~Qk$#~Wi$9B6E~utS|>$xSeZr7)Y;lLxhV>N2v0$n-8`JsYO-^eOXos z{Y_d#@YxiNCD3f@>InJ-HWx@-I%d!|@RZ4C(I=mLa*s)qCSm5k!>`(Tbiwsz_2y+} z%l7pi5ZNJ7v_?SLty3?vOTz%uyUQMO>}dvc8)kZS-c5B~RD`m#t(rA!)*+K8PhKuH zv%yFimDW6EP*=(VB>|-!T{_sco;;|{d%D98JFM=hr=I$&d~$G@4&G7uhu*!$e7xbk zqEx?AZCA5fkG;*nUB=2W&h%*LUzE6Q5kx+Tn0?eyM;$KVDqe27VxO_ z{R5F;qQaJ`2c^wLq02htzVQmVZ~T!C(2@CPm)v6B{p6XFG@)s&2g@0? zPf5xsW>C4GyhiRPerKAWOA0??+es?aC#v=2eZV3e~!C`M17J9q9l0pkzpTnV&i z11__rNvk(4HLra57c=v%%gmCs|0qo%MU0BE#TZLS=lJ_Y5hE(O z4w?^~eWjMc^YF~_y6J0`_^E2I&ZP$=?kl@@!W?w@CyX)1TGf;|u<@Z>JgjIrhfe}X zX0i*?74Z0*Zn~*=uU@@=&J2}AyUV>@T@B{@OP9v>Ke}|mOAr}jjWL(dIau&@ELCHN zIwvI{!!l5>DR~_bx{Pd#{8O2a>+n-Nx?wx`j6YqoLsLu+(?dgg?_bQ2C69%%#+XY% z-uOET)OzBE)OPpu1f*?@lUWd{ktOi^H#9VSGcIFCw)ZUIWqWl0NiwSW4oCa-D#jdR z@7I8MAWdB{^Z+uu67`yrr$1!x7&dI!<-&Ko9%V}s&{93v)YjCQ(fy7{P=m5`sqx1? zz=Bmv>Y)aYMA|Ct_+Q?0B}+O03!p9|H@D+uZ^q-2h3dForFyU#+WVhO=Q^xi=$Hv( z4-81{15EflWi(9lkew+EkjzYq%r+0%)5%{*#Y})Zd&yUp3XuB@I6A7>4q;OmATDgY zupQKsQt#0)Kx!wQ5qy^X$}6volD)i7(itk1-=*^aSvXPL>DB(-hMIm|hjjQZ0|tNv zX-F169CBn^U4UdjQUtJh$ewQBefPz(GFKertEhyBj-CR_Vy3YJCKoeYd&a8qv4A=d zA09^hO1XHg^W4$^iG}#_P3GBWpB*B98K+aRGtgpQw!75tVus26W2Gcu0ho~XXrS4+ ziEOS7NF4|n?O>EWzt4T{bLWdsaj#*K)op)cF#(Au>tf#mv~v&D`Ita8vasUUi#lCR z4@*?ofTTXlNtAXVysxg26(9Kdjh!m>D$+Y`EaDyA|EP-VJ75CXkcMdt+4w=bwLR#E zFhGW72m(L$*khCM5l|3mCt-?ph8)~$f77+TSH<-jFad1%4GZvMHPi`4_-H`Vi4=AQ zB!vzsBTL!OY-M+@|9i@6Z+xauXsU#%p0Gafv5^QzevH63ZO?kZ{OM1B+Es2~@gqe$ zUBb6AJvtTky1q}>fo9k4BPzD<8Nj8!=95o8`D(v@{r+!k z^a^v3Rq#eWS~IWCf5L3oxWSn1b*81U-ej8UO!K&x61VnGty*;+YgKYD>vVK^A>R+=$yV<2}d5# zlLtit&AMF6?+YF|c<|tdJZlC1C*K~M=bn4c$gg0fYF+dA=VSfxFm(F3t2)f8@Yn{$ zI4oYg_yqag#izxMmuj3D$s;#p9-fRdqy`_9Oa!NvjodpPNkt`5`3-6#?_!Po4t3)1 zuG6-Eub$&~8Ze@7e5?SFz!ERh#2aO}(w=z!fIN6Hj>eir9^!RH-EI ztv9@4%=~|r;oe@VYUdr-$4Y>mB!O@_)`^*^gG^oKvdb>(D)$Bl(%4=Um(#1SzS_to zp=eb&=%9m4O^w|hMGG&VKkRPy=rN{v0deJ9{%d32`MNP{pEc&=KNc}|aY6wrz>Gu- zFr;`ELYpVMMgR^xn8~9TTyOz)p=kFz^84?<-@CM4dF7Sn)?05i^5J?`J@XM{3uCkY z{#=QlPlV_^MLj!i`&fW@o-rTZAZNy=)`CC!jWOG>!%11CdLJ`(rHHRAFv5v|%rRII zJiFWz9BS#?TwJ+wrFrI=)*U38o0|O>oR`)cq88$7aYe9(5beI8PS(J zB-_@M@|wqunfoPU*2|?@rzZKMT>NvbDGOd+6eo%?T?rQva8~ z{Kd%rGFd*DAN=iae`~J2_F99djw{%!=FM+qCrBc%L@( z5X_A9i_5{2szzYbfP|d}(jd>_haX-iH~m8bMLRIEiX?VQrm?Zn1LTi?{9^-v=9A?6 z5QC!_X;0bV4BPSLomSl?m*`WC*)%^{h%JkZSvNbGZyR_4Gr*3cC}ND%bFl#lWtIcw zYp%Iwi16+9K!YY3C>#yhaH2u;`FPY0P zzuY|j_~Wr>SKV;jM;>v+5#A+N>(lVN$i9z*dX7tzrPX)C8**0svN4}Nnm#XbteI6- zPuxCs0xU%|Dsp0+0lfTjwrE#CKL33DtGTd-Vp{07+io+{r%yNUzyE%iTaI4V^%?na zDMz1FF~<9VE2|r0vdX0VN57RRov#_Q^}`t72(#>>W>(IOaA;eT13RIe!b^6jgH+wK z$Bm1V7^#gSr>0_Fcl>2w?jqBBV>sg<{uL!Tw>pnxy5zK*Hp&FZT!rbjfMXa$Ci`8 zAp|=)7(*xxNIH<}qGa|W({6ixELePwgjUGMP3>q{j%$%j)y~il;7ZKAQ8#FmT{NgUfeV8Y3V7 z;}^Yh(#AQh4=$@8$}yExVK2fcX<_c*4(vEOs5NgCAhV)7f@axECEzQ+_DHx@m^pK% z`Pt8YX6%P5tewPzj-BvRa-&=ukAD1nW9FSLbBoLDETxxmuiDNj4R#U(vc1~0aid&z z+A%F%y40Jyyz#~x4eKJmK;TUUVM<7+VZA4qhB|fszI~Of=04vTEO=aW(*6yC^fv#QDS{xU=546JXAMt3{j|aB%hOLk-N?`8d6VS_9B@F^`}M5d zDAqnB_llPq)3`eCnr>^%m}RT#%#u&!Sm__a59+_&{N$|Mdt7HhTbDc4ZK(uy9OVIH z@@gtOg#j|#OQf9{knD{0>(`q<{NWGY0%7^Y(|fJBY}qnz9&S)<@ zGM#fHI*nN)>DrAo0=Rk~c(rEfC-r8r0C2@;wYeiEkvexu7S}7ZX}We>e$1~&}O+b&b`oV*}Ta+!+DojxxC_Rw`66l`EYf;*_Pj$;hg5D17ymj zYdNJAt^jtDMoA3FG^gF9g(vaDrwK{Yx_|j^xmq?QaV@G(UC-UjW4#YGw?FnbGi%lX z-fAN0tD=@+2ivr*-k1p`o>aFBEkI6#oy34lgYp9Eo_E$vmj(f38%#F)HLTsUuj%~d zgU!;BL(NssZ8cNn6(p9oz468y246*DKcG@2Owf0vlmH z)1{NFmMJ|TYx?&zolic<)E_+BY?EI4fq-$-_7;PA%e(Ks+gy0zh32^9j`Kd##kW0J zS+sTQ)}nTb>{46Qc%=>&f*t2&B=Oy`Y&BB+B{#+F2>`N$sitQ))8%WEOpmL+X6g@- zH#PF-I%8g=nZJI=YfWrWh3|flMvfe5F249;bJtyWc_2-?Fe6D5WM{D?Ze`<>20LMA z$ehN=ZV~U5b4S$l>0z2akVURVPML0-PB^Hz2#o2CihF`jyvvfu1Lq~^DC~n z!rXrQ?dH7m&NH&1XI^#gXn=HJCktD;6KX{OC~?0ScECR)b8qX;KmUB0WHZQ9ere-Y z)A(}Xe>0i7TGKFjyy<%3R8#l4q4J$&c5@r0D=&CuoB2>csnf_0W(6Yd8D$4qv)_Jl zR&^xY1H$%|uYARf7%{?N!adD9`!mlx)9ktDo{q?6scJm??6ZF?FA#8V!%id3sql_# zP>v~EA*S^ze=C0jw z-$=bp@eR-mFT7w5KKNkU6v&v@#d0pER42X{NLqnn`PJ;&%hdE%3mZ}du0L>u=|25z)8(7TMuPFlmCfen4|4At!-{&~ zfd>q}4^NVC#{2fSzisZk^G@@lAN?qFiQCw*V@*ez_7Tk3m#r*JN#A728jv)Q>VEWe z^0ZXev$1vKhv+)T@^xePGTnc2hFqSHH#NIQf5Z0CmKJmQo7-YzY6pB0f!*2cy@<4r z&EtFUFMQz(-XdXaaxiu3)GPoVee}_Gma>)wGw=8n48@h$1DghJQ0|2b|wMoH2STetwomi<7<8Q<7K-wc}Kx@V+NW`=kWPR zJc)Pv-ifB$Wv7|i(a9eQezjn`dHu7*w?R89{+weQ}h!WevwB^>P%+|lp$tucwyYi)p zrhek6*4AWMqlMY4n!Ts$xcAd1K6yoCAnX(L!yo>zDEkFP7F0$?S%C6_Y!Yz1REba6 zHU$Xv;Q`GTL zw4vPiF8^|z>2%xyIg{FH>iIwKZ8tBj&i}qKtgJ^KdBmG@46|2|ev6M4G$|BMwoRWp z>`YoF-*WH0_imH>$k`Rtan7c6lAh^Yi`(boCM@j5PHdPGs^kQW04vhQ06VI^)KL}4 z8jv(<3P(BzR9=h8)>@UFzBR1QJa}Y-`TTCR1?>^(>LqMQfW6WyIr$g~FypsX zWS^Te;k>gXOpw35uEo46bCR!p+H97~+nY7g<)6uf`7w`AOWh6FC+G)1_yK-hH+9}} z&LA7a-XRM}WJ@;>WUi?m>O2toejZOSvVC;WGId#0KA@jTr=5l3mU7>o8T0iab>>$G zbTW4z+F%}^)L>qnlHVr<+}Ss7jHo3Gk*J^quy5qa_Gdk&Y%NO?@^iL{eKcM`FboCU!_?+fK}#LMUD@} zI(XXdV*<^{!iq0bN4u7x3m#}ZA?8134(J!Z_{Al1A9Qz2zN$Gv4`4q^e6`q-6R-eG zNE-r-`0b$_+dSSwG6N|yLe@I+)VIiL;OoQ(PfgWSU=PfhGsnFAa(QgSoJUid{20UxMB03lM`-sb0jV9p+ZnZ-#mf!s0{MpI0Xsld&aVgXEjPZ$>1YWUkcGwb zrQRN}eCp!SG>sw1K?(z8;9xO2P*9lcIQzdXzp9vL56B8@@6}?ORpxmXRn%-g1_Dg@ z!8KkIm8St|2SWe`BxTSnU)eA5P5BFXjK(T0tOu~g9~NPBl!UPd2K@SFVMFPNA=+Ug zPa6496FB)n8Gw4w;E+9St`@m^FR3~!Ult#6_3j=0jZeO@OOUVGANv3cQihEYyI9(7 zy$Sma78&r$kck1P)3WC)pL@O`i%@Tp<@VoTrYcR}1Nd#llTSXm!+feB>l$vt*!wLd zEehCv6RtaS`bou>Ha=1Q5V?|66QSzXdT0?vrv_{KNPIp>_yVZey7 z#+duK(OA&fpGd1S@XcjbHX+axAH#RU_j&}lu2rjER(;GLIjWCGYo;b-&EA<+*! ze9V|JV{Vsei*w}To{5mFDYpjzJY1RqMENc0T!#*zkp;LfVyvaA78^ZpEj5{rY*|RSz3B%#0c} z%HY%14xF}Qj4{^I1|DdR=EG#@LsJ-F5SV8_4L;2?DE%ON{EC*TB01Ccy!w0n-eudSoa0}w$LD1C-{ zO>Lg{kI>_wTq7HH*2;!U_sgaG5Ib;H?zlZ5m+I%ojT?88d_jq|^SoaqB^b4g#!^pS zQ}96ofHaZ=gVNKkgVK*W+ouH;mXDeKS)Ro5|K%W-Ql(|l0~kw;sSn1`v9~HqKd3cM zEH_VV(PuoDgKg)T5WeI=d1lPvWebsG!{BvfUd2AYljt4E36V4?A+expwW^pU6Gb_wCZFa>wZbd4RcIesGj?j!_^4*z5xh zB?w9F#(R2zCu!1wz$ZRr$F3Q2@9{#?f~tPy)dLtijA5EF_kGzAjUDQo6raH|@eD{= zQ`$5oPd~^m9kwfOk+0AmkylK|%dW9~nW0L{zXxPvg9X=Kd+n)z`qQ8Av%Id85F4Rw zT1Or<7ML24$Y28sIwY;vz$35itvOo%5A^cg$QGGMePo|~_W6?hs%-e4$vStHZ`U4> zPb)r>9eq!d-`-gv714lm@w%=Wc$(Kfnh$&e!1z{M)|qH?QRwVL-%G;g$pXyLlP6Dp zNI+RxA0z9YssLV|sMpAkKAj*7u-}p905JN#(IrF213ds9$)>H^?EmSLb>^cB0Y{ls z>&b)KJatY$!vD3`UYjUCk#UdkT^PJd%c=)9%WvwOBEJXzqST5YO9DtVg8t+|kpj@Q zioyR`dV(pi3ggnzu5AP!Y~auzkUT1?S0&4Xh9* zxNI;|@1m$J^{hGMu#{y3KR*2Wze_-p#mQ?7!4O)S^S_gDpyTrvjdD6Go)bb zB6#|NGBH18O>=B6Kq5nqqmJV9^dV(F$gU&juMD7+4T(<0{fZ-gRn>+)fHA;WSZ79# zW6s!FW6YWo3#8P$sM9A5kgfpK=|JQ`ZJxSFI$^?u7i24u6Y)gH0;;radjNfpF~C^( z;}|(+mJcdRfAXM6(5FgKfQ$;JZBaaIvB#7tQ|8G#(&I7bm8$kt=Yo3xeU84z7$g}h z<-@Y0#-Bbm)p@dP_B>>kQ3O1sL?zm7iagL!uVc7$Ms{0WCzI!Yo;Y#hLGtry19gTf zUz#4k8yHM_%WvRB%`@7UYgUFQ8pt-lY?*mtsS_Mlt|%XEBd;lVeIPVsoSC&g;N^Gx z>YjS)smo+7<-htqLaM3AJbQM_#<=xj<~P*G3p*NX%}e3lP5(CHjtD$G?Y@zvSP>HX5`7v2Mm;Vl zH5e10XHB3-BDHzXnD#%O$&%!Y^VN3ppf>N4q2nJ%)|qqo@Zq&Dz4X$5^y$;*d*V}_ zL{BnOxjx%J{q)oSbI?HtUA=JOLag-GAOirATqg(UwXc@RgCc2QwraBfkF$H;1V?t( za4F7T+sT94yi2B^lghNjSox0QKdWCeh7XR*A`dPv%ASoEAA9Vv{02q?EQ&`sZPzk+ zP^37p#o1e<$o~XJph&>P<n+FdbeA~2X z(+(E?Mv2MGO@UResO;Ek`$qH;`U-s}txMd;4qtQ*^OFZfg1)GUXRWkBljPGrG{s zE2Rc3207o9B(L@%uc^(uWa#Vzbq;iLf4T3WhaUQU`Q4WjMPG`uKFTZC)GS*mKPZ2k z*UNn(w#3sQL!Gtk;%y%-lh@SdA-hs)Fd_&6;0l;Tmn6UTA@8ElX+334Q70{D`9JW$ z1AEKj-+z;j^-mGMN`E5XE<2CiBa3MNOZN4~D_4RIeMFwrr3@Gdz_kLq}~TW`H}@YJbO&y_D7Pm^zWcK7R95d;e%bi)tPCu*8^Q_DDSkJklwFF-aWlLq3YartM*}?Stxi zzVbVQnMWUe^hnvtI^H3u`^Gu|UfEbZgssROn7v@&WO#5wD%v%1ZgG2?_?cir_=c?iPx zE}h{}#z~%0wmiRL#frP-cc&kc6*>6o56J~IttTkx7bi2Xrcpd>uEcU&w!}IPa^egz zj!EL#K9r-VwtohSmkF{J-r;iQJVG{#+Fy+IaA?QWD6jTjmowor zOO`Bo_M(d}din2v|NBH2tETmT>b1`1lla(qLS+tgs6(EHq;a*Mi>J;- zwJwZD^Ohffo2Qcn2(?#Tb=6?m%VvaZw>(0ol!ggN`^ZC5ccIMU+uznx4x`K;X3tBXv}5xME}4?XxBawCo)mQ<532bzHuxgh z`L)h-@c*Nq)}`TH1E_W6NfDd8i@J2oW80|L)aG3>bgsnsE?YsmLOVHW;YrJ}{j^M; z6lIeK)x2$slC{m|U2>QXdONuW&emz!#Z#Ar+CHdHl#cbK59KhL)GsW5te%4y>sSPb zq-DAMw2nL}szyF7b>(GK8H=*^)w(3SYaneMWm3c?pO(7vY8`kc#-I$Luz-pO1Das*F>e9Jv+Rx@)GIU`{#}D%< zioV#LowQPE%C&v9oQ6;1i*{&#w#%iXEsDAZRO{04X?#&9?eCJ));r3-U|YT&TyVh> zAZ^*Uf0V3kF5abMo3t%TM_U?dg9CYOotDXy+WujB+s`FK7nOAED8HiGT%BLk0ulsE zTL;@eN=|Bv^0S*@``UI}jv83orsXgm@srwYU%PHDS;uzSOR7uTxuvX3+Pb*>ZJm}i zk9Ne#E+5@~JHNJpj~ZB)&DKT9Q8w1Y_MtwEru7etQ;=OX;FIW*_@EG%Ur=}mlTV(IP=%@gKjubdqx(TKo&W#<07*qoM6N<$g0u8A A#sB~S literal 0 HcmV?d00001 diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index 4b3d3eef..f9a18317 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -7,6 +7,7 @@ const isMac = require('../utils/misc.js').isMac; const log = require('../log.js'); const logLevels = require('../enums/logLevels.js'); const eventEmitter = require('../eventEmitter'); +const aboutApp = require('../aboutApp'); let minimizeOnClose = false; let launchOnStartup = false; @@ -100,6 +101,13 @@ const template = [{ submenu: [{ label: 'Learn More', click() { electron.shell.openExternal('https://www.symphony.com'); } + }, + { + label: 'App Version', + click(focusedWindow){ + let windowName = focusedWindow ? focusedWindow.name : ''; + aboutApp.openAboutWindow(windowName); + } }] } ]; From c778a1f7b7d93bdd41b6180d042908defa5adee5 Mon Sep 17 00:00:00 2001 From: Vikas Shashidhar Date: Tue, 26 Sep 2017 16:54:57 +0530 Subject: [PATCH 17/26] Change title to reflect new file display name as per Electron-144 --- js/downloadManager/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/downloadManager/index.js b/js/downloadManager/index.js index b4b63538..058e4e83 100644 --- a/js/downloadManager/index.js +++ b/js/downloadManager/index.js @@ -108,8 +108,8 @@ function createDOM(arg) { let h2FileName = document.createElement('h2'); h2FileName.classList.add('text-cutoff'); - h2FileName.innerHTML = arg.fileName; - h2FileName.title = arg.fileName; + h2FileName.innerHTML = arg.fileDisplayName; + h2FileName.title = arg.fileDisplayName; fileNameDiv.appendChild(h2FileName); let fileProgressTitle = document.createElement('span'); From 80a7460f47b80b9f1b4b773da1add1a44633d74e Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Tue, 26 Sep 2017 21:34:25 +0530 Subject: [PATCH 18/26] Updated comment --- js/aboutApp/renderer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/aboutApp/renderer.js b/js/aboutApp/renderer.js index 4cfcaf6e..808c4337 100644 --- a/js/aboutApp/renderer.js +++ b/js/aboutApp/renderer.js @@ -4,7 +4,7 @@ const { remote } = require('electron'); renderDom(); /** - * Method that renders the data from user config + * Method that renders application data */ function renderDom() { document.addEventListener('DOMContentLoaded', function () { @@ -18,4 +18,4 @@ function renderDom() { versionText.innerHTML = version ? `Version ${version} (${version})` : null; copyright.innerHTML = `Copyright © ${new Date().getFullYear()} ${applicationName}` }); -} \ No newline at end of file +} From 6d0d5145af3fbad9c7d1c40c25a7f0f894a0e59a Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Tue, 26 Sep 2017 23:26:11 +0530 Subject: [PATCH 19/26] electron-17: added logic to open the completed directory under the crashes directory --- js/menus/menuTemplate.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index 4773033d..dd0bb460 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -66,8 +66,11 @@ const template = [{ } }, { - label: 'Open Crashes Directory', - click() { electron.shell.showItemInFolder(electron.crashReporter.getCrashesDirectory()); } + label: 'Open Crashes Directory', + click() { + const crashesDirectory = electron.crashReporter.getCrashesDirectory() + '/completed'; + electron.shell.showItemInFolder(crashesDirectory); + } }, { type: 'separator' From c996c5284925b287c2c670ec234b94c7a07c36f8 Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Wed, 27 Sep 2017 11:11:31 +0530 Subject: [PATCH 20/26] Electron-142 - Made changes as per review --- js/aboutApp/about-app.css | 39 ---------------------------------- js/aboutApp/about-app.html | 15 ++++++------- js/aboutApp/symphony-logo.png | Bin 11066 -> 5191 bytes js/menus/menuTemplate.js | 15 +++++++------ 4 files changed, 15 insertions(+), 54 deletions(-) delete mode 100644 js/aboutApp/about-app.css diff --git a/js/aboutApp/about-app.css b/js/aboutApp/about-app.css deleted file mode 100644 index 3e137350..00000000 --- a/js/aboutApp/about-app.css +++ /dev/null @@ -1,39 +0,0 @@ -html, body { - margin: 0; - height: 100%; - font-family: sans-serif; -} - -.content { - left: 50%; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); - margin: 0 auto; - text-align: center; -} - -.logo { - width: 100px; - height: 100px; -} - -.name { - display: block; - font-size: 1.3em; - padding: 10px; - font-weight: bold; -} - -.version-text { - display: block; - font-size: 1em; - color: #2f2f2f; -} - -.copyright-text { - display: block; - padding: 10px; - font-size: 0.6em; - color: #7f7f7f; -} \ No newline at end of file diff --git a/js/aboutApp/about-app.html b/js/aboutApp/about-app.html index ca455487..1ca91a10 100644 --- a/js/aboutApp/about-app.html +++ b/js/aboutApp/about-app.html @@ -1,16 +1,15 @@ - + About - - -
- - Symphony - - + +
+ + Symphony + +
\ No newline at end of file diff --git a/js/aboutApp/symphony-logo.png b/js/aboutApp/symphony-logo.png index 36c0f63a1bc043b42a993c6f8a42f01933591a8d..f1b41d9e74574e616be9a4270cc27803cd750e0e 100644 GIT binary patch literal 5191 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 Bxk&&3 literal 11066 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 A#sB~S diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index f9a18317..5379f880 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -101,13 +101,6 @@ const template = [{ submenu: [{ label: 'Learn More', click() { electron.shell.openExternal('https://www.symphony.com'); } - }, - { - label: 'App Version', - click(focusedWindow){ - let windowName = focusedWindow ? focusedWindow.name : ''; - aboutApp.openAboutWindow(windowName); - } }] } ]; @@ -246,6 +239,14 @@ function getTemplate(app) { app.quit(); } }); + + template[3].submenu.push({ + label: 'About Symphony', + click(focusedWindow) { + let windowName = focusedWindow ? focusedWindow.name : ''; + aboutApp.openAboutWindow(windowName); + } + }); } return template; From 7130883c7471600536ce8761dee1afe6bca5dc45 Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Wed, 27 Sep 2017 11:13:50 +0530 Subject: [PATCH 21/26] Electron-142 - Made changes as per review --- js/aboutApp/about-app.html | 2 +- js/menus/menuTemplate.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/js/aboutApp/about-app.html b/js/aboutApp/about-app.html index 1ca91a10..8cbdbc39 100644 --- a/js/aboutApp/about-app.html +++ b/js/aboutApp/about-app.html @@ -1,5 +1,5 @@ - + About diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index 5379f880..94cfca5a 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -240,6 +240,7 @@ function getTemplate(app) { } }); + // This adds About Symphony under help menu for windows template[3].submenu.push({ label: 'About Symphony', click(focusedWindow) { From 99ea90db025c916dfeda40191ec0c4bcfd7dd1ee Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Wed, 27 Sep 2017 11:21:22 +0530 Subject: [PATCH 22/26] Updated window title --- js/aboutApp/about-app.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/aboutApp/about-app.html b/js/aboutApp/about-app.html index 8cbdbc39..75cb6b51 100644 --- a/js/aboutApp/about-app.html +++ b/js/aboutApp/about-app.html @@ -2,7 +2,7 @@ - About + About Symphony
@@ -12,4 +12,4 @@
- \ No newline at end of file + From 7985b68dfd5b00e3683729edd2a10a1fa7621f1c Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Wed, 27 Sep 2017 19:46:02 +0530 Subject: [PATCH 23/26] electron-158: added logic to disable spellchecker --- js/preload/preloadMain.js | 31 +++++++++++++++++++------------ package.json | 3 +-- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index 9b325e32..3f248d1b 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -26,20 +26,27 @@ require('../downloadManager'); // so loading the spellchecker in try catch so that we don't // block other method from loading document.addEventListener('DOMContentLoaded', () => { - try { - /* eslint-disable global-require */ - const SpellCheckerHelper = require('../spellChecker').SpellCheckHelper; - /* eslint-enable global-require */ - // Method to initialize spell checker - const spellChecker = new SpellCheckerHelper(); - spellChecker.initializeSpellChecker(); - } catch (err) { - /* eslint-disable no-console */ - console.error('unable to load the spell checker module, hence, skipping the spell check feature ' + err); - /* eslint-enable no-console */ - } + //loadSpellChecker(); }); +/** + * Loads up the spell checker module + */ +// function loadSpellChecker() { +// try { +// /* eslint-disable global-require */ +// const SpellCheckerHelper = require('../spellChecker').SpellCheckHelper; +// /* eslint-enable global-require */ +// // Method to initialize spell checker +// const spellChecker = new SpellCheckerHelper(); +// spellChecker.initializeSpellChecker(); +// } catch (err) { +// /* eslint-disable no-console */ +// console.error('unable to load the spell checker module, hence, skipping the spell check feature ' + err); +// /* eslint-enable no-console */ +// } +// } + // hold ref so doesn't get GC'ed const local = { ipcRenderer: ipcRenderer diff --git a/package.json b/package.json index c7d89f7e..23209abb 100644 --- a/package.json +++ b/package.json @@ -98,8 +98,7 @@ "async.mapseries": "^0.5.2", "auto-launch": "^5.0.1", "electron-dl": "^1.9.0", - "electron-log": "^2.2.7", - "electron-spellchecker": "^1.2.0", + "electron-log": "^2.2.7", "electron-squirrel-startup": "^1.0.0", "filesize": "^3.5.10", "keymirror": "0.1.1", From ad5d762c20300be329bae405fd68257bd2dd08f3 Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Wed, 27 Sep 2017 21:18:13 +0530 Subject: [PATCH 24/26] Electron-142 - Moved inline styles to style tag --- js/aboutApp/about-app.html | 49 +++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/js/aboutApp/about-app.html b/js/aboutApp/about-app.html index 75cb6b51..1ed09910 100644 --- a/js/aboutApp/about-app.html +++ b/js/aboutApp/about-app.html @@ -3,13 +3,50 @@ About Symphony + - -
- - Symphony - - + +
+ + Symphony + +
From 77b62c643039baec91c3df2e2861db4b138bc9bb Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Thu, 28 Sep 2017 10:55:19 +0530 Subject: [PATCH 25/26] Electron-142 - Changed the symphony logo --- js/aboutApp/symphony-logo.png | Bin 5191 -> 5209 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/js/aboutApp/symphony-logo.png b/js/aboutApp/symphony-logo.png index f1b41d9e74574e616be9a4270cc27803cd750e0e..749cf2fc0157b59867768d3a17855b897a733624 100644 GIT binary patch delta 5183 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 delta 5165 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 b{{ Date: Thu, 28 Sep 2017 18:42:47 +0530 Subject: [PATCH 26/26] electron-145: fixes the issue with invalid json config upon repair --- installer/win/Symphony-x64.aip | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/installer/win/Symphony-x64.aip b/installer/win/Symphony-x64.aip index 324f3b21..68263679 100644 --- a/installer/win/Symphony-x64.aip +++ b/installer/win/Symphony-x64.aip @@ -272,6 +272,9 @@ + + + @@ -298,6 +301,10 @@ + + + + @@ -305,6 +312,7 @@ + @@ -451,11 +459,18 @@ + + + + + + + @@ -488,7 +503,7 @@ - + @@ -500,6 +515,9 @@ + + + @@ -562,4 +580,4 @@ - \ No newline at end of file +