From 911c3bcf6e6fe60148ec0d1ff161dd1561bfe37b Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Mon, 22 May 2017 19:21:52 +0100
Subject: [PATCH 1/4] tidy electron files, they were starting to annoy me

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
 electron_app/src/electron-main.js |  85 +++++++--------
 electron_app/src/squirrelhooks.js |  20 ++--
 electron_app/src/tray.js          |  10 +-
 electron_app/src/vectormenu.js    | 168 ++++++++++--------------------
 4 files changed, 107 insertions(+), 176 deletions(-)

diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js
index ab844bd3..b58e2553 100644
--- a/electron_app/src/electron-main.js
+++ b/electron_app/src/electron-main.js
@@ -20,15 +20,14 @@ limitations under the License.
 // Squirrel on windows starts the app with various flags
 // as hooks to tell us when we've been installed/uninstalled
 // etc.
-const check_squirrel_hooks = require('./squirrelhooks');
-if (check_squirrel_hooks()) return;
+const checkSquirrelHooks = require('./squirrelhooks');
+if (checkSquirrelHooks()) return;
 
 const electron = require('electron');
 const url = require('url');
 
 const tray = require('./tray');
-
-const VectorMenu = require('./vectormenu');
+const vectorMenu = require('./vectormenu');
 
 const windowStateKeeper = require('electron-window-state');
 
