Display dialog on corrupted database

This commit is contained in:
Fedor Indutny 2021-08-24 13:31:06 -07:00 committed by GitHub
parent 547ccd167c
commit 488ac22860
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 23 deletions

59
main.js
View File

@ -1143,6 +1143,42 @@ async function initializeSQL() {
const sqlInitPromise = initializeSQL();
const onDatabaseError = async error => {
const buttonIndex = dialog.showMessageBoxSync({
buttons: [
locale.messages.copyErrorAndQuit.message,
locale.messages.deleteAndRestart.message,
],
defaultId: 0,
detail: redactAll(error),
message: locale.messages.databaseError.message,
noLink: true,
type: 'error',
});
if (buttonIndex === 0) {
clipboard.writeText(`Database startup error:\n\n${redactAll(error)}`);
} else {
await sql.removeDB();
removeUserConfig();
app.relaunch();
}
app.exit(1);
};
ipc.on('database-error', (event, error) => {
if (mainWindow) {
mainWindow.close();
}
mainWindow = undefined;
// Prevent window from re-opening
ready = false;
onDatabaseError(error);
});
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
@ -1300,29 +1336,8 @@ app.on('ready', async () => {
const { error: sqlError } = await sqlInitPromise;
if (sqlError) {
console.log('sql.initialize was unsuccessful; returning early');
const buttonIndex = dialog.showMessageBoxSync({
buttons: [
locale.messages.copyErrorAndQuit.message,
locale.messages.deleteAndRestart.message,
],
defaultId: 0,
detail: redactAll(sqlError.stack),
message: locale.messages.databaseError.message,
noLink: true,
type: 'error',
});
if (buttonIndex === 0) {
clipboard.writeText(
`Database startup error:\n\n${redactAll(sqlError.stack)}`
);
} else {
await sql.removeDB();
removeUserConfig();
app.relaunch();
}
app.exit(1);
await onDatabaseError(sqlError.stack);
return;
}

View File

@ -448,7 +448,7 @@ function _updateJob(id: number, data: ClientJobUpdateType) {
window.log.error(
`Detected corruption. Restarting the application immediately. Error: ${error.message}`
);
window.restart();
ipcRenderer?.send('database-error', error.message);
}
return reject(error);