diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2020-02-09 13:43:37 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-09 13:43:37 +0900 |
commit | e9f81d2e2494396bc9ebd827ab02aa8128f1a3ac (patch) | |
tree | c6382665c547443358163cb7cbaeeaba52d688b3 /src/background/presenters/Notifier.ts | |
parent | 8b9388f6e60fe67d20638f55aecb0ed1b281871a (diff) | |
parent | b2fc46ebf79ebb1ffa068fb513d1eeb9b50d7b3f (diff) |
Merge pull request #708 from ueokande/sync-storage
Synchronize settings with Firefox Sync
Diffstat (limited to 'src/background/presenters/Notifier.ts')
-rw-r--r-- | src/background/presenters/Notifier.ts | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/background/presenters/Notifier.ts b/src/background/presenters/Notifier.ts new file mode 100644 index 0000000..57d58cb --- /dev/null +++ b/src/background/presenters/Notifier.ts @@ -0,0 +1,53 @@ +const NOTIFICATION_ID_UPDATE = 'vimvixen-update'; +const NOTIFICATION_ID_INVALID_SETTINGS = 'vimvixen-update-invalid-settings'; + +export default interface Notifier { + notifyUpdated(version: string, onclick: () => void): Promise<void>; + + notifyInvalidSettings(onclick: () => void): Promise<void>; +} + +export class NotifierImpl implements NotifierImpl { + async notifyUpdated(version: string, onclick: () => void): Promise<void> { + const title = `Vim Vixen ${version} has been installed`; + const message = 'Click here to see release notes'; + + const listener = (id: string) => { + if (id !== NOTIFICATION_ID_UPDATE) { + return; + } + onclick(); + browser.notifications.onClicked.removeListener(listener); + }; + browser.notifications.onClicked.addListener(listener); + + await browser.notifications.create(NOTIFICATION_ID_UPDATE, { + 'type': 'basic', + 'iconUrl': browser.extension.getURL('resources/icon_48x48.png'), + title, + message, + }); + } + + async notifyInvalidSettings(onclick: () => void): Promise<void> { + const title = `Loaded settings is invalid`; + // eslint-disable-next-line max-len + const message = 'The default settings is used due to the last saved settings is invalid. Check your current settings from the add-on preference'; + + const listener = (id: string) => { + if (id !== NOTIFICATION_ID_INVALID_SETTINGS) { + return; + } + onclick(); + browser.notifications.onClicked.removeListener(listener); + }; + browser.notifications.onClicked.addListener(listener); + + await browser.notifications.create(NOTIFICATION_ID_INVALID_SETTINGS, { + 'type': 'basic', + 'iconUrl': browser.extension.getURL('resources/icon_48x48.png'), + title, + message, + }); + } +} |