From a1e5e97200bd96ba918744dfa2758f977ca823c6 Mon Sep 17 00:00:00 2001
From: Shin'ya Ueoka <ueokande@i-beam.org>
Date: Sun, 22 Jul 2018 00:01:24 +0900
Subject: Find as clean architecture

---
 src/background/components/background.js                |  7 -------
 src/background/controllers/find.js                     | 15 +++++++++++++++
 .../infrastructures/content-message-listener.js        | 14 ++++++++++++++
 src/background/repositories/find.js                    | 18 ++++++++++++++++++
 src/background/usecases/find.js                        | 15 +++++++++++++++
 5 files changed, 62 insertions(+), 7 deletions(-)
 create mode 100644 src/background/controllers/find.js
 create mode 100644 src/background/repositories/find.js
 create mode 100644 src/background/usecases/find.js

diff --git a/src/background/components/background.js b/src/background/components/background.js
index 9ba733d..3667f14 100644
--- a/src/background/components/background.js
+++ b/src/background/components/background.js
@@ -1,6 +1,5 @@
 import messages from 'shared/messages';
 import * as commandActions from 'background/actions/command';
-import * as findActions from 'background/actions/find';
 import * as tabActions from 'background/actions/tab';
 
 export default class BackgroundComponent {
@@ -21,7 +20,6 @@ export default class BackgroundComponent {
 
   onMessage(message, sender) {
     let settings = this.store.getState().setting;
-    let find = this.store.getState().find;
 
     switch (message.type) {
     case messages.OPEN_URL:
@@ -37,11 +35,6 @@ export default class BackgroundComponent {
         commandActions.exec(sender.tab, message.text, settings.value),
       );
       return this.broadcastSettingsChanged();
-    case messages.FIND_GET_KEYWORD:
-      return Promise.resolve(find.keyword);
-    case messages.FIND_SET_KEYWORD:
-      this.store.dispatch(findActions.setKeyword(message.keyword));
-      return Promise.resolve({});
     }
   }
 
diff --git a/src/background/controllers/find.js b/src/background/controllers/find.js
new file mode 100644
index 0000000..7096014
--- /dev/null
+++ b/src/background/controllers/find.js
@@ -0,0 +1,15 @@
+import FindInteractor from '../usecases/find';
+
+export default class FindController {
+  constructor() {
+    this.findInteractor = new FindInteractor();
+  }
+
+  getKeyword() {
+    return this.findInteractor.getKeyword();
+  }
+
+  setKeyword(keyword) {
+    return this.findInteractor.setKeyword(keyword);
+  }
+}
diff --git a/src/background/infrastructures/content-message-listener.js b/src/background/infrastructures/content-message-listener.js
index 6236f1c..00dba51 100644
--- a/src/background/infrastructures/content-message-listener.js
+++ b/src/background/infrastructures/content-message-listener.js
@@ -1,11 +1,13 @@
 import messages from '../../shared/messages';
 import CompletionsController from '../controllers/completions';
 import SettingController from '../controllers/setting';
+import FindController from '../controllers/find';
 
 export default class ContentMessageListener {
   constructor() {
     this.settingController = new SettingController();
     this.completionsController = new CompletionsController();
+    this.findController = new FindController();
   }
 
   run() {
@@ -29,6 +31,10 @@ export default class ContentMessageListener {
       return this.onSettingsQuery();
     case messages.SETTINGS_RELOAD:
       return this.onSettingsReload();
+    case messages.FIND_GET_KEYWORD:
+      return this.onFindGetKeyword();
+    case messages.FIND_SET_KEYWORD:
+      return this.onFindSetKeyword(message.keyword);
     }
   }
 
@@ -44,4 +50,12 @@ export default class ContentMessageListener {
   onSettingsReload() {
     return this.settingController.reload();
   }
+
+  onFindGetKeyword() {
+    return this.findController.getKeyword();
+  }
+
+  onFindSetKeyword(keyword) {
+    return this.findController.setKeyword(keyword);
+  }
 }
diff --git a/src/background/repositories/find.js b/src/background/repositories/find.js
new file mode 100644
index 0000000..9482e78
--- /dev/null
+++ b/src/background/repositories/find.js
@@ -0,0 +1,18 @@
+import MemoryStorage from '../infrastructures/memory-storage';
+
+const FIND_KEYWORD_KEY = 'find-keyword';
+
+export default class FindRepository {
+  constructor() {
+    this.cache = new MemoryStorage();
+  }
+
+  getKeyword() {
+    return Promise.resolve(this.cache.get(FIND_KEYWORD_KEY));
+  }
+
+  setKeyword(keyword) {
+    return this.cache.set(FIND_KEYWORD_KEY, keyword);
+  }
+}
+
diff --git a/src/background/usecases/find.js b/src/background/usecases/find.js
new file mode 100644
index 0000000..eae480d
--- /dev/null
+++ b/src/background/usecases/find.js
@@ -0,0 +1,15 @@
+import FindRepository from '../repositories/find';
+
+export default class FindInteractor {
+  constructor() {
+    this.findRepository = new FindRepository();
+  }
+
+  getKeyword() {
+    return this.findRepository.getKeyword();
+  }
+
+  setKeyword(keyword) {
+    return this.findRepository.setKeyword(keyword);
+  }
+}
-- 
cgit v1.2.3