From 64a2e908ae714666fda5e0fc5762ce134cdbfa37 Mon Sep 17 00:00:00 2001 From: Franco Montenegro Date: Tue, 1 Mar 2022 08:36:33 -0300 Subject: [PATCH] Prevent multiple downloads when auto updater isn't supported. Hide upgrade nag when on progress modal is displayed. --- electron/index.js | 15 ++++++++++++++- ui/redux/selectors/app.js | 4 ++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/electron/index.js b/electron/index.js index 78912f155..b1c36bcbd 100644 --- a/electron/index.js +++ b/electron/index.js @@ -43,12 +43,19 @@ let autoUpdateDownloaded = false; // that we show on Windows after you decline an upgrade and close the app later. let showingAutoUpdateCloseAlert = false; -// This is used to prevent downloading updates multiple times. +// This is used to prevent downloading updates multiple times when +// using the auto updater API. // As read in the documentation: // "Calling autoUpdater.checkForUpdates() twice will download the update two times." // https://www.electronjs.org/docs/latest/api/auto-updater#autoupdatercheckforupdates let keepCheckingForUpdates = true; +// Auto updater doesn't support Linux installations (only trough AppImages) +// this is why, for that case, we download a full executable (.deb package) +// as a fallback support. This variable will be used to prevent +// multiple downloads when auto updater isn't supported. +let downloadUpgradeInProgress = false; + // Keep a global reference, if you don't, they will be closed automatically when the JavaScript // object is garbage collected. let rendererWindow; @@ -321,6 +328,10 @@ ipcMain.on('get-disk-space', async (event) => { }); ipcMain.on('download-upgrade', async (event, params) => { + if (downloadUpgradeInProgress) { + return; + } + const { url, options } = params; const dir = fs.mkdtempSync(app.getPath('temp') + path.sep); options.onProgress = function(p) { @@ -328,9 +339,11 @@ ipcMain.on('download-upgrade', async (event, params) => { }; options.directory = dir; options.onCompleted = function(c) { + downloadUpgradeInProgress = false; rendererWindow.webContents.send('download-update-complete', c); }; const win = BrowserWindow.getFocusedWindow(); + downloadUpgradeInProgress = true; await download(win, url, options).catch(e => console.log('e', e)); }); diff --git a/ui/redux/selectors/app.js b/ui/redux/selectors/app.js index 069e30bc6..e049b8337 100644 --- a/ui/redux/selectors/app.js +++ b/ui/redux/selectors/app.js @@ -1,6 +1,6 @@ import { createSelector } from 'reselect'; import { selectClaimsById, selectMyChannelClaims, selectTotalStakedAmountForChannelUri } from 'redux/selectors/claims'; -import { AUTO_UPDATE_DOWNLOADED } from 'constants/modal_types'; +import * as MODALS from 'constants/modal_types'; export const selectState = (state) => state.app || {}; @@ -53,7 +53,7 @@ export const selectAutoUpdateDownloaded = createSelector(selectState, (state) => export const selectAutoUpdateDeclined = createSelector(selectState, (state) => state.autoUpdateDeclined); export const selectIsUpdateModalDisplayed = createSelector(selectState, (state) => { - return state.modal === AUTO_UPDATE_DOWNLOADED; + return [MODALS.AUTO_UPDATE_DOWNLOADED, MODALS.UPGRADE, MODALS.DOWNLOADING].includes(state.modal); }); export const selectDaemonVersionMatched = createSelector(selectState, (state) => state.daemonVersionMatched);