Repeat open, tabopen and winopen command
This commit is contained in:
parent
a2ee6897bf
commit
48e005dc82
7 changed files with 93 additions and 4 deletions
|
@ -105,6 +105,9 @@ export default class OperationController {
|
|||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
case operations.INTERNAL_OPEN_URL:
|
||||
return this.tabUseCase.openURL(
|
||||
operation.url, operation.newTab, operation.newWindow);
|
||||
}
|
||||
throw new Error('unknown operation: ' + operation.type);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { injectable } from 'tsyringe';
|
||||
import * as operations from '../../shared/operations';
|
||||
import * as parsers from './parsers';
|
||||
import * as urls from '../../shared/urls';
|
||||
import TabPresenter from '../presenters/TabPresenter';
|
||||
|
@ -7,6 +8,7 @@ import SettingRepository from '../repositories/SettingRepository';
|
|||
import BookmarkRepository from '../repositories/BookmarkRepository';
|
||||
import ConsoleClient from '../infrastructures/ConsoleClient';
|
||||
import ContentMessageClient from '../infrastructures/ContentMessageClient';
|
||||
import RepeatUseCase from '../usecases/RepeatUseCase';
|
||||
|
||||
@injectable()
|
||||
export default class CommandIndicator {
|
||||
|
@ -17,21 +19,36 @@ export default class CommandIndicator {
|
|||
private bookmarkRepository: BookmarkRepository,
|
||||
private consoleClient: ConsoleClient,
|
||||
private contentMessageClient: ContentMessageClient,
|
||||
private repeatUseCase: RepeatUseCase,
|
||||
) {
|
||||
}
|
||||
|
||||
async open(keywords: string): Promise<browser.tabs.Tab> {
|
||||
let url = await this.urlOrSearch(keywords);
|
||||
this.repeatUseCase.storeLastOperation({
|
||||
type: operations.INTERNAL_OPEN_URL,
|
||||
url,
|
||||
});
|
||||
return this.tabPresenter.open(url);
|
||||
}
|
||||
|
||||
async tabopen(keywords: string): Promise<browser.tabs.Tab> {
|
||||
let url = await this.urlOrSearch(keywords);
|
||||
this.repeatUseCase.storeLastOperation({
|
||||
type: operations.INTERNAL_OPEN_URL,
|
||||
url,
|
||||
newTab: true,
|
||||
});
|
||||
return this.tabPresenter.create(url);
|
||||
}
|
||||
|
||||
async winopen(keywords: string): Promise<browser.windows.Window> {
|
||||
let url = await this.urlOrSearch(keywords);
|
||||
this.repeatUseCase.storeLastOperation({
|
||||
type: operations.INTERNAL_OPEN_URL,
|
||||
url,
|
||||
newWindow: true,
|
||||
});
|
||||
return this.windowPresenter.create(url);
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ export default class RepeatUseCase {
|
|||
case operations.ZOOM_IN:
|
||||
case operations.ZOOM_OUT:
|
||||
case operations.ZOOM_NEUTRAL:
|
||||
case operations.INTERNAL_OPEN_URL:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
import { injectable } from 'tsyringe';
|
||||
import TabPresenter from '../presenters/TabPresenter';
|
||||
import WindowPresenter from '../presenters/WindowPresenter';
|
||||
import BrowserSettingRepository from '../repositories/BrowserSettingRepository';
|
||||
|
||||
@injectable()
|
||||
export default class TabUseCase {
|
||||
constructor(
|
||||
private tabPresenter: TabPresenter,
|
||||
private windowPresenter: WindowPresenter,
|
||||
private browserSettingRepository: BrowserSettingRepository,
|
||||
) {
|
||||
}
|
||||
|
@ -77,4 +79,17 @@ export default class TabUseCase {
|
|||
this.tabPresenter.create(url);
|
||||
}
|
||||
}
|
||||
|
||||
async openURL(
|
||||
url: string, newTab?: boolean, newWindow?: boolean,
|
||||
): Promise<void> {
|
||||
if (newWindow) {
|
||||
await this.windowPresenter.create(url);
|
||||
} else if (newTab) {
|
||||
await this.tabPresenter.create(url);
|
||||
} else {
|
||||
let tab = await this.tabPresenter.getCurrent();
|
||||
await this.tabPresenter.open(url, tab.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue