Ensure fallback 'update available' dialog cannot stack
This commit is contained in:
parent
8d9ccd3c0a
commit
c347a2761a
3 changed files with 36 additions and 21 deletions
|
@ -147,10 +147,16 @@ export async function downloadUpdate(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let showingUpdateDialog = false;
|
||||||
|
|
||||||
async function showFallbackUpdateDialog(
|
async function showFallbackUpdateDialog(
|
||||||
mainWindow: BrowserWindow,
|
mainWindow: BrowserWindow,
|
||||||
locale: LocaleType
|
locale: LocaleType
|
||||||
) {
|
): Promise<boolean> {
|
||||||
|
if (showingUpdateDialog) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const RESTART_BUTTON = 0;
|
const RESTART_BUTTON = 0;
|
||||||
const LATER_BUTTON = 1;
|
const LATER_BUTTON = 1;
|
||||||
const options = {
|
const options = {
|
||||||
|
@ -166,8 +172,12 @@ async function showFallbackUpdateDialog(
|
||||||
cancelId: LATER_BUTTON,
|
cancelId: LATER_BUTTON,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
showingUpdateDialog = true;
|
||||||
|
|
||||||
const { response } = await dialog.showMessageBox(mainWindow, options);
|
const { response } = await dialog.showMessageBox(mainWindow, options);
|
||||||
|
|
||||||
|
showingUpdateDialog = false;
|
||||||
|
|
||||||
return response === RESTART_BUTTON;
|
return response === RESTART_BUTTON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,15 +198,24 @@ export function showUpdateDialog(
|
||||||
|
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
if (!ack) {
|
if (!ack) {
|
||||||
await showFallbackUpdateDialog(mainWindow, locale);
|
const shouldUpdate = await showFallbackUpdateDialog(mainWindow, locale);
|
||||||
|
if (shouldUpdate) {
|
||||||
|
performUpdateCallback();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, ACK_RENDER_TIMEOUT);
|
}, ACK_RENDER_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let showingCannotUpdateDialog = false;
|
||||||
|
|
||||||
async function showFallbackCannotUpdateDialog(
|
async function showFallbackCannotUpdateDialog(
|
||||||
mainWindow: BrowserWindow,
|
mainWindow: BrowserWindow,
|
||||||
locale: LocaleType
|
locale: LocaleType
|
||||||
) {
|
): Promise<void> {
|
||||||
|
if (showingCannotUpdateDialog) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
type: 'error',
|
type: 'error',
|
||||||
buttons: [locale.messages.ok.message],
|
buttons: [locale.messages.ok.message],
|
||||||
|
@ -204,7 +223,11 @@ async function showFallbackCannotUpdateDialog(
|
||||||
message: locale.i18n('cannotUpdateDetail', ['https://signal.org/download']),
|
message: locale.i18n('cannotUpdateDetail', ['https://signal.org/download']),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
showingCannotUpdateDialog = true;
|
||||||
|
|
||||||
await dialog.showMessageBox(mainWindow, options);
|
await dialog.showMessageBox(mainWindow, options);
|
||||||
|
|
||||||
|
showingCannotUpdateDialog = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function showCannotUpdateDialog(
|
export function showCannotUpdateDialog(
|
||||||
|
|
|
@ -24,7 +24,6 @@ import { hexToBinary, verifySignature } from './signature';
|
||||||
import { markShouldQuit } from '../../app/window_state';
|
import { markShouldQuit } from '../../app/window_state';
|
||||||
import { Dialogs } from '../types/Dialogs';
|
import { Dialogs } from '../types/Dialogs';
|
||||||
|
|
||||||
let isChecking = false;
|
|
||||||
const SECOND = 1000;
|
const SECOND = 1000;
|
||||||
const MINUTE = SECOND * 60;
|
const MINUTE = SECOND * 60;
|
||||||
const INTERVAL = MINUTE * 30;
|
const INTERVAL = MINUTE * 30;
|
||||||
|
@ -60,14 +59,8 @@ async function checkDownloadAndInstall(
|
||||||
locale: LocaleType,
|
locale: LocaleType,
|
||||||
logger: LoggerType
|
logger: LoggerType
|
||||||
) {
|
) {
|
||||||
if (isChecking) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info('checkDownloadAndInstall: checking for update...');
|
logger.info('checkDownloadAndInstall: checking for update...');
|
||||||
try {
|
try {
|
||||||
isChecking = true;
|
|
||||||
|
|
||||||
const result = await checkForUpdates(logger);
|
const result = await checkForUpdates(logger);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
return;
|
return;
|
||||||
|
@ -121,8 +114,6 @@ async function checkDownloadAndInstall(
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('checkDownloadAndInstall: error', getPrintableError(error));
|
logger.error('checkDownloadAndInstall: error', getPrintableError(error));
|
||||||
} finally {
|
|
||||||
isChecking = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,10 +349,16 @@ export function showReadOnlyDialog(
|
||||||
}, ACK_RENDER_TIMEOUT);
|
}, ACK_RENDER_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let showingReadOnlyDialog = false;
|
||||||
|
|
||||||
async function showFallbackReadOnlyDialog(
|
async function showFallbackReadOnlyDialog(
|
||||||
mainWindow: BrowserWindow,
|
mainWindow: BrowserWindow,
|
||||||
locale: LocaleType
|
locale: LocaleType
|
||||||
) {
|
) {
|
||||||
|
if (showingReadOnlyDialog) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
buttons: [locale.messages.ok.message],
|
buttons: [locale.messages.ok.message],
|
||||||
|
@ -369,5 +366,9 @@ async function showFallbackReadOnlyDialog(
|
||||||
message: locale.i18n('readOnlyVolume', ['Signal.app', '/Applications']),
|
message: locale.i18n('readOnlyVolume', ['Signal.app', '/Applications']),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
showingReadOnlyDialog = true;
|
||||||
|
|
||||||
await dialog.showMessageBox(mainWindow, options);
|
await dialog.showMessageBox(mainWindow, options);
|
||||||
|
|
||||||
|
showingReadOnlyDialog = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ import { markShouldQuit } from '../../app/window_state';
|
||||||
const readdir = pify(readdirCallback);
|
const readdir = pify(readdirCallback);
|
||||||
const unlink = pify(unlinkCallback);
|
const unlink = pify(unlinkCallback);
|
||||||
|
|
||||||
let isChecking = false;
|
|
||||||
const SECOND = 1000;
|
const SECOND = 1000;
|
||||||
const MINUTE = SECOND * 60;
|
const MINUTE = SECOND * 60;
|
||||||
const INTERVAL = MINUTE * 30;
|
const INTERVAL = MINUTE * 30;
|
||||||
|
@ -61,13 +60,7 @@ async function checkDownloadAndInstall(
|
||||||
locale: LocaleType,
|
locale: LocaleType,
|
||||||
logger: LoggerType
|
logger: LoggerType
|
||||||
) {
|
) {
|
||||||
if (isChecking) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
isChecking = true;
|
|
||||||
|
|
||||||
logger.info('checkDownloadAndInstall: checking for update...');
|
logger.info('checkDownloadAndInstall: checking for update...');
|
||||||
const result = await checkForUpdates(logger);
|
const result = await checkForUpdates(logger);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
|
@ -111,8 +104,6 @@ async function checkDownloadAndInstall(
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('checkDownloadAndInstall: error', getPrintableError(error));
|
logger.error('checkDownloadAndInstall: error', getPrintableError(error));
|
||||||
} finally {
|
|
||||||
isChecking = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue