diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2020-11-28 10:22:26 +0900 |
---|---|---|
committer | Shin'ya Ueoka <ueokande@i-beam.org> | 2020-12-09 23:08:59 +0900 |
commit | fd2055e2702251c856f60214f150c78d558dcbf7 (patch) | |
tree | a6c69af81645cc064cda960e910383186c2a756c /src/content/usecases | |
parent | d9de67e710adb7849a3d721524174c3f946d79c5 (diff) |
Make HintKeyRepository
Diffstat (limited to 'src/content/usecases')
-rw-r--r-- | src/content/usecases/FollowMasterUseCase.ts | 18 | ||||
-rw-r--r-- | src/content/usecases/HintKeyProducer.ts | 37 |
2 files changed, 8 insertions, 47 deletions
diff --git a/src/content/usecases/FollowMasterUseCase.ts b/src/content/usecases/FollowMasterUseCase.ts index 88c682e..f4705e1 100644 --- a/src/content/usecases/FollowMasterUseCase.ts +++ b/src/content/usecases/FollowMasterUseCase.ts @@ -4,13 +4,10 @@ import FollowMasterRepository from "../repositories/FollowMasterRepository"; import FollowSlaveClient from "../client/FollowSlaveClient"; import FollowSlaveClientFactory from "../client/FollowSlaveClientFactory"; import SettingRepository from "../repositories/SettingRepository"; -import HintKeyProducer from "./HintKeyProducer"; +import HintKeyRepository from "../repositories/HintKeyRepository"; @injectable() export default class FollowMasterUseCase { - // TODO Make repository - private producer: HintKeyProducer | null; - constructor( @inject("FollowKeyRepository") private followKeyRepository: FollowKeyRepository, @@ -22,14 +19,15 @@ export default class FollowMasterUseCase { private settingRepository: SettingRepository, @inject("FollowSlaveClientFactory") - private followSlaveClientFactory: FollowSlaveClientFactory - ) { - this.producer = null; - } + private followSlaveClientFactory: FollowSlaveClientFactory, + + @inject("HintKeyRepository") + private hintKeyRepository: HintKeyRepository + ) {} startFollow(newTab: boolean, background: boolean): void { const hintchars = this.settingRepository.get().properties.hintchars; - this.producer = new HintKeyProducer(hintchars); + this.hintKeyRepository.reset(hintchars); this.followKeyRepository.clearKeys(); this.followMasterRepository.setCurrentFollowMode(newTab, background); @@ -59,7 +57,7 @@ export default class FollowMasterUseCase { createSlaveHints(count: number, sender: Window): void { const produced = []; for (let i = 0; i < count; ++i) { - const tag = this.producer!.produce(); + const tag = this.hintKeyRepository.produce(); produced.push(tag); this.followMasterRepository.addTag(tag); } diff --git a/src/content/usecases/HintKeyProducer.ts b/src/content/usecases/HintKeyProducer.ts deleted file mode 100644 index a5e2877..0000000 --- a/src/content/usecases/HintKeyProducer.ts +++ /dev/null @@ -1,37 +0,0 @@ -export default class HintKeyProducer { - private charset: string; - - private counter: number[]; - - constructor(charset: string) { - if (charset.length === 0) { - throw new TypeError("charset is empty"); - } - - this.charset = charset; - this.counter = []; - } - - produce(): string { - this.increment(); - - return this.counter.map((x) => this.charset[x]).join(""); - } - - private increment(): void { - const max = this.charset.length - 1; - if (this.counter.every((x) => x === max)) { - this.counter = new Array(this.counter.length + 1).fill(0); - return; - } - - this.counter.reverse(); - const len = this.charset.length; - let num = this.counter.reduce((x, y, index) => x + y * len ** index) + 1; - for (let i = 0; i < this.counter.length; ++i) { - this.counter[i] = num % len; - num = ~~(num / len); - } - this.counter.reverse(); - } -} |