Ensure fallback 'update available' dialog cannot stack

This commit is contained in:
Josh Perez 2020-02-21 15:41:05 -08:00 committed by GitHub
parent 8d9ccd3c0a
commit c347a2761a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 21 deletions

View File

@ -147,10 +147,16 @@ export async function downloadUpdate(
}
}
let showingUpdateDialog = false;
async function showFallbackUpdateDialog(
mainWindow: BrowserWindow,
locale: LocaleType
) {
): Promise<boolean> {
if (showingUpdateDialog) {
return false;
}
const RESTART_BUTTON = 0;
const LATER_BUTTON = 1;
const options = {
@ -166,8 +172,12 @@ async function showFallbackUpdateDialog(
cancelId: LATER_BUTTON,
};
showingUpdateDialog = true;
const { response } = await dialog.showMessageBox(mainWindow, options);
showingUpdateDialog = false;
return response === RESTART_BUTTON;
}
@ -188,15 +198,24 @@ export function showUpdateDialog(
setTimeout(async () => {
if (!ack) {
await showFallbackUpdateDialog(mainWindow, locale);
const shouldUpdate = await showFallbackUpdateDialog(mainWindow, locale);
if (shouldUpdate) {
performUpdateCallback();
}
}
}, ACK_RENDER_TIMEOUT);
}
let showingCannotUpdateDialog = false;
async function showFallbackCannotUpdateDialog(
mainWindow: BrowserWindow,
locale: LocaleType
) {
): Promise<void> {
if (showingCannotUpdateDialog) {
return;
}
const options = {
type: 'error',
buttons: [locale.messages.ok.message],
@ -204,7 +223,11 @@ async function showFallbackCannotUpdateDialog(
message: locale.i18n('cannotUpdateDetail', ['https://signal.org/download']),
};
showingCannotUpdateDialog = true;
await dialog.showMessageBox(mainWindow, options);
showingCannotUpdateDialog = false;
}
export function showCannotUpdateDialog(

View File

@ -24,7 +24,6 @@ import { hexToBinary, verifySignature } from './signature';
import { markShouldQuit } from '../../app/window_state';
import { Dialogs } from '../types/Dialogs';
let isChecking = false;
const SECOND = 1000;
const MINUTE = SECOND * 60;
const INTERVAL = MINUTE * 30;
@ -60,14 +59,8 @@ async function checkDownloadAndInstall(
locale: LocaleType,
logger: LoggerType
) {
if (isChecking) {
return;
}
logger.info('checkDownloadAndInstall: checking for update...');
try {
isChecking = true;
const result = await checkForUpdates(logger);
if (!result) {
return;
@ -121,8 +114,6 @@ async function checkDownloadAndInstall(
});
} catch (error) {
logger.error('checkDownloadAndInstall: error', getPrintableError(error));
} finally {
isChecking = false;
}
}
@ -358,10 +349,16 @@ export function showReadOnlyDialog(
}, ACK_RENDER_TIMEOUT);
}
let showingReadOnlyDialog = false;
async function showFallbackReadOnlyDialog(
mainWindow: BrowserWindow,
locale: LocaleType
) {
if (showingReadOnlyDialog) {
return;
}
const options = {
type: 'warning',
buttons: [locale.messages.ok.message],
@ -369,5 +366,9 @@ async function showFallbackReadOnlyDialog(
message: locale.i18n('readOnlyVolume', ['Signal.app', '/Applications']),
};
showingReadOnlyDialog = true;
await dialog.showMessageBox(mainWindow, options);
showingReadOnlyDialog = false;
}

View File

@ -23,7 +23,6 @@ import { markShouldQuit } from '../../app/window_state';
const readdir = pify(readdirCallback);
const unlink = pify(unlinkCallback);
let isChecking = false;
const SECOND = 1000;
const MINUTE = SECOND * 60;
const INTERVAL = MINUTE * 30;
@ -61,13 +60,7 @@ async function checkDownloadAndInstall(
locale: LocaleType,
logger: LoggerType
) {
if (isChecking) {
return;
}
try {
isChecking = true;
logger.info('checkDownloadAndInstall: checking for update...');
const result = await checkForUpdates(logger);
if (!result) {
@ -111,8 +104,6 @@ async function checkDownloadAndInstall(
});
} catch (error) {
logger.error('checkDownloadAndInstall: error', getPrintableError(error));
} finally {
isChecking = false;
}
}