From b30df2115c8e25cf251c1e12b2889277a8371db1 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Tue, 8 Nov 2016 10:54:03 +0000 Subject: [PATCH 1/5] Add some CSS for an error popup that appears next to the `Manage Integrations` button if there was a problem contacting Scalar --- .../views/rooms/RoomSettings.css | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/RoomSettings.css b/src/skins/vector/css/matrix-react-sdk/views/rooms/RoomSettings.css index 1fd8349aab..6a3b1ac8cb 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/RoomSettings.css +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/RoomSettings.css @@ -20,7 +20,9 @@ limitations under the License. } .mx_RoomSettings_leaveButton, -.mx_RoomSettings_integrationsButton { +.mx_RoomSettings_integrationsButton, +.mx_RoomSettings_integrationsButton_error { + position: relative; height: 36px; background-color: #76cfa6; border-radius: 36px; @@ -33,6 +35,21 @@ limitations under the License. padding-left: 12px; padding-right: 12px; } +.mx_RoomSettings_integrationsButton_error { + pointer: not-allowed; +} +.mx_RoomSettings_integrationsButton_errorPopup { + position: absolute; + top: 110%; + left: -26%; + width: 150%; + padding: 2%; + font-size: 10pt; + line-height: 1.5em; + border-radius: 5px; + background-color: #000; + color: #fff; +} .mx_RoomSettings_e2eIcon { padding-left: 4px; From 84aac886776910e42641a88890500c1e7009299d Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 8 Nov 2016 11:07:36 +0000 Subject: [PATCH 2/5] Make auto-update configureable Otherwise everyone that builds electron vector will end up with their apps auto-updatin to our version when we release an update. Coming next: A way to manage our electron release process to make sure we never ship a build with auto-update disabled. --- electron/src/electron-main.js | 53 +++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/electron/src/electron-main.js b/electron/src/electron-main.js index a6e5a7766e..aa6b7e22ff 100644 --- a/electron/src/electron-main.js +++ b/electron/src/electron-main.js @@ -28,6 +28,17 @@ const url = require('url'); const VectorMenu = require('./vectormenu'); +let vectorConfig = {}; +try { + vectorConfig = require('../../vector/config.json'); +} catch (e) { + console.log(`file://${__dirname}/../../vector/config.json`, e); + // it would be nice to check the error code here and bail if the config + // is unparseable, but we get MODULE_NOT_FOUND in the case of a missing + // file or invalid json, so node is just very unhelpful. + // Continue with the defaults (ie. an empty config) +} + const PERMITTED_URL_SCHEMES = [ 'http:', 'https:', @@ -91,19 +102,10 @@ function pollForUpdates() { } } -// handle uncaught errors otherwise it displays -// stack traces in popup dialogs, which is terrible (which -// it will do any time the auto update poke fails, and there's -// no other way to catch this error). -// Assuming we generally run from the console when developing, -// this is far preferable. -process.on('uncaughtException', function (error) { - console.log("Unhandled exception", error); -}); - -electron.ipcMain.on('install_update', installUpdate); - -electron.app.on('ready', () => { +function startAutoUpdate(update_url) { + if (update_url.slice(-1) !== '/') { + update_url = update_url + '/'; + } try { // For reasons best known to Squirrel, the way it checks for updates // is completely different between macOS and windows. On macOS, it @@ -111,9 +113,9 @@ electron.app.on('ready', () => { // 204 No Content. On windows it takes a base path and looks for // files under that path. if (process.platform == 'darwin') { - electron.autoUpdater.setFeedURL("https://riot.im/autoupdate/desktop/"); + electron.autoUpdater.setFeedURL(update_url); } else if (process.platform == 'win32') { - electron.autoUpdater.setFeedURL("https://riot.im/download/desktop/win32/"); + electron.autoUpdater.setFeedURL(update_url + 'win32/'); } 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 @@ -133,6 +135,27 @@ electron.app.on('ready', () => { // will fail if running in debug mode console.log("Couldn't enable update checking", err); } +} + +// handle uncaught errors otherwise it displays +// stack traces in popup dialogs, which is terrible (which +// it will do any time the auto update poke fails, and there's +// no other way to catch this error). +// Assuming we generally run from the console when developing, +// this is far preferable. +process.on('uncaughtException', function (error) { + console.log("Unhandled exception", error); +}); + +electron.ipcMain.on('install_update', installUpdate); + +electron.app.on('ready', () => { + if (vectorConfig.update_url) { + console.log("Starting auto update with URL: " + vectorConfig.update_url); + startAutoUpdate(vectorConfig.update_url); + } else { + console.log("No update_url is defined: auto update is disabled"); + } mainWindow = new electron.BrowserWindow({ icon: `${__dirname}/../img/riot.ico`, From ccea483f4f74b0b076a1b6874ede50d11ec6b149 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 8 Nov 2016 11:20:47 +0000 Subject: [PATCH 3/5] Missed files electron windows fixes Missed from https://github.com/vector-im/vector-web/pull/2551 * squirrel hooks file for handling install / uninstall events * Install 'spinner' gif for windows (ours does not spin) --- electron/build/install-spinner.gif | Bin 0 -> 4460 bytes electron/src/squirrelhooks.js | 30 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 electron/build/install-spinner.gif create mode 100644 electron/src/squirrelhooks.js diff --git a/electron/build/install-spinner.gif b/electron/build/install-spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..c4f832c34230af5d0267962c7e1d0fab4bab5dd0 GIT binary patch literal 4460 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 literal 0 HcmV?d00001 diff --git a/electron/src/squirrelhooks.js b/electron/src/squirrelhooks.js new file mode 100644 index 0000000000..10fb8d9ec5 --- /dev/null +++ b/electron/src/squirrelhooks.js @@ -0,0 +1,30 @@ +const path = require('path'); +const spawn = require('child_process').spawn; +const app = require('electron').app; + +function run_update_exe(args, done) { + const updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe'); + spawn(updateExe, args, { + detached: true + }).on('close', done); +}; + +function check_squirrel_hooks() { + 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); + return true; + } else if (cmd === '--squirrel-uninstall') { + run_update_exe(['--removeShortcut=' + target + ''], app.quit); + return true; + } else if (cmd === '--squirrel-obsolete') { + app.quit(); + return true; + } + return false; +} + +module.exports = check_squirrel_hooks; From a2a3d7a0f9e7e1115829a984106e507f30393c0c Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 8 Nov 2016 11:45:11 +0000 Subject: [PATCH 4/5] Remove spurious log line --- electron/src/electron-main.js | 1 - 1 file changed, 1 deletion(-) diff --git a/electron/src/electron-main.js b/electron/src/electron-main.js index aa6b7e22ff..59cbca428e 100644 --- a/electron/src/electron-main.js +++ b/electron/src/electron-main.js @@ -32,7 +32,6 @@ let vectorConfig = {}; try { vectorConfig = require('../../vector/config.json'); } catch (e) { - console.log(`file://${__dirname}/../../vector/config.json`, e); // it would be nice to check the error code here and bail if the config // is unparseable, but we get MODULE_NOT_FOUND in the case of a missing // file or invalid json, so node is just very unhelpful. From 7bf69d067aeff9fccd2051df8aba717a5b351ff2 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 8 Nov 2016 14:32:33 +0000 Subject: [PATCH 5/5] Another missed file from the windows fixes This time the icon file for the window --- electron/img/riot.ico | Bin 0 -> 21650 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 electron/img/riot.ico diff --git a/electron/img/riot.ico b/electron/img/riot.ico new file mode 100644 index 0000000000000000000000000000000000000000..8b681ffba3c1fbc6af4ad68fc41449ce017d9b53 GIT binary patch literal 21650 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 Mnuf@?>b4R81I3T|A^-pY literal 0 HcmV?d00001