mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-05 01:28:46 +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 DoubanPlugin from "../../../main";
|
||||||
import SyncStatusHolder from "../../sync/model/SyncStatusHolder";
|
import { DoubanPluginSetting } from "../../setting/model/DoubanPluginSetting";
|
||||||
import {SyncConfig} from "../../sync/model/SyncConfig";
|
|
||||||
import DoubanSubject from "./DoubanSubject";
|
import DoubanSubject from "./DoubanSubject";
|
||||||
|
import {Editor} from "obsidian";
|
||||||
import GlobalStatusHolder from "../../model/GlobalStatusHolder";
|
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 {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 {
|
export default interface HandleContext {
|
||||||
plugin:DoubanPlugin;
|
plugin:DoubanPlugin;
|
||||||
@ -24,5 +24,6 @@ export default interface HandleContext {
|
|||||||
syncConfig?: SyncConfig;
|
syncConfig?: SyncConfig;
|
||||||
listItem?:DoubanSubject;
|
listItem?:DoubanSubject;
|
||||||
|
|
||||||
searchPage:SearchPageInfo;
|
searchPage?:SearchPageInfo;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,13 +5,12 @@ export class SearchPage extends SearchPageInfo{
|
|||||||
private _list:any[];
|
private _list:any[];
|
||||||
|
|
||||||
|
|
||||||
constructor(total: number, pageNum: number, pageSize: number, hasNext: boolean, list: any[]) {
|
constructor(total: number, pageNum: number, pageSize: number, list: any[]) {
|
||||||
super(total, pageNum, pageSize, hasNext);
|
super(total, pageNum, pageSize);
|
||||||
this._list = list;
|
this._list = list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public get list() {
|
public get list() {
|
||||||
return this._list;
|
return this._list;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,25 +1,23 @@
|
|||||||
export class SearchPageInfo {
|
export class SearchPageInfo {
|
||||||
private _total: number;
|
private _total: number;
|
||||||
private _hasNext: boolean;
|
|
||||||
private _pageSize: number;
|
private _pageSize: number;
|
||||||
private _pageNum: number;
|
private _pageNum: number;
|
||||||
|
|
||||||
constructor(total: number, pageNum: number, pageSize: number, hasNext: boolean) {
|
private _hasNext: boolean;
|
||||||
|
|
||||||
|
constructor(total: number, pageNum: number, pageSize: number) {
|
||||||
this._total = total;
|
this._total = total;
|
||||||
this._pageNum = pageNum;
|
this._pageNum = pageNum;
|
||||||
this._pageSize = pageSize;
|
this._pageSize = pageSize;
|
||||||
this._hasNext = hasNext;
|
this._hasNext = ((pageNum + 1) * pageSize) < total;
|
||||||
}
|
}
|
||||||
|
|
||||||
public nextPage(): SearchPageInfo {
|
public nextPage(): SearchPageInfo {
|
||||||
if (!this._hasNext) {
|
if (!this._hasNext) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
if (((this._pageNum + 1) * this._pageSize) > this.total) {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
return new SearchPageInfo(this.total, this._pageNum + 1,
|
return new SearchPageInfo(this.total, this._pageNum + 1,
|
||||||
this._pageSize, ((this._pageNum + 2) * this._pageSize) > this.total);
|
this._pageSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
public previousPage(): SearchPageInfo {
|
public previousPage(): SearchPageInfo {
|
||||||
@ -27,7 +25,7 @@ export class SearchPageInfo {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
return new SearchPageInfo(this.total, this._pageNum - 1,
|
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 DoubanPlugin from "../../../main";
|
||||||
import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject";
|
import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject";
|
||||||
import {log} from "src/org/wanxp/utils/Logutil";
|
|
||||||
import {i18nHelper} from "../../../lang/helper";
|
|
||||||
import HandleContext from "../model/HandleContext";
|
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 {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}
|
export {DoubanFuzzySuggester}
|
||||||
|
|
||||||
@ -52,9 +54,9 @@ class DoubanFuzzySuggester extends FuzzySuggestModal<DoubanSearchResultSubject>
|
|||||||
return item.type == "navigate";
|
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.isNavigate(item)) {
|
||||||
if (this.handleNavigate(item)) {
|
if (await this.handleNavigate(item)) {
|
||||||
this.start();
|
this.start();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -84,9 +86,12 @@ class DoubanFuzzySuggester extends FuzzySuggestModal<DoubanSearchResultSubject>
|
|||||||
log.warn(i18nHelper.getMessage("140304"));
|
log.warn(i18nHelper.getMessage("140304"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
const searchPageResult:SearchPage = await Searcher.loadSearchItem(this.searchItem, currentPage.start, this.plugin.settings, this.plugin.settingsManager);
|
if (result) {
|
||||||
|
const searchPageResult: SearchPage =
|
||||||
|
await Searcher.loadSearchItem(this.searchItem, currentPage.start, this.plugin.settings, this.plugin.settingsManager);
|
||||||
this.updatePageResult(searchPageResult);
|
this.updatePageResult(searchPageResult);
|
||||||
this.context.searchPage = new SearchPageInfo(searchPageResult.total, currentPage.pageNum, searchPageResult.pageSize, searchPageResult.hasNext);
|
this.context.searchPage = new SearchPageInfo(searchPageResult.total, currentPage.pageNum, searchPageResult.pageSize);
|
||||||
|
}
|
||||||
return result;
|
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 {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 SettingsManager from "../../setting/SettingsManager";
|
||||||
import User from "../../user/User";
|
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 {
|
export default class Searcher {
|
||||||
static search(searchItem: string, doubanSettings: DoubanPluginSetting, settingsManager:SettingsManager): Promise<DoubanSearchResultSubject[]> {
|
static search(searchItem: string, doubanSettings: DoubanPluginSetting, settingsManager:SettingsManager): Promise<DoubanSearchResultSubject[]> {
|
||||||
@ -48,9 +48,10 @@ export default class Searcher {
|
|||||||
if (doubanSettings.loginCookiesContent) {
|
if (doubanSettings.loginCookiesContent) {
|
||||||
myHeaders.Cookie = 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 = {
|
let requestUrlParam: RequestUrlParam = {
|
||||||
url: `https://www.douban.com/j/search?q=${searchItem}&start=${start}&subtype=item`,
|
url: url,
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: myHeaders,
|
headers: myHeaders,
|
||||||
throw: true
|
throw: true
|
||||||
|
|||||||
@ -45,7 +45,7 @@ export default class SearchParserHandler {
|
|||||||
.map(e => load(e))
|
.map(e => load(e))
|
||||||
.map(e=>this.parseSearch(e))
|
.map(e=>this.parseSearch(e))
|
||||||
.map(e => e? e[0]:null);
|
.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