mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-04 08:38:41 +08:00
feature: search pageable
This commit is contained in:
parent
e19fbc648c
commit
980fae30ed
@ -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);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user