aboutsummaryrefslogtreecommitdiff
path: root/src/background/usecases
diff options
context:
space:
mode:
Diffstat (limited to 'src/background/usecases')
-rw-r--r--src/background/usecases/CommandUseCase.ts10
-rw-r--r--src/background/usecases/CompletionsUseCase.ts10
-rw-r--r--src/background/usecases/SettingUseCase.ts45
-rw-r--r--src/background/usecases/VersionUseCase.ts8
4 files changed, 41 insertions, 32 deletions
diff --git a/src/background/usecases/CommandUseCase.ts b/src/background/usecases/CommandUseCase.ts
index fcb898d..7dba664 100644
--- a/src/background/usecases/CommandUseCase.ts
+++ b/src/background/usecases/CommandUseCase.ts
@@ -1,11 +1,11 @@
-import { injectable } from 'tsyringe';
+import { injectable, inject } from 'tsyringe';
import * as operations from '../../shared/operations';
import * as parsers from './parsers';
import * as urls from '../../shared/urls';
import TabPresenter from '../presenters/TabPresenter';
import WindowPresenter from '../presenters/WindowPresenter';
import HelpPresenter from '../presenters/HelpPresenter';
-import SettingRepository from '../repositories/SettingRepository';
+import CachedSettingRepository from '../repositories/CachedSettingRepository';
import BookmarkRepository from '../repositories/BookmarkRepository';
import ConsoleClient from '../infrastructures/ConsoleClient';
import ContentMessageClient from '../infrastructures/ContentMessageClient';
@@ -17,7 +17,7 @@ export default class CommandIndicator {
private tabPresenter: TabPresenter,
private windowPresenter: WindowPresenter,
private helpPresenter: HelpPresenter,
- private settingRepository: SettingRepository,
+ @inject("CachedSettingRepository") private cachedSettingRepository: CachedSettingRepository,
private bookmarkRepository: BookmarkRepository,
private consoleClient: ConsoleClient,
private contentMessageClient: ContentMessageClient,
@@ -133,7 +133,7 @@ export default class CommandIndicator {
return;
}
const [name, value] = parsers.parseSetOption(keywords);
- await this.settingRepository.setProperty(name, value);
+ await this.cachedSettingRepository.setProperty(name, value);
return this.contentMessageClient.broadcastSettingsChanged();
}
@@ -143,7 +143,7 @@ export default class CommandIndicator {
}
private async urlOrSearch(keywords: string): Promise<any> {
- const settings = await this.settingRepository.get();
+ const settings = await this.cachedSettingRepository.get();
return urls.searchUrl(keywords, settings.search);
}
}
diff --git a/src/background/usecases/CompletionsUseCase.ts b/src/background/usecases/CompletionsUseCase.ts
index 779c61d..9874644 100644
--- a/src/background/usecases/CompletionsUseCase.ts
+++ b/src/background/usecases/CompletionsUseCase.ts
@@ -1,9 +1,9 @@
-import { injectable } from 'tsyringe';
+import { injectable, inject } from 'tsyringe';
import CompletionGroup from '../domains/CompletionGroup';
import CommandDocs from '../domains/CommandDocs';
import CompletionsRepository from '../repositories/CompletionsRepository';
import * as filters from './filters';
-import SettingRepository from '../repositories/SettingRepository';
+import CachedSettingRepository from '../repositories/CachedSettingRepository';
import TabPresenter from '../presenters/TabPresenter';
import Properties from '../../shared/settings/Properties';
@@ -17,7 +17,7 @@ export default class CompletionsUseCase {
constructor(
private tabPresenter: TabPresenter,
private completionsRepository: CompletionsRepository,
- private settingRepository: SettingRepository,
+ @inject("CachedSettingRepository") private cachedSettingRepository: CachedSettingRepository,
) {
}
@@ -41,7 +41,7 @@ export default class CompletionsUseCase {
// TODO This logic contains view entities. They should be defined on
// content script
- const settings = await this.settingRepository.get();
+ const settings = await this.cachedSettingRepository.get();
const groups: CompletionGroup[] = [];
const complete = settings.properties.complete;
@@ -180,7 +180,7 @@ export default class CompletionsUseCase {
}
async querySearchEngineItems(name: string, keywords: string) {
- const settings = await this.settingRepository.get();
+ const settings = await this.cachedSettingRepository.get();
const engines = Object.keys(settings.search.engines)
.filter(key => key.startsWith(keywords));
return engines.map(key => ({
diff --git a/src/background/usecases/SettingUseCase.ts b/src/background/usecases/SettingUseCase.ts
index d78d440..69b4572 100644
--- a/src/background/usecases/SettingUseCase.ts
+++ b/src/background/usecases/SettingUseCase.ts
@@ -1,35 +1,32 @@
-import { injectable } from 'tsyringe';
-import PersistentSettingRepository
- from '../repositories/PersistentSettingRepository';
-import SettingRepository from '../repositories/SettingRepository';
-import { DefaultSettingData } from '../../shared/SettingData';
+import {inject, injectable} from 'tsyringe';
+import CachedSettingRepository from '../repositories/CachedSettingRepository';
+import SettingData, {DefaultSettingData} from '../../shared/SettingData';
import Settings from '../../shared/settings/Settings';
-import NotifyPresenter from '../presenters/NotifyPresenter';
+import Notifier from '../presenters/Notifier';
+import SettingRepository from "../repositories/SettingRepository";
@injectable()
export default class SettingUseCase {
constructor(
- private persistentSettingRepository: PersistentSettingRepository,
- private settingRepository: SettingRepository,
- private notifyPresenter: NotifyPresenter,
+ @inject("LocalSettingRepository") private localSettingRepository: SettingRepository,
+ @inject("SyncSettingRepository") private syncSettingRepository: SettingRepository,
+ @inject("CachedSettingRepository") private cachedSettingRepository: CachedSettingRepository,
+ @inject("Notifier") private notifier: Notifier,
) {
}
- get(): Promise<Settings> {
- return this.settingRepository.get();
+ getCached(): Promise<Settings> {
+ return this.cachedSettingRepository.get();
}
async reload(): Promise<Settings> {
- let data;
+ let data = DefaultSettingData;
try {
- data = await this.persistentSettingRepository.load();
+ data = await this.loadSettings();
} catch (e) {
this.showUnableToLoad(e);
}
- if (!data) {
- data = DefaultSettingData;
- }
let value: Settings;
try {
@@ -38,13 +35,25 @@ export default class SettingUseCase {
this.showUnableToLoad(e);
value = DefaultSettingData.toSettings();
}
- this.settingRepository.update(value!!);
+ await this.cachedSettingRepository.update(value!!);
return value;
}
+ private async loadSettings(): Promise<SettingData> {
+ const sync = await this.syncSettingRepository.load();
+ if (sync) {
+ return sync;
+ }
+ const local = await this.localSettingRepository.load();
+ if (local) {
+ return local;
+ }
+ return DefaultSettingData;
+ }
+
private showUnableToLoad(e: Error) {
console.error('unable to load settings', e);
- this.notifyPresenter.notifyInvalidSettings(() => {
+ this.notifier.notifyInvalidSettings(() => {
browser.runtime.openOptionsPage();
});
}
diff --git a/src/background/usecases/VersionUseCase.ts b/src/background/usecases/VersionUseCase.ts
index 645c859..9ea8af9 100644
--- a/src/background/usecases/VersionUseCase.ts
+++ b/src/background/usecases/VersionUseCase.ts
@@ -1,19 +1,19 @@
-import { injectable } from 'tsyringe';
+import { injectable, inject } from 'tsyringe';
import TabPresenter from '../presenters/TabPresenter';
-import NotifyPresenter from '../presenters/NotifyPresenter';
+import Notifier from '../presenters/Notifier';
@injectable()
export default class VersionUseCase {
constructor(
private tabPresenter: TabPresenter,
- private notifyPresenter: NotifyPresenter,
+ @inject("Notifier") private notifier: Notifier,
) {
}
notify(): Promise<void> {
const manifest = browser.runtime.getManifest();
const url = this.releaseNoteUrl(manifest.version);
- return this.notifyPresenter.notifyUpdated(manifest.version, () => {
+ return this.notifier.notifyUpdated(manifest.version, () => {
this.tabPresenter.create(url);
});
}