import {App} from "obsidian"; import DoubanBookLoadHandler from "./DoubanBookLoadHandler"; import DoubanMovieLoadHandler from "./DoubanMovieLoadHandler"; import DoubanMusicLoadHandler from "./DoubanMusicLoadHandler"; import DoubanNoteLoadHandler from "./DoubanNoteLoadHandler"; import DoubanOtherLoadHandler from "./DoubanOtherLoadHandler"; import DoubanPlugin from "main"; import DoubanSubject from "../model/DoubanSubject"; import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler"; import {DoubanTeleplayLoadHandler} from "./DoubanTeleplayLoadHandler"; import DoubanGameLoadHandler from "./DoubanGameLoadHandler"; import HandleContext from "@App/data/model/HandleContext"; import HandleResult from "@App/data/model/HandleResult"; export class DoubanSearchChooseItemHandler { private _app: App; private _doubanPlugin: DoubanPlugin; private _doubanSubjectHandlers: DoubanSubjectLoadHandler[]; private _doubanSubjectHandlerDefault: DoubanSubjectLoadHandler; constructor(app: App, doubanPlugin: DoubanPlugin) { this._app = app; this._doubanPlugin = doubanPlugin; this._doubanSubjectHandlerDefault = new DoubanOtherLoadHandler(doubanPlugin); this._doubanSubjectHandlers = [new DoubanMovieLoadHandler(doubanPlugin), new DoubanBookLoadHandler(doubanPlugin), new DoubanTeleplayLoadHandler(doubanPlugin), new DoubanMusicLoadHandler(doubanPlugin), new DoubanNoteLoadHandler(doubanPlugin), new DoubanGameLoadHandler(doubanPlugin), this._doubanSubjectHandlerDefault]; } public handle(searchExtract: DoubanSubject, context: HandleContext): void { if (!searchExtract) { return; } let doubanSubjectHandlers: DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers .filter(h => h.support(searchExtract)); if (doubanSubjectHandlers && doubanSubjectHandlers.length > 0) { doubanSubjectHandlers[0].handle(searchExtract.url, context); } else { this._doubanSubjectHandlerDefault.handle(searchExtract.url, context); } } public async parseText(extract: DoubanSubject, context: HandleContext): Promise { let doubanSubjectHandlers: DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers .filter(h => h.support(extract)); let result:string=''; if (doubanSubjectHandlers && doubanSubjectHandlers.length > 0) { let result = await doubanSubjectHandlers.map(h => h.parse(extract, context)); if (result && result.length > 0) { return result[0]; } else { return {content: ''}; } } else { return this._doubanSubjectHandlerDefault.parse(extract, context); } } }