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');
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ import MarkKeyController from './controllers/MarkKeyController';
|
|||
import AddonEnabledController from './controllers/AddonEnabledController';
|
||||
import SettingController from './controllers/SettingController';
|
||||
import ConsoleFrameController from './controllers/ConsoleFrameController';
|
||||
import NavigateController from './controllers/NavigateController';
|
||||
import * as messages from '../shared/messages';
|
||||
|
||||
type Message = messages.Message;
|
||||
|
@ -33,6 +34,7 @@ export default class Application {
|
|||
private addonEnabledController: AddonEnabledController,
|
||||
private settingController: SettingController,
|
||||
private consoleFrameController: ConsoleFrameController,
|
||||
private navigateController: NavigateController,
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -98,6 +100,14 @@ export default class Application {
|
|||
return this.settingController.reloadSettings(msg);
|
||||
case messages.ADDON_TOGGLE_ENABLED:
|
||||
return this.addonEnabledUseCase.toggle();
|
||||
case messages.NAVIGATE_HISTORY_NEXT:
|
||||
return this.navigateController.openHistoryNext(msg);
|
||||
case messages.NAVIGATE_HISTORY_PREV:
|
||||
return this.navigateController.openHistoryPrev(msg);
|
||||
case messages.NAVIGATE_LINK_NEXT:
|
||||
return this.navigateController.openLinkNext(msg);
|
||||
case messages.NAVIGATE_LINK_PREV:
|
||||
return this.navigateController.openLinkPrev(msg);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -84,18 +84,6 @@ export default class KeymapController {
|
|||
case operations.MARK_JUMP_PREFIX:
|
||||
this.markKeyUseCase.enableJumpMode();
|
||||
break;
|
||||
case operations.NAVIGATE_HISTORY_PREV:
|
||||
this.navigateUseCase.openHistoryPrev();
|
||||
break;
|
||||
case operations.NAVIGATE_HISTORY_NEXT:
|
||||
this.navigateUseCase.openHistoryNext();
|
||||
break;
|
||||
case operations.NAVIGATE_LINK_PREV:
|
||||
this.navigateUseCase.openLinkPrev();
|
||||
break;
|
||||
case operations.NAVIGATE_LINK_NEXT:
|
||||
this.navigateUseCase.openLinkNext();
|
||||
break;
|
||||
case operations.NAVIGATE_PARENT:
|
||||
this.navigateUseCase.openParent();
|
||||
break;
|
||||
|
|
31
src/content/controllers/NavigateController.ts
Normal file
31
src/content/controllers/NavigateController.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
import { injectable } from 'tsyringe';
|
||||
import { Message } from '../../shared/messages';
|
||||
import NavigateUseCase from '../usecases/NavigateUseCase';
|
||||
|
||||
@injectable()
|
||||
export default class NavigateController {
|
||||
constructor(
|
||||
private navigateUseCase: NavigateUseCase,
|
||||
) {
|
||||
}
|
||||
|
||||
openHistoryNext(_m: Message): Promise<void> {
|
||||
this.navigateUseCase.openHistoryNext();
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
openHistoryPrev(_m: Message): Promise<void> {
|
||||
this.navigateUseCase.openHistoryPrev();
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
openLinkNext(_m: Message): Promise<void> {
|
||||
this.navigateUseCase.openLinkNext();
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
openLinkPrev(_m: Message): Promise<void> {
|
||||
this.navigateUseCase.openLinkPrev();
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
|
@ -42,6 +42,11 @@ export const SETTINGS_QUERY = 'settings.query';
|
|||
|
||||
export const CONSOLE_FRAME_MESSAGE = 'console.frame.message';
|
||||
|
||||
export const NAVIGATE_HISTORY_NEXT = 'navigate.history.next';
|
||||
export const NAVIGATE_HISTORY_PREV = 'navigate.history.prev';
|
||||
export const NAVIGATE_LINK_NEXT = 'navigate.link.next';
|
||||
export const NAVIGATE_LINK_PREV = 'navigate.link.prev';
|
||||
|
||||
export interface BackgroundOperationMessage {
|
||||
type: typeof BACKGROUND_OPERATION;
|
||||
operation: operations.Operation;
|
||||
|
@ -204,6 +209,22 @@ export interface ConsoleFrameMessageMessage {
|
|||
message: any;
|
||||
}
|
||||
|
||||
export interface NavigateHistoryNextMessage {
|
||||
type: typeof NAVIGATE_HISTORY_NEXT;
|
||||
}
|
||||
|
||||
export interface NavigateHistoryPrevMessage {
|
||||
type: typeof NAVIGATE_HISTORY_PREV;
|
||||
}
|
||||
|
||||
export interface NavigateLinkNext {
|
||||
type: typeof NAVIGATE_LINK_NEXT;
|
||||
}
|
||||
|
||||
export interface NavigateLinkPrev {
|
||||
type: typeof NAVIGATE_LINK_PREV;
|
||||
}
|
||||
|
||||
export type Message =
|
||||
BackgroundOperationMessage |
|
||||
ConsoleUnfocusMessage |
|
||||
|
@ -236,7 +257,11 @@ export type Message =
|
|||
OpenUrlMessage |
|
||||
SettingsChangedMessage |
|
||||
SettingsQueryMessage |
|
||||
ConsoleFrameMessageMessage;
|
||||
ConsoleFrameMessageMessage |
|
||||
NavigateHistoryNextMessage |
|
||||
NavigateHistoryPrevMessage |
|
||||
NavigateLinkNext |
|
||||
NavigateLinkPrev;
|
||||
|
||||
// eslint-disable-next-line complexity
|
||||
export const valueOf = (o: any): Message => {
|
||||
|
@ -272,6 +297,10 @@ export const valueOf = (o: any): Message => {
|
|||
case SETTINGS_CHANGED:
|
||||
case SETTINGS_QUERY:
|
||||
case CONSOLE_FRAME_MESSAGE:
|
||||
case NAVIGATE_HISTORY_NEXT:
|
||||
case NAVIGATE_HISTORY_PREV:
|
||||
case NAVIGATE_LINK_NEXT:
|
||||
case NAVIGATE_LINK_PREV:
|
||||
return o;
|
||||
}
|
||||
throw new Error('unknown operation type: ' + o.type);
|
||||
|
|
Reference in a new issue