Ensure fallback 'update available' dialog cannot stack
This commit is contained in:
parent
8d9ccd3c0a
commit
c347a2761a
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue