Move some navigation operations to background
This commit is contained in:
parent
07897df636
commit
5a7db96feb
7 changed files with 150 additions and 13 deletions
29
src/background/clients/NavigateClient.ts
Normal file
29
src/background/clients/NavigateClient.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
40
src/background/usecases/NavigateUseCase.ts
Normal file
40
src/background/usecases/NavigateUseCase.ts
Normal 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');
|
||||
}
|
||||
}
|
Reference in a new issue