Move some navigation operations to background

This commit is contained in:
Shin'ya Ueoka 2019-05-23 21:30:07 +09:00
parent 07897df636
commit 5a7db96feb
7 changed files with 150 additions and 13 deletions

View file

@ -0,0 +1,29 @@
import { injectable } from 'tsyringe';
import * as messages from '../../shared/messages';
@injectable()
export default class NavigateClient {
async historyNext(tabId: number): Promise<void> {
await browser.tabs.sendMessage(tabId, {
type: messages.NAVIGATE_HISTORY_NEXT,
});
}
async historyPrev(tabId: number): Promise<void> {
await browser.tabs.sendMessage(tabId, {
type: messages.NAVIGATE_HISTORY_PREV,
});
}
async linkNext(tabId: number): Promise<void> {
await browser.tabs.sendMessage(tabId, {
type: messages.NAVIGATE_LINK_NEXT,
});
}
async linkPrev(tabId: number): Promise<void> {
await browser.tabs.sendMessage(tabId, {
type: messages.NAVIGATE_LINK_PREV,
});
}
}

View file

@ -5,6 +5,7 @@ import ConsoleUseCase from '../usecases/ConsoleUseCase';
import TabUseCase from '../usecases/TabUseCase';
import TabSelectUseCase from '../usecases/TabSelectUseCase';
import ZoomUseCase from '../usecases/ZoomUseCase';
import NavigateUseCase from '../usecases/NavigateUseCase';
@injectable()
export default class OperationController {
@ -14,6 +15,7 @@ export default class OperationController {
private tabUseCase: TabUseCase,
private tabSelectUseCase: TabSelectUseCase,
private zoomUseCase: ZoomUseCase,
private navigateUseCase: NavigateUseCase,
) {
}
@ -74,6 +76,14 @@ export default class OperationController {
return this.findUseCase.findStart();
case operations.CANCEL:
return this.consoleUseCase.hideConsole();
case operations.NAVIGATE_HISTORY_PREV:
return this.navigateUseCase.openHistoryPrev();
case operations.NAVIGATE_HISTORY_NEXT:
return this.navigateUseCase.openHistoryNext();
case operations.NAVIGATE_LINK_PREV:
return this.navigateUseCase.openLinkPrev();
case operations.NAVIGATE_LINK_NEXT:
return this.navigateUseCase.openLinkNext();
}
throw new Error('unknown operation: ' + operation.type);
}

View file

@ -0,0 +1,40 @@
import { injectable } from 'tsyringe';
import NavigateClient from '../clients/NavigateClient';
import TabPresenter from '../presenters/TabPresenter';
@injectable()
export default class NavigateUseCase {
constructor(
private tabPresenter: TabPresenter,
private navigateClient: NavigateClient,
) {
}
async openHistoryNext(): Promise<void> {
let tab = await this.tabPresenter.getCurrent();
await this.navigateClient.historyNext(tab.id!!);
}
async openHistoryPrev(): Promise<void> {
let tab = await this.tabPresenter.getCurrent();
await this.navigateClient.historyPrev(tab.id!!);
}
async openLinkNext(): Promise<void> {
let tab = await this.tabPresenter.getCurrent();
await this.navigateClient.linkNext(tab.id!!);
}
async openLinkPrev(): Promise<void> {
let tab = await this.tabPresenter.getCurrent();
await this.navigateClient.linkPrev(tab.id!!);
}
openParent(): Promise<void> {
throw new Error('not implemented');
}
openRoot(): Promise<void> {
throw new Error('not implemented');
}
}