feature: search pageable

This commit is contained in:
wanxp 2023-02-16 11:11:44 +08:00
parent e19fbc648c
commit 980fae30ed
6 changed files with 54 additions and 50 deletions

@ -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;
}

@ -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;
}
}

@ -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);
}

@ -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<DoubanSearchResultSubject>
return item.type == "navigate";
}
onChooseItem(item: DoubanSearchResultSubject, evt: MouseEvent | KeyboardEvent): void {
async onChooseItem(item: DoubanSearchResultSubject, evt: MouseEvent | KeyboardEvent):Promise<void> {
if(this.isNavigate(item)) {
if (this.handleNavigate(item)) {
if (await this.handleNavigate(item)) {
this.start();
}
return;
@ -84,9 +86,12 @@ class DoubanFuzzySuggester extends FuzzySuggestModal<DoubanSearchResultSubject>
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;
}

@ -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<DoubanSearchResultSubject[]> {
@ -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

@ -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);
};
}