A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.4 KiB
41 lines
1.4 KiB
import { injectable } from 'tsyringe'; |
|
import TabPresenter from '../presenters/TabPresenter'; |
|
import MarkRepository from '../repositories/MarkRepository'; |
|
import ConsoleClient from '../infrastructures/ConsoleClient'; |
|
import ContentMessageClient from '../infrastructures/ContentMessageClient'; |
|
|
|
@injectable() |
|
export default class MarkUseCase { |
|
constructor( |
|
private tabPresenter: TabPresenter, |
|
private markRepository: MarkRepository, |
|
private consoleClient: ConsoleClient, |
|
private contentMessageClient: ContentMessageClient, |
|
) { |
|
} |
|
|
|
async setGlobal(key: string, x: number, y: number): Promise<any> { |
|
let tab = await this.tabPresenter.getCurrent(); |
|
let mark = { tabId: tab.id as number, url: tab.url as string, x, y }; |
|
return this.markRepository.setMark(key, mark); |
|
} |
|
|
|
async jumpGlobal(key: string): Promise<any> { |
|
let current = await this.tabPresenter.getCurrent(); |
|
|
|
let mark = await this.markRepository.getMark(key); |
|
if (!mark) { |
|
return this.consoleClient.showError( |
|
current.id as number, 'Mark is not set'); |
|
} |
|
try { |
|
await this.contentMessageClient.scrollTo(mark.tabId, mark.x, mark.y); |
|
return this.tabPresenter.select(mark.tabId); |
|
} catch (e) { |
|
let tab = await this.tabPresenter.create(mark.url); |
|
return this.markRepository.setMark(key, { |
|
tabId: tab.id as number, url: mark.url, x: mark.x, y: mark.y, |
|
}); |
|
} |
|
} |
|
}
|
|
|