@@ -59,13 +58,13 @@ function safeOpenURL(target) {
     // so put fairly stringent limits on what can be opened
     // (for instance, open /bin/sh does indeed open a terminal
     // with a shell, albeit with no arguments)
-    const parsed_url = url.parse(target);
-    if (PERMITTED_URL_SCHEMES.indexOf(parsed_url.protocol) > -1) {
+    const parsedUrl = url.parse(target);
+    if (PERMITTED_URL_SCHEMES.indexOf(parsedUrl.protocol) > -1) {
         // explicitly use the URL re-assembled by the url library,
         // so we know the url parser has understood all the parts
         // of the input string
-        const new_target = url.format(parsed_url);
-        electron.shell.openExternal(new_target);
+        const newTarget = url.format(parsedUrl);
+        electron.shell.openExternal(newTarget);
     }
 }
 
@@ -79,20 +78,19 @@ function onWindowOrNavigate(ev, target) {
 }
 
 function onLinkContextMenu(ev, params) {
-    const popup_menu = new electron.Menu();
-    popup_menu.append(new electron.MenuItem({
+    const popupMenu = new electron.Menu();
+
+    popupMenu.append(new electron.MenuItem({
         label: params.linkURL,
-        click() {
-            safeOpenURL(params.linkURL);
-        },
+        click() { safeOpenURL(params.linkURL); },
     }));
-    popup_menu.append(new electron.MenuItem({
+
+    popupMenu.append(new electron.MenuItem({
         label: 'Copy Link Address',
-        click() {
-            electron.clipboard.writeText(params.linkURL);
-        },
+        click() { electron.clipboard.writeText(params.linkURL); },
     }));
-    popup_menu.popup();
+
+    popupMenu.popup();
     ev.preventDefault();
 }
 
@@ -107,13 +105,13 @@ function pollForUpdates() {
     try {
         electron.autoUpdater.checkForUpdates();
     } catch (e) {
-        console.log("Couldn't check for update", e);
+        console.log('Couldn\'t check for update', e);
     }
 }
 
-function startAutoUpdate(update_base_url) {
-    if (update_base_url.slice(-1) !== '/') {
-        update_base_url = update_base_url + '/';
+function startAutoUpdate(updateBaseUrl) {
+    if (updateBaseUrl.slice(-1) !== '/') {
+        updateBaseUrl = updateBaseUrl + '/';
     }
     try {
         // For reasons best known to Squirrel, the way it checks for updates
@@ -121,7 +119,7 @@ function startAutoUpdate(update_base_url) {
         // hits a URL that either gives it a 200 with some json or
         // 204 No Content. On windows it takes a base path and looks for
         // files under that path.
-        if (process.platform == 'darwin') {
+        if (process.platform === 'darwin') {
             // include the current version in the URL we hit. Electron doesn't add
             // it anywhere (apart from the User-Agent) so it's up to us. We could
             // (and previously did) just use the User-Agent, but this doesn't
@@ -129,16 +127,15 @@ function startAutoUpdate(update_base_url) {
             // and also acts as a convenient cache-buster to ensure that when the
             // app updates it always gets a fresh value to avoid update-looping.
             electron.autoUpdater.setFeedURL(
-                update_base_url +
-                'macos/?localVersion=' + encodeURIComponent(electron.app.getVersion())
-            );
-        } else if (process.platform == 'win32') {
-            electron.autoUpdater.setFeedURL(update_base_url + 'win32/' + process.arch + '/');
+                `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(electron.app.getVersion())}`);
+
+        } else if (process.platform === 'win32') {
+            electron.autoUpdater.setFeedURL(updateBaseUrl + 'win32/' + process.arch + '/');
         } else {
             // Squirrel / electron only supports auto-update on these two platforms.
             // I'm not even going to try to guess which feed style they'd use if they
             // implemented it on Linux, or if it would be different again.
-            console.log("Auto update not supported on this platform");
+            console.log('Auto update not supported on this platform');
         }
         // We check for updates ourselves rather than using 'updater' because we need to
         // do it in the main process (and we don't really need to check every 10 minutes:
@@ -151,7 +148,7 @@ function startAutoUpdate(update_base_url) {
         setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS);
     } catch (err) {
         // will fail if running in debug mode
-        console.log("Couldn't enable update checking", err);
+        console.log('Couldn\'t enable update checking', err);
     }
 }
 
@@ -162,13 +159,13 @@ function startAutoUpdate(update_base_url) {
 // Assuming we generally run from the console when developing,
 // this is far preferable.
 process.on('uncaughtException', function(error) {
-    console.log("Unhandled exception", error);
+    console.log('Unhandled exception', error);
 });
 
 electron.ipcMain.on('install_update', installUpdate);
 
 let focusHandlerAttached = false;
-electron.ipcMain.on('setBadgeCount', function(ev, count) {
+electron.ipcMain.on('setBadgeCount', function(ev, count: number) {
     electron.app.setBadgeCount(count);
     if (process.platform === 'win32' && mainWindow && !mainWindow.isFocused()) {
         if (count > 0) {
@@ -198,30 +195,28 @@ const shouldQuit = electron.app.makeSingleInstance((commandLine, workingDirector
 });
 
 if (shouldQuit) {
-    console.log("Other instance detected: exiting");
-    electron.app.quit()
+    console.log('Other instance detected: exiting');
+    electron.app.quit();
 }
 
 electron.app.on('ready', () => {
     if (vectorConfig.update_base_url) {
-        console.log("Starting auto update with base URL: " + vectorConfig.update_base_url);
+        console.log(`Starting auto update with base URL: ${vectorConfig.update_base_url}`);
         startAutoUpdate(vectorConfig.update_base_url);
     } else {
-        console.log("No update_base_url is defined: auto update is disabled");
+        console.log('No update_base_url is defined: auto update is disabled');
     }
 
-    const icon_path = `${__dirname}/../img/riot.` + (
-        process.platform == 'win32' ? 'ico' : 'png'
-    );
+    const iconPath = `${__dirname}/../img/riot.${process.platform === 'win32' ? 'ico' : 'png'}`;
 
     // Load the previous window state with fallback to defaults
-    let mainWindowState = windowStateKeeper({
+    const mainWindowState = windowStateKeeper({
         defaultWidth: 1024,
         defaultHeight: 768,
     });
 
     mainWindow = new electron.BrowserWindow({
-        icon: icon_path,
+        icon: iconPath,
         show: false,
         autoHideMenuBar: true,
 
@@ -231,12 +226,12 @@ electron.app.on('ready', () => {
         height: mainWindowState.height,
     });
     mainWindow.loadURL(`file://${__dirname}/../../webapp/index.html`);
-    electron.Menu.setApplicationMenu(VectorMenu);
+    electron.Menu.setApplicationMenu(vectorMenu);
 
     // Create trayIcon icon
     tray.create(mainWindow, {
-        icon_path: icon_path,
-        brand: vectorConfig.brand || 'Riot'
+        icon_path: iconPath,
+        brand: vectorConfig.brand || 'Riot',
     });
 
     if (!process.argv.includes('--hidden')) {
@@ -249,7 +244,7 @@ electron.app.on('ready', () => {
         mainWindow = null;
     });
     mainWindow.on('close', (e) => {
-        if (!appQuitting && (tray.hasTray() || process.platform == 'darwin')) {
+        if (!appQuitting && (tray.hasTray() || process.platform === 'darwin')) {
             // On Mac, closing the window just hides it
             // (this is generally how single-window Mac apps
             // behave, eg. Mail.app)
diff --git a/electron_app/src/squirrelhooks.js b/electron_app/src/squirrelhooks.js
index 15ed670f..728c9cfb 100644
--- a/electron_app/src/squirrelhooks.js
+++ b/electron_app/src/squirrelhooks.js
@@ -16,30 +16,30 @@ limitations under the License.
 
 const path = require('path');
 const spawn = require('child_process').spawn;
-const app = require('electron').app;
+const {app} = require('electron');
 
-function run_update_exe(args, done) {
+function runUpdateExe(args, done) {
     // Invokes Squirrel's Update.exe which will do things for us like create shortcuts
     // Note that there's an Update.exe in the app-x.x.x directory and one in the parent
     // directory: we need to run the one in the parent directory, because it discovers
     // information about the app by inspecting the directory it's run from.
     const updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe');
-    console.log('Spawning `%s` with args `%s`', updateExe, args);
+    console.log(`Spawning '${updateExe}' with args '${args}'`);
     spawn(updateExe, args, {
-      detached: true
+      detached: true,
     }).on('close', done);
-};
+}
 
-function check_squirrel_hooks() {
-    if (process.platform != 'win32') return false;
+function checkSquirrelHooks() {
+    if (process.platform !== 'win32') return false;
 
     const cmd = process.argv[1];
     const target = path.basename(process.execPath);
     if (cmd === '--squirrel-install' || cmd === '--squirrel-updated') {
-        run_update_exe(['--createShortcut=' + target + ''], app.quit);
+        runUpdateExe(['--createShortcut=' + target + ''], app.quit);
         return true;
     } else if (cmd === '--squirrel-uninstall') {
-        run_update_exe(['--removeShortcut=' + target + ''], app.quit);
+        runUpdateExe(['--removeShortcut=' + target + ''], app.quit);
         return true;
     } else if (cmd === '--squirrel-obsolete') {
         app.quit();
@@ -48,4 +48,4 @@ function check_squirrel_hooks() {
     return false;
 }
 
-module.exports = check_squirrel_hooks;
+module.exports = checkSquirrelHooks;
diff --git a/electron_app/src/tray.js b/electron_app/src/tray.js
index 5409194d..9df1a0fb 100644
--- a/electron_app/src/tray.js
+++ b/electron_app/src/tray.js
@@ -25,9 +25,7 @@ exports.hasTray = function hasTray() {
 
 exports.create = function(win, config) {
     // no trays on darwin
-    if (process.platform === 'darwin' || trayIcon) {
-        return;
-    }
+    if (process.platform === 'darwin' || trayIcon) return;
 
     const toggleWin = function() {
         if (win.isVisible() && !win.isMinimized()) {
@@ -41,12 +39,10 @@ exports.create = function(win, config) {
 
     const contextMenu = Menu.buildFromTemplate([
         {
-            label: 'Show/Hide ' + config.brand,
+            label: `Show/Hide ${config.brand}`,
             click: toggleWin,
         },
-        {
-            type: 'separator',
-        },
+        { type: 'separator' },
         {
             label: 'Quit',
             click: function() {
diff --git a/electron_app/src/vectormenu.js b/electron_app/src/vectormenu.js
index 70ed3ac3..f55009f7 100644
--- a/electron_app/src/vectormenu.js
+++ b/electron_app/src/vectormenu.js
@@ -14,170 +14,112 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-const electron = require('electron');
+const {app, shell, Menu} = require('electron');
 
 // Menu template from http://electron.atom.io/docs/api/menu/, edited
 const template = [
     {
         label: 'Edit',
         submenu: [
-            {
-                role: 'undo'
-            },
-            {
-                role: 'redo'
-            },
-            {
-                type: 'separator'
-            },
-            {
-                role: 'cut'
-            },
-            {
-                role: 'copy'
-            },
-            {
-                role: 'paste'
-            },
-            {
-                role: 'pasteandmatchstyle'
-            },
-            {
-                role: 'delete'
-            },
-            {
-                role: 'selectall'
-            }
-        ]
+            { role: 'undo' },
+            { role: 'redo' },
+            { type: 'separator' },
+            { role: 'cut' },
+            { role: 'copy' },
+            { role: 'paste' },
+            { role: 'pasteandmatchstyle' },
+            { role: 'delete' },
+            { role: 'selectall' },
+        ],
     },
     {
         label: 'View',
         submenu: [
-            {
-                type: 'separator'
-            },
-            {
-                role: 'resetzoom'
-            },
-            {
-                role: 'zoomin'
-            },
-            {
-                role: 'zoomout'
-            },
-            {
-                type: 'separator'
-            },
-            {
-                role: 'togglefullscreen'
-            },
-            {
-                role: 'toggledevtools'
-            }
-        ]
+            { type: 'separator' },
+            { role: 'resetzoom' },
+            { role: 'zoomin' },
+            { role: 'zoomout' },
+            { type: 'separator' },
+            { role: 'togglefullscreen' },
+            { role: 'toggledevtools' },
+        ],
     },
     {
         role: 'window',
         submenu: [
-            {
-                role: 'minimize'
-            },
-            {
-                role: 'close'
-            }
-        ]
+            { role: 'minimize' },
+            { role: 'close' },
+        ],
     },
     {
         role: 'help',
         submenu: [
             {
                 label: 'riot.im',
-                click () { electron.shell.openExternal('https://riot.im/') }
-            }
-        ]
-    }
+                click() { shell.openExternal('https://riot.im/'); },
+            },
+        ],
+    },
 ];
 
 // macOS has specific menu conventions...
 if (process.platform === 'darwin') {
     // first macOS menu is the name of the app
-    const name = electron.app.getName()
+    const name = app.getName();
     template.unshift({
         label: name,
         submenu: [
-            {
-                role: 'about'
-            },
-            {
-                type: 'separator'
-            },
+            { role: 'about' },
+            { type: 'separator' },
             {
                 role: 'services',
-                submenu: []
+                submenu: [],
             },
-            {
-                type: 'separator'
-            },
-            {
-                role: 'hide'
-            },
-            {
-                role: 'hideothers'
-            },
-            {
-                role: 'unhide'
-            },
-            {
-                type: 'separator'
-            },
-            {
-                role: 'quit'
-            }
-        ]
-    })
+            { type: 'separator' },
+            { role: 'hide' },
+            { role: 'hideothers' },
+            { role: 'unhide' },
+            { type: 'separator' },
+            { role: 'quit' },
+        ],
+    });
     // Edit menu.
     // This has a 'speech' section on macOS
     template[1].submenu.push(
-        {
-            type: 'separator'
-        },
+        { type: 'separator' },
         {
             label: 'Speech',
             submenu: [
-                {
-                    role: 'startspeaking'
-                },
-                {
-                    role: 'stopspeaking'
-                }
-            ]
-        }
-    )
+                { role: 'startspeaking' },
+                { role: 'stopspeaking' },
+            ],
+        },
+    );
     // Window menu.
     // This also has specific functionality on macOS
     template[3].submenu = [
         {
             label: 'Close',
             accelerator: 'CmdOrCtrl+W',
-            role: 'close'
+            role: 'close',
         },
         {
             label: 'Minimize',
             accelerator: 'CmdOrCtrl+M',
-            role: 'minimize'
+            role: 'minimize',
         },
         {
             label: 'Zoom',
-            role: 'zoom'
+            role: 'zoom',
         },
         {
-            type: 'separator'
+            type: 'separator',
         },
         {
             label: 'Bring All to Front',
-            role: 'front'
-        }
-    ]
+            role: 'front',
+        },
+    ];
 } else {
     template.unshift({
         label: 'File',
@@ -186,12 +128,10 @@ if (process.platform === 'darwin') {
             /*{
                 role: 'about'
             },*/
-            {
-                role: 'quit'
-            }
-        ]
+            { role: 'quit' },
+        ],
     });
 }
 
-module.exports = electron.Menu.buildFromTemplate(template)
+module.exports = Menu.buildFromTemplate(template);
 

From 4bb054c9553cbf4b97e0bc95c266349a605de722 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Mon, 22 May 2017 19:25:18 +0100
Subject: [PATCH 2/4] electron stuff isn't actually using flow, so don't enable
 it

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
 electron_app/src/electron-main.js | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js
index b58e2553..95daaa6a 100644
--- a/electron_app/src/electron-main.js
+++ b/electron_app/src/electron-main.js
@@ -1,5 +1,3 @@
-// @flow
-
 /*
 Copyright 2016 Aviral Dasgupta
 Copyright 2016 OpenMarket Ltd
@@ -165,7 +163,7 @@ process.on('uncaughtException', function(error) {
 electron.ipcMain.on('install_update', installUpdate);
 
 let focusHandlerAttached = false;
-electron.ipcMain.on('setBadgeCount', function(ev, count: number) {
+electron.ipcMain.on('setBadgeCount', function(ev, count) {
     electron.app.setBadgeCount(count);
     if (process.platform === 'win32' && mainWindow && !mainWindow.isFocused()) {
         if (count > 0) {

From e0fb2fd07400cd8ae81554548080ade3b2937286 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Mon, 22 May 2017 19:25:56 +0100
Subject: [PATCH 3/4] /me forgets we don't have babel

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
 electron_app/src/vectormenu.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/electron_app/src/vectormenu.js b/electron_app/src/vectormenu.js
index f55009f7..ab30b376 100644
--- a/electron_app/src/vectormenu.js
+++ b/electron_app/src/vectormenu.js
@@ -93,8 +93,8 @@ if (process.platform === 'darwin') {
                 { role: 'startspeaking' },
                 { role: 'stopspeaking' },
             ],
-        },
-    );
+        });
+
     // Window menu.
     // This also has specific functionality on macOS
     template[3].submenu = [

From 8994c2bad14294a54986bf2f4d220b0d1e85b050 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Mon, 22 May 2017 19:28:01 +0100
Subject: [PATCH 4/4] missed a concat :)

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
 electron_app/src/electron-main.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js
index 95daaa6a..5dc889b1 100644
--- a/electron_app/src/electron-main.js
+++ b/electron_app/src/electron-main.js
@@ -128,7 +128,7 @@ function startAutoUpdate(updateBaseUrl) {
                 `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(electron.app.getVersion())}`);
 
         } else if (process.platform === 'win32') {
-            electron.autoUpdater.setFeedURL(updateBaseUrl + 'win32/' + process.arch + '/');
+            electron.autoUpdater.setFeedURL(`${updateBaseUrl}win32/${process.arch}/`);
         } else {
             // Squirrel / electron only supports auto-update on these two platforms.
             // I'm not even going to try to guess which feed style they'd use if they