error handler improved, fixes

This commit is contained in:
Jan Prochazka
2021-03-27 10:07:36 +01:00
parent 218478c128
commit 833610c88b
5 changed files with 65 additions and 38 deletions

View File

@@ -0,0 +1,46 @@
<script lang="ts">
import localforage from 'localforage';
let counter = 0;
$: counterCopy = counter;
const onunhandledrejection = async e => {
console.log('Unhandler error, checking whether crashed', e);
const oldCounter = counter;
counter++;
window.setTimeout(async () => {
if (counterCopy <= oldCounter) {
console.log('CRASH DETECTED!!!');
const lastDbGateCrashJson = localStorage.getItem('lastDbGateCrash');
const lastDbGateCrash = lastDbGateCrashJson ? JSON.parse(lastDbGateCrashJson) : null;
if (lastDbGateCrash && new Date().getTime() - lastDbGateCrash < 30 * 1000) {
if (
window.confirm(
'Sorry, DbGate has crashed again.\nDo you want to clear local user data to avoid crashing after next reload?'
)
) {
localStorage.clear();
try {
await localforage.clear();
} catch (err) {
console.error('Error clearing app data', err);
}
window.location.reload();
}
} else {
if (
window.confirm(
'Sorry, DbGate has crashed.\nPress OK for reload application\nPress Cancel and inspect Console in Developer tools for error details'
)
) {
localStorage.setItem('lastDbGateCrash', JSON.stringify(new Date().getTime()));
window.location.reload();
}
}
}
}, 500);
};
</script>
<svelte:window on:unhandledrejection={onunhandledrejection} />