Handle errors on loading settings

The error on loading settings can occurs when the settings lose backward
compatibility on version up, or the saved date is broken.  The error is
caught, then the script done fallback to default settings and notify it
to user.
This commit is contained in:
Shin'ya Ueoka 2019-07-30 21:52:22 +09:00
parent 3db11041c5
commit 33a16b85e4
4 changed files with 26 additions and 6 deletions

View file

@ -33,6 +33,7 @@
"function-paren-newline": "off",
"id-length": "off",
"indent": ["error", 2],
"init-declarations": "off",
"jsx-quotes": ["error", "prefer-single"],
"max-classes-per-file": "off",
"max-lines": "off",

View file

@ -4,7 +4,20 @@ const NOTIFICATION_ID = 'vimvixen-update';
@injectable()
export default class NotifyPresenter {
async notify(
async notifyUpdated(version: string, onclick: () => void): Promise<void> {
let title = `Vim Vixen ${version} has been installed`;
let message = 'Click here to see release notes';
await this.notify(title, message, onclick);
}
async notifyInvalidSettings(onclick: () => void): Promise<void> {
let title = `Loaded settings is invalid`;
// eslint-disable-next-line max-len
let message = 'The default settings is used due to the last saved settings is invalid. Check your current settings from the add-on preference';
await this.notify(title, message, onclick);
}
private async notify(
title: string,
message: string,
onclick: () => void,

View file

@ -4,6 +4,7 @@ import PersistentSettingRepository
import SettingRepository from '../repositories/SettingRepository';
import { DefaultSettingData } from '../../shared/SettingData';
import Settings from '../../shared/Settings';
import NotifyPresenter from '../presenters/NotifyPresenter';
@injectable()
export default class SettingUseCase {
@ -11,6 +12,7 @@ export default class SettingUseCase {
constructor(
private persistentSettingRepository: PersistentSettingRepository,
private settingRepository: SettingRepository,
private notifyPresenter: NotifyPresenter,
) {
}
@ -24,8 +26,14 @@ export default class SettingUseCase {
data = DefaultSettingData;
}
let value = data.toSettings();
this.settingRepository.update(value);
let value: Settings;
try {
value = data.toSettings();
} catch (e) {
this.notifyPresenter.notifyInvalidSettings(() => {});
value = DefaultSettingData.toSettings();
}
this.settingRepository.update(value!!);
return value;
}
}

View file

@ -12,10 +12,8 @@ export default class VersionUseCase {
notify(): Promise<void> {
let manifest = browser.runtime.getManifest();
let title = `Vim Vixen ${manifest.version} has been installed`;
let message = 'Click here to see release notes';
let url = this.releaseNoteUrl(manifest.version);
return this.notifyPresenter.notify(title, message, () => {
return this.notifyPresenter.notifyUpdated(manifest.version, () => {
this.tabPresenter.create(url);
});
}