diff --git a/src/org/wanxp/douban/data/model/HandleContext.ts b/src/org/wanxp/douban/data/model/HandleContext.ts index cf930cc..0af1ee8 100644 --- a/src/org/wanxp/douban/data/model/HandleContext.ts +++ b/src/org/wanxp/douban/data/model/HandleContext.ts @@ -1,15 +1,15 @@ -import {SearchHandleMode} from "../../../constant/Constsant"; -import {Editor} from "obsidian"; -import { DoubanPluginSetting } from "../../setting/model/DoubanPluginSetting"; -import UserComponent from "../../user/UserComponent"; -import NetFileHandler from "src/org/wanxp/net/NetFileHandler"; import DoubanPlugin from "../../../main"; -import SyncStatusHolder from "../../sync/model/SyncStatusHolder"; -import {SyncConfig} from "../../sync/model/SyncConfig"; +import { DoubanPluginSetting } from "../../setting/model/DoubanPluginSetting"; import DoubanSubject from "./DoubanSubject"; +import {Editor} from "obsidian"; import GlobalStatusHolder from "../../model/GlobalStatusHolder"; -import {SearchResultsPage} from "schema-dts"; +import NetFileHandler from "src/org/wanxp/net/NetFileHandler"; +import {SearchHandleMode} from "../../../constant/Constsant"; import {SearchPageInfo} from "./SearchPageInfo"; +import {SearchResultsPage} from "schema-dts"; +import {SyncConfig} from "../../sync/model/SyncConfig"; +import SyncStatusHolder from "../../sync/model/SyncStatusHolder"; +import UserComponent from "../../user/UserComponent"; export default interface HandleContext { plugin:DoubanPlugin; @@ -24,5 +24,6 @@ export default interface HandleContext { syncConfig?: SyncConfig; listItem?:DoubanSubject; - searchPage:SearchPageInfo; + searchPage?:SearchPageInfo; + } diff --git a/src/org/wanxp/douban/data/model/SearchPage.ts b/src/org/wanxp/douban/data/model/SearchPage.ts index eca44d7..dd874af 100644 --- a/src/org/wanxp/douban/data/model/SearchPage.ts +++ b/src/org/wanxp/douban/data/model/SearchPage.ts @@ -5,13 +5,12 @@ export class SearchPage extends SearchPageInfo{ private _list:any[]; - constructor(total: number, pageNum: number, pageSize: number, hasNext: boolean, list: any[]) { - super(total, pageNum, pageSize, hasNext); + constructor(total: number, pageNum: number, pageSize: number, list: any[]) { + super(total, pageNum, pageSize); this._list = list; } public get list() { return this._list; } - } diff --git a/src/org/wanxp/douban/data/model/SearchPageInfo.ts b/src/org/wanxp/douban/data/model/SearchPageInfo.ts index c430432..4825c71 100644 --- a/src/org/wanxp/douban/data/model/SearchPageInfo.ts +++ b/src/org/wanxp/douban/data/model/SearchPageInfo.ts @@ -1,25 +1,23 @@ export class SearchPageInfo { private _total: number; - private _hasNext: boolean; private _pageSize: number; private _pageNum: number; + + private _hasNext: boolean; - constructor(total: number, pageNum: number, pageSize: number, hasNext: boolean) { + constructor(total: number, pageNum: number, pageSize: number) { this._total = total; this._pageNum = pageNum; this._pageSize = pageSize; - this._hasNext = hasNext; + this._hasNext = ((pageNum + 1) * pageSize) < total; } public nextPage(): SearchPageInfo { if (!this._hasNext) { return this; } - if (((this._pageNum + 1) * this._pageSize) > this.total) { - return this; - } return new SearchPageInfo(this.total, this._pageNum + 1, - this._pageSize, ((this._pageNum + 2) * this._pageSize) > this.total); + this._pageSize); } public previousPage(): SearchPageInfo { @@ -27,7 +25,7 @@ export class SearchPageInfo { return this; } return new SearchPageInfo(this.total, this._pageNum - 1, - this._pageSize, true); + this._pageSize); } diff --git a/src/org/wanxp/douban/data/search/DoubanSearchFuzzySuggestModal.ts b/src/org/wanxp/douban/data/search/DoubanSearchFuzzySuggestModal.ts index eecae21..30d00fa 100644 --- a/src/org/wanxp/douban/data/search/DoubanSearchFuzzySuggestModal.ts +++ b/src/org/wanxp/douban/data/search/DoubanSearchFuzzySuggestModal.ts @@ -1,21 +1,23 @@ -import {FuzzySuggestModal, request, RequestUrlParam} from "obsidian"; +import { + DoubanSearchResultSubjectNextPage, + DoubanSearchResultSubjectNextPageNeedLogin, + DoubanSearchResultSubjectPreviousPage, + NavigateType +} from "../../../constant/Constsant"; +import {FuzzySuggestModal, RequestUrlParam, request} from "obsidian"; import DoubanPlugin from "../../../main"; import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject"; -import {log} from "src/org/wanxp/utils/Logutil"; -import {i18nHelper} from "../../../lang/helper"; import HandleContext from "../model/HandleContext"; -import {init} from "cjs-module-lexer"; -import { - DoubanSearchResultSubjectNextPage, - DoubanSearchResultSubjectNextPageNeedLogin, DoubanSearchResultSubjectPreviousPage, NavigateType -} from "../../../constant/Constsant"; -import {SearchPageInfo} from "../model/SearchPageInfo"; -import {flat} from "builtin-modules"; -import User from "../../user/User"; -import {load} from "cheerio"; -import Searcher from "./Search"; import {SearchPage} from "../model/SearchPage"; +import {SearchPageInfo} from "../model/SearchPageInfo"; +import Searcher from "./Search"; +import User from "../../user/User"; +import {flat} from "builtin-modules"; +import {i18nHelper} from "../../../lang/helper"; +import {init} from "cjs-module-lexer"; +import {load} from "cheerio"; +import {log} from "src/org/wanxp/utils/Logutil"; export {DoubanFuzzySuggester} @@ -52,9 +54,9 @@ class DoubanFuzzySuggester extends FuzzySuggestModal return item.type == "navigate"; } - onChooseItem(item: DoubanSearchResultSubject, evt: MouseEvent | KeyboardEvent): void { + async onChooseItem(item: DoubanSearchResultSubject, evt: MouseEvent | KeyboardEvent):Promise { if(this.isNavigate(item)) { - if (this.handleNavigate(item)) { + if (await this.handleNavigate(item)) { this.start(); } return; @@ -84,9 +86,12 @@ class DoubanFuzzySuggester extends FuzzySuggestModal log.warn(i18nHelper.getMessage("140304")); break; } - const searchPageResult:SearchPage = await Searcher.loadSearchItem(this.searchItem, currentPage.start, this.plugin.settings, this.plugin.settingsManager); - this.updatePageResult(searchPageResult); - this.context.searchPage = new SearchPageInfo(searchPageResult.total, currentPage.pageNum, searchPageResult.pageSize, searchPageResult.hasNext); + if (result) { + const searchPageResult: SearchPage = + await Searcher.loadSearchItem(this.searchItem, currentPage.start, this.plugin.settings, this.plugin.settingsManager); + this.updatePageResult(searchPageResult); + this.context.searchPage = new SearchPageInfo(searchPageResult.total, currentPage.pageNum, searchPageResult.pageSize); + } return result; } diff --git a/src/org/wanxp/douban/data/search/Search.ts b/src/org/wanxp/douban/data/search/Search.ts index 832f25f..6827fd3 100644 --- a/src/org/wanxp/douban/data/search/Search.ts +++ b/src/org/wanxp/douban/data/search/Search.ts @@ -1,15 +1,15 @@ +import {RequestUrlParam, request, requestUrl} from "obsidian"; -import DoubanSearchResultSubject from '../model/DoubanSearchResultSubject'; -import SearchParserHandler from './SearchParser'; -import {log} from 'src/org/wanxp/utils/Logutil'; -import {request, requestUrl, RequestUrlParam} from "obsidian"; -import {i18nHelper} from "../../../lang/helper"; -import {load} from 'cheerio'; -import {DoubanPluginSetting} from "../../setting/model/DoubanPluginSetting"; import {DEFAULT_SETTINGS} from "../../../constant/DefaultSettings"; +import {DoubanPluginSetting} from "../../setting/model/DoubanPluginSetting"; +import DoubanSearchResultSubject from '../model/DoubanSearchResultSubject'; +import {SearchPage} from "../model/SearchPage"; +import SearchParserHandler from './SearchParser'; import SettingsManager from "../../setting/SettingsManager"; import User from "../../user/User"; -import {SearchPage} from "../model/SearchPage"; +import {i18nHelper} from "../../../lang/helper"; +import {load} from 'cheerio'; +import {log} from 'src/org/wanxp/utils/Logutil'; export default class Searcher { static search(searchItem: string, doubanSettings: DoubanPluginSetting, settingsManager:SettingsManager): Promise { @@ -48,9 +48,10 @@ export default class Searcher { if (doubanSettings.loginCookiesContent) { myHeaders.Cookie = doubanSettings.loginCookiesContent } - log.debug("请求更多页面"); + const url:string = `https://www.douban.com/j/search?q=${searchItem}&start=${start}&subtype=item`; + log.debug(`请求更多页面:${url}`); let requestUrlParam: RequestUrlParam = { - url: `https://www.douban.com/j/search?q=${searchItem}&start=${start}&subtype=item`, + url: url, method: "GET", headers: myHeaders, throw: true diff --git a/src/org/wanxp/douban/data/search/SearchParser.ts b/src/org/wanxp/douban/data/search/SearchParser.ts index ec5d47f..7ab51b1 100644 --- a/src/org/wanxp/douban/data/search/SearchParser.ts +++ b/src/org/wanxp/douban/data/search/SearchParser.ts @@ -45,7 +45,7 @@ export default class SearchParserHandler { .map(e => load(e)) .map(e=>this.parseSearch(e)) .map(e => e? e[0]:null); - return new SearchPage(data.total, start / SEARCH_ITEM_PAGE_SIZE, data.limit, data.more, resultList); - }; + return new SearchPage(data.total, start / data.limit, data.limit, resultList); + }; }