diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2019-08-05 21:21:39 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-05 21:21:39 +0900 |
commit | e7ed84f7576eafadfcd0f7b9737586d048477454 (patch) | |
tree | c8f7d1b783aad596f57fbffd873f8b07f5b0dba1 /src | |
parent | 7104f122f94e17ece56d2bd832d007c716e5631e (diff) | |
parent | 9b2b8f0608df9e4c7a251f49d8ed818b8966786e (diff) |
Merge pull request #622 from ueokande/fallback-default-settings
Handle errors on loading settings
Diffstat (limited to 'src')
-rw-r--r-- | src/background/presenters/NotifyPresenter.ts | 31 | ||||
-rw-r--r-- | src/background/usecases/SettingUseCase.ts | 12 | ||||
-rw-r--r-- | src/background/usecases/VersionUseCase.ts | 4 |
3 files changed, 32 insertions, 15 deletions
diff --git a/src/background/presenters/NotifyPresenter.ts b/src/background/presenters/NotifyPresenter.ts index 8fa4acb..9785278 100644 --- a/src/background/presenters/NotifyPresenter.ts +++ b/src/background/presenters/NotifyPresenter.ts @@ -1,26 +1,37 @@ import { injectable } from 'tsyringe'; -const NOTIFICATION_ID = 'vimvixen-update'; +const NOTIFICATION_ID_UPDATE = 'vimvixen-update'; +const NOTIFICATION_ID_INVALID_SETTINGS = 'vimvixen-update-invalid-settings'; @injectable() export default class NotifyPresenter { - async notify( - title: string, - message: string, - onclick: () => void, - ): Promise<void> { + async notifyUpdated(version: string, onclick: () => void): Promise<void> { + let title = `Vim Vixen ${version} has been installed`; + let message = 'Click here to see release notes'; + const listener = (id: string) => { - if (id !== NOTIFICATION_ID) { + if (id !== NOTIFICATION_ID_UPDATE) { return; } - onclick(); - browser.notifications.onClicked.removeListener(listener); }; browser.notifications.onClicked.addListener(listener); - await browser.notifications.create(NOTIFICATION_ID, { + await browser.notifications.create(NOTIFICATION_ID_UPDATE, { + 'type': 'basic', + 'iconUrl': browser.extension.getURL('resources/icon_48x48.png'), + title, + message, + }); + } + + async notifyInvalidSettings(): 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 browser.notifications.create(NOTIFICATION_ID_INVALID_SETTINGS, { 'type': 'basic', 'iconUrl': browser.extension.getURL('resources/icon_48x48.png'), title, diff --git a/src/background/usecases/SettingUseCase.ts b/src/background/usecases/SettingUseCase.ts index fd00f80..53c8f1d 100644 --- a/src/background/usecases/SettingUseCase.ts +++ b/src/background/usecases/SettingUseCase.ts @@ -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; } } diff --git a/src/background/usecases/VersionUseCase.ts b/src/background/usecases/VersionUseCase.ts index 1d9ef8b..0ff0e9b 100644 --- a/src/background/usecases/VersionUseCase.ts +++ b/src/background/usecases/VersionUseCase.ts @@ -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); }); } |