From 87ed1f43a96a67c4901c267aee96784de1d45889 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 22 Jul 2018 09:30:01 +0900 Subject: Version as Clean Architecture --- src/background/usecases/version.js | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/background/usecases/version.js (limited to 'src/background/usecases/version.js') diff --git a/src/background/usecases/version.js b/src/background/usecases/version.js new file mode 100644 index 0000000..a681bdf --- /dev/null +++ b/src/background/usecases/version.js @@ -0,0 +1,41 @@ +import manifest from '../../../manifest.json'; +import VersionRepository from '../repositories/version'; +import TabRepository from '../repositories/tab'; +import Notifier from '../infrastructures/notifier'; + +export default class VersionInteractor { + constructor() { + this.versionRepository = new VersionRepository(); + this.tabRepository = new TabRepository(); + this.notifier = new Notifier(); + } + + async notifyIfUpdated() { + if (!await this.checkUpdated()) { + return; + } + + let title = 'Vim Vixen ' + manifest.version + ' has been installed'; + let message = 'Click here to see release notes'; + this.notifier.notify(title, message, () => { + let url = this.releaseNoteUrl(manifest.version); + this.tabRepository.create(url); + }); + this.versionRepository.update(manifest.version); + } + + async checkUpdated() { + let prev = await this.versionRepository.get(); + if (!prev) { + return true; + } + return manifest.version !== prev; + } + + releaseNoteUrl(version) { + if (version) { + return 'https://github.com/ueokande/vim-vixen/releases/tag/' + version; + } + return 'https://github.com/ueokande/vim-vixen/releases/'; + } +} -- cgit v1.2.3 From b130fd52681a4e3f381d3d09a48589fc42996a8b Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 22 Jul 2018 11:33:52 +0900 Subject: TabPresenter --- src/background/presenters/tab.js | 5 +++++ src/background/repositories/tab.js | 5 ----- src/background/usecases/version.js | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 src/background/presenters/tab.js delete mode 100644 src/background/repositories/tab.js (limited to 'src/background/usecases/version.js') diff --git a/src/background/presenters/tab.js b/src/background/presenters/tab.js new file mode 100644 index 0000000..8f60535 --- /dev/null +++ b/src/background/presenters/tab.js @@ -0,0 +1,5 @@ +export default class TabPresenter { + create(url) { + browser.tabs.create({ url, }); + } +} diff --git a/src/background/repositories/tab.js b/src/background/repositories/tab.js deleted file mode 100644 index 16989e1..0000000 --- a/src/background/repositories/tab.js +++ /dev/null @@ -1,5 +0,0 @@ -export default class TabRepository { - create(url) { - browser.tabs.create({ url, }); - } -} diff --git a/src/background/usecases/version.js b/src/background/usecases/version.js index a681bdf..a71f90d 100644 --- a/src/background/usecases/version.js +++ b/src/background/usecases/version.js @@ -1,12 +1,12 @@ import manifest from '../../../manifest.json'; import VersionRepository from '../repositories/version'; -import TabRepository from '../repositories/tab'; +import TabPresenter from '../presenters/tab'; import Notifier from '../infrastructures/notifier'; export default class VersionInteractor { constructor() { this.versionRepository = new VersionRepository(); - this.tabRepository = new TabRepository(); + this.tabPresenter = new TabPresenter(); this.notifier = new Notifier(); } @@ -19,7 +19,7 @@ export default class VersionInteractor { let message = 'Click here to see release notes'; this.notifier.notify(title, message, () => { let url = this.releaseNoteUrl(manifest.version); - this.tabRepository.create(url); + this.tabPresenter.create(url); }); this.versionRepository.update(manifest.version); } -- cgit v1.2.3