mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-06 18:18:45 +08:00
format code style
This commit is contained in:
parent
9278a334c1
commit
a10dfe32b7
42
README.md
42
README.md
@ -1,7 +1,26 @@
|
|||||||
# Obsidian Douban Plugin
|
# Obsidian Douban Plugin
|
||||||
|
|
||||||
[![Version][version-shield]][version-url][![Stargazers][stars-shield]][stars-url][![Issues][issues-shield]][issues-url][![Downloads][downloads-shield]][downloads-url][![Contributors][contributors-shield]][contributors-url]
|
<p align="center">
|
||||||
|
<a href="https://github.com/Wanxp/obsidian-douban/releases/latest">
|
||||||
|
<img src="https://img.shields.io/github/manifest-json/v/Wanxp/obsidian-douban?color=blue">
|
||||||
|
</a>
|
||||||
|
<img src="https://img.shields.io/github/release-date/Wanxp/obsidian-douban">
|
||||||
|
<a href="https://github.com/Wanxp/obsidian-douban/blob/main/LICENSE">
|
||||||
|
<img src="https://img.shields.io/github/license/Wanxp/obsidian-douban">
|
||||||
|
</a>
|
||||||
|
<img src="https://img.shields.io/github/downloads/Wanxp/obsidian-douban/total">
|
||||||
|
<a href="https://github.com/Wanxp/obsidian-douban/issues">
|
||||||
|
<img src="https://img.shields.io/github/issues/Wanxp/obsidian-douban">
|
||||||
|
</a>
|
||||||
|
<br>
|
||||||
|
<img src="https://img.shields.io/tokei/lines/github/Wanxp/obsidian-douban">
|
||||||
|
<a href="https://www.codefactor.io/repository/github/Wanxp/obsidian-douban/stats">
|
||||||
|
<img src="https://img.shields.io/codefactor/grade/github/Wanxp/obsidian-douban">
|
||||||
|
</a>
|
||||||
|
<a href="https://mszturc.github.io/obsidian-advanced-slides/lcov-report/">
|
||||||
|
<img src="https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MSzturc/a2879612aa47b6364392d94cae882c50/raw/obsidian-advanced-slides_coverage.json">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
Import Movies, Books, Music, Teleplay, Note, Game even Broadcast Data from Douban in [Obsidian](https://obsidian.md/)
|
Import Movies, Books, Music, Teleplay, Note, Game even Broadcast Data from Douban in [Obsidian](https://obsidian.md/)
|
||||||
在[Obsidian](https://obsidian.md/)使用并导入豆瓣中的电影/书籍/音乐/电视剧/日记/游戏甚至是广播, 包含评分/发布日期/演员表等信息
|
在[Obsidian](https://obsidian.md/)使用并导入豆瓣中的电影/书籍/音乐/电视剧/日记/游戏甚至是广播, 包含评分/发布日期/演员表等信息
|
||||||
@ -66,22 +85,3 @@ If you want some features or have any questions about this plugin, create issues
|
|||||||
进入Obsidian插件中心重新加载当前插件
|
进入Obsidian插件中心重新加载当前插件
|
||||||
7. Enjoy your develop
|
7. Enjoy your develop
|
||||||
享受开发吧
|
享受开发吧
|
||||||
|
|
||||||
<!-- MARKDOWN LINKS & IMAGES -->
|
|
||||||
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->
|
|
||||||
[contributors-shield]: https://img.shields.io/github/contributors/Wanxp/obsidian-douban
|
|
||||||
[contributors-url]: https://github.com/Wanxp/obsidian-douban/graphs/contributors
|
|
||||||
[forks-shield]: https://img.shields.io/github/forks/Wanxp/obsidian-douban
|
|
||||||
[forks-url]: https://github.com/Wanxp/obsidian-douban/network/members
|
|
||||||
[stars-shield]: https://img.shields.io/github/stars/Wanxp/obsidian-douban
|
|
||||||
[stars-url]: https://github.com/Wanxp/obsidian-douban/stargazers
|
|
||||||
[issues-shield]: https://img.shields.io/github/issues/Wanxp/obsidian-douban
|
|
||||||
[issues-url]: https://github.com/Wanxp/obsidian-douban/issues
|
|
||||||
[license-shield]: https://img.shields.io/github/license/Wanxp/obsidian-douban
|
|
||||||
[license-url]: https://github.com/Wanxp/obsidian-douban/blob/master/LICENSE.txt
|
|
||||||
[product-screenshot]: images/screenshot.png
|
|
||||||
[version-shield]: https://img.shields.io/github/package-json/v/Wanxp/obsidian-douban
|
|
||||||
[version-url]: https://github.com/Wanxp/obsidian-douban/releases/latest
|
|
||||||
|
|
||||||
[downloads-shield]: https://img.shields.io/github/downloads/Wanxp/obsidian-douban/total
|
|
||||||
[downloads-url]: https://github.com/Wanxp/obsidian-douban
|
|
||||||
|
|||||||
@ -28,7 +28,7 @@ export enum PersonNameMode {
|
|||||||
/**
|
/**
|
||||||
* 名称模式选项
|
* 名称模式选项
|
||||||
*/
|
*/
|
||||||
export const PersonNameModeRecords: {[key in PersonNameMode]: string} = {
|
export const PersonNameModeRecords: { [key in PersonNameMode]: string } = {
|
||||||
[PersonNameMode.CH_NAME]: i18nHelper.getMessage('121206'),
|
[PersonNameMode.CH_NAME]: i18nHelper.getMessage('121206'),
|
||||||
[PersonNameMode.EN_NAME]: i18nHelper.getMessage('121207'),
|
[PersonNameMode.EN_NAME]: i18nHelper.getMessage('121207'),
|
||||||
[PersonNameMode.CH_EN_NAME]: i18nHelper.getMessage('121208'),
|
[PersonNameMode.CH_EN_NAME]: i18nHelper.getMessage('121208'),
|
||||||
|
|||||||
@ -1,31 +1,29 @@
|
|||||||
import {PersonNameMode} from "../constant/Constsant";
|
import {PersonNameMode} from "../constant/Constsant";
|
||||||
|
|
||||||
export interface DoubanPluginSettings {
|
export interface DoubanPluginSettings {
|
||||||
movieTemplate:string,
|
movieTemplate: string,
|
||||||
bookTemplate:string,
|
bookTemplate: string,
|
||||||
musicTemplate:string,
|
musicTemplate: string,
|
||||||
noteTemplate:string,
|
noteTemplate: string,
|
||||||
gameTemplate:string,
|
gameTemplate: string,
|
||||||
dateFormat:string,
|
dateFormat: string,
|
||||||
timeFormat:string,
|
timeFormat: string,
|
||||||
searchUrl:string,
|
searchUrl: string,
|
||||||
arraySpilt:string,
|
arraySpilt: string,
|
||||||
searchHeaders?:string,
|
searchHeaders?: string,
|
||||||
personNameMode:PersonNameMode,
|
personNameMode: PersonNameMode,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export const doubanHeaders = {
|
export const doubanHeaders = {
|
||||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||||
"Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
|
"Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
|
||||||
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36",
|
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const DEFAULT_SETTINGS:DoubanPluginSettings = {
|
export const DEFAULT_SETTINGS: DoubanPluginSettings = {
|
||||||
movieTemplate:
|
movieTemplate:
|
||||||
`---
|
`---
|
||||||
doubanId: {{id}}
|
doubanId: {{id}}
|
||||||
title: {{title}}
|
title: {{title}}
|
||||||
type: {{type}}
|
type: {{type}}
|
||||||
@ -44,7 +42,7 @@ desc: {{desc}}
|
|||||||

|

|
||||||
`,
|
`,
|
||||||
bookTemplate:
|
bookTemplate:
|
||||||
`---
|
`---
|
||||||
doubanId: {{id}}
|
doubanId: {{id}}
|
||||||
title: {{title}}
|
title: {{title}}
|
||||||
subTitle: {{subTitle}}
|
subTitle: {{subTitle}}
|
||||||
@ -70,7 +68,7 @@ desc: {{desc}}
|
|||||||
{{menu}}
|
{{menu}}
|
||||||
`,
|
`,
|
||||||
musicTemplate:
|
musicTemplate:
|
||||||
`---
|
`---
|
||||||
doubanId: {{id}}
|
doubanId: {{id}}
|
||||||
title: {{title}}
|
title: {{title}}
|
||||||
type: {{type}}
|
type: {{type}}
|
||||||
@ -90,8 +88,8 @@ desc: {{desc}}
|
|||||||
|
|
||||||

|

|
||||||
`,
|
`,
|
||||||
noteTemplate:
|
noteTemplate:
|
||||||
`---
|
`---
|
||||||
doubanId: {{id}}
|
doubanId: {{id}}
|
||||||
title: {{title}}
|
title: {{title}}
|
||||||
type: {{type}}
|
type: {{type}}
|
||||||
@ -106,7 +104,7 @@ desc: {{desc}}
|
|||||||
{{content}}
|
{{content}}
|
||||||
`,
|
`,
|
||||||
gameTemplate:
|
gameTemplate:
|
||||||
`---
|
`---
|
||||||
doubanId: {{id}}
|
doubanId: {{id}}
|
||||||
title: {{title}}
|
title: {{title}}
|
||||||
aliases: {{aliases}}
|
aliases: {{aliases}}
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { App, PluginSettingTab, Setting } from "obsidian";
|
import {App, PluginSettingTab, Setting} from "obsidian";
|
||||||
import { DEFAULT_SETTINGS } from "./Douban";
|
import {DEFAULT_SETTINGS} from "./Douban";
|
||||||
|
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { i18nHelper } from "src/lang/helper";
|
import {i18nHelper} from "src/lang/helper";
|
||||||
import {PersonNameMode, PersonNameModeRecords} from "../constant/Constsant";
|
import {PersonNameMode, PersonNameModeRecords} from "../constant/Constsant";
|
||||||
|
|
||||||
export class DoubanSettingTab extends PluginSettingTab {
|
export class DoubanSettingTab extends PluginSettingTab {
|
||||||
@ -14,11 +14,11 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
}
|
}
|
||||||
|
|
||||||
display(): void {
|
display(): void {
|
||||||
let { containerEl } = this;
|
let {containerEl} = this;
|
||||||
|
|
||||||
containerEl.empty();
|
containerEl.empty();
|
||||||
|
|
||||||
containerEl.createEl("h2", { text: 'Obsidian Douban' });
|
containerEl.createEl("h2", {text: 'Obsidian Douban'});
|
||||||
|
|
||||||
new Setting(containerEl).setName(i18nHelper.getMessage('120001'))
|
new Setting(containerEl).setName(i18nHelper.getMessage('120001'))
|
||||||
.then((setting) => {
|
.then((setting) => {
|
||||||
@ -116,8 +116,6 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
// }));
|
// }));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
new Setting(containerEl).setName(i18nHelper.getMessage('120201')).then((setting) => {
|
new Setting(containerEl).setName(i18nHelper.getMessage('120201')).then((setting) => {
|
||||||
setting.addTextArea((textarea) => {
|
setting.addTextArea((textarea) => {
|
||||||
setting.descEl.appendChild(
|
setting.descEl.appendChild(
|
||||||
@ -255,7 +253,7 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
dropdwon.addOption(PersonNameMode.EN_NAME, PersonNameModeRecords.EN)
|
dropdwon.addOption(PersonNameMode.EN_NAME, PersonNameModeRecords.EN)
|
||||||
dropdwon.addOption(PersonNameMode.CH_EN_NAME, PersonNameModeRecords.CH_EN)
|
dropdwon.addOption(PersonNameMode.CH_EN_NAME, PersonNameModeRecords.CH_EN)
|
||||||
dropdwon.setValue(this.plugin.settings.personNameMode)
|
dropdwon.setValue(this.plugin.settings.personNameMode)
|
||||||
.onChange(async (value:string) => {
|
.onChange(async (value: string) => {
|
||||||
this.plugin.settings.personNameMode = value as PersonNameMode;
|
this.plugin.settings.personNameMode = value as PersonNameMode;
|
||||||
await this.plugin.saveSettings();
|
await this.plugin.saveSettings();
|
||||||
});
|
});
|
||||||
@ -263,8 +261,6 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
new Setting(containerEl).setName(i18nHelper.getMessage('120501')).then((setting) => {
|
new Setting(containerEl).setName(i18nHelper.getMessage('120501')).then((setting) => {
|
||||||
setting.addMomentFormat((mf) => {
|
setting.addMomentFormat((mf) => {
|
||||||
setting.descEl.appendChild(
|
setting.descEl.appendChild(
|
||||||
@ -286,7 +282,7 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
);
|
);
|
||||||
frag.createEl('br');
|
frag.createEl('br');
|
||||||
frag.appendText(i18nHelper.getMessage('120507') + ': ');
|
frag.appendText(i18nHelper.getMessage('120507') + ': ');
|
||||||
mf.setSampleEl(frag.createEl('b', { cls: 'u-pop' }));
|
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
|
||||||
frag.createEl('br');
|
frag.createEl('br');
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@ -321,7 +317,7 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
);
|
);
|
||||||
frag.createEl('br');
|
frag.createEl('br');
|
||||||
frag.appendText(i18nHelper.getMessage('120507') + ': ');
|
frag.appendText(i18nHelper.getMessage('120507') + ': ');
|
||||||
mf.setSampleEl(frag.createEl('b', { cls: 'u-pop' }));
|
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
|
||||||
frag.createEl('br');
|
frag.createEl('br');
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@ -349,4 +345,4 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import { Notice } from "obsidian";
|
import {Notice} from "obsidian";
|
||||||
|
|
||||||
export const ensureStatusCode = (expected:any) => {
|
export const ensureStatusCode = (expected: any) => {
|
||||||
if (!Array.isArray(expected))
|
if (!Array.isArray(expected))
|
||||||
expected = [expected];
|
expected = [expected];
|
||||||
return (res:any) => {
|
return (res: any) => {
|
||||||
const { statusCode } = res;
|
const {statusCode} = res;
|
||||||
if(!expected.includes(statusCode)) {
|
if (!expected.includes(statusCode)) {
|
||||||
new Notice(`Request Douban failed, Status code must be "${expected}" but actually "${statusCode}"`)
|
new Notice(`Request Douban failed, Status code must be "${expected}" but actually "${statusCode}"`)
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { CheerioAPI } from "cheerio";
|
import {CheerioAPI} from "cheerio";
|
||||||
import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
|
import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
|
||||||
|
|
||||||
export abstract class DoubanBroadcastAbstractHandler<T extends DoubanBroadcastSubject> {
|
export abstract class DoubanBroadcastAbstractHandler<T extends DoubanBroadcastSubject> {
|
||||||
|
|
||||||
abstract support(t:string):boolean;
|
abstract support(t: string): boolean;
|
||||||
|
|
||||||
abstract transform(data:Element, source:CheerioAPI):T;
|
abstract transform(data: Element, source: CheerioAPI): T;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,13 +1,14 @@
|
|||||||
import { CheerioAPI } from "cheerio";
|
import {CheerioAPI} from "cheerio";
|
||||||
import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler";
|
import {DoubanBroadcastAbstractHandler} from "./DoubanBroadcastAbstractHandler";
|
||||||
import DoubanBroadcastMovieSubject from "../model/DoubanBroadcastMoveSubject";
|
import DoubanBroadcastMovieSubject from "../model/DoubanBroadcastMoveSubject";
|
||||||
|
|
||||||
//TODO will support in future version
|
//TODO will support in future version
|
||||||
export class DoubanBroadcastMovieHandler extends DoubanBroadcastAbstractHandler<DoubanBroadcastMovieSubject>{
|
export class DoubanBroadcastMovieHandler extends DoubanBroadcastAbstractHandler<DoubanBroadcastMovieSubject> {
|
||||||
support(t: string): boolean {
|
support(t: string): boolean {
|
||||||
throw new Error("Method not implemented.");
|
throw new Error("Method not implemented.");
|
||||||
}
|
}
|
||||||
transform(data: Element, source:CheerioAPI): DoubanBroadcastMovieSubject {
|
|
||||||
|
transform(data: Element, source: CheerioAPI): DoubanBroadcastMovieSubject {
|
||||||
throw new Error("Method not implemented.");
|
throw new Error("Method not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import { CheerioAPI } from "cheerio";
|
import {CheerioAPI} from "cheerio";
|
||||||
import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler";
|
import {DoubanBroadcastAbstractHandler} from "./DoubanBroadcastAbstractHandler";
|
||||||
import { DoubanBroadcastMovieHandler } from "./DoubanBroadcastMovieHandler";
|
import {DoubanBroadcastMovieHandler} from "./DoubanBroadcastMovieHandler";
|
||||||
import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
|
import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
|
||||||
import DoubanPageBroadcastSubject from "../model/DoubanPageBroadcastSubject";
|
import DoubanPageBroadcastSubject from "../model/DoubanPageBroadcastSubject";
|
||||||
|
|
||||||
//TODO will support in future version
|
//TODO will support in future version
|
||||||
export class DoubanPageBroadcastTransformer {
|
export class DoubanPageBroadcastTransformer {
|
||||||
|
|
||||||
private handlers:DoubanBroadcastAbstractHandler<DoubanBroadcastSubject>[];
|
private handlers: DoubanBroadcastAbstractHandler<DoubanBroadcastSubject>[];
|
||||||
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -17,15 +17,15 @@ export class DoubanPageBroadcastTransformer {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public transform(data: CheerioAPI):DoubanPageBroadcastSubject {
|
public transform(data: CheerioAPI): DoubanPageBroadcastSubject {
|
||||||
let doubanBroadcastSubjects:DoubanBroadcastSubject[] = data('.new-status .status-wrapper')
|
let doubanBroadcastSubjects: DoubanBroadcastSubject[] = data('.new-status .status-wrapper')
|
||||||
.get()
|
.get()
|
||||||
.map(i => this.transformElement(i, data));
|
.map(i => this.transformElement(i, data));
|
||||||
return new DoubanPageBroadcastSubject ();
|
return new DoubanPageBroadcastSubject();
|
||||||
}
|
}
|
||||||
|
|
||||||
public transformElement(element:any, source:CheerioAPI):DoubanBroadcastSubject {
|
public transformElement(element: any, source: CheerioAPI): DoubanBroadcastSubject {
|
||||||
let targetType:string = element.innerHTML;
|
let targetType: string = element.innerHTML;
|
||||||
return this.handlers.filter(h => h.support(targetType))[0].transform(element, source);
|
return this.handlers.filter(h => h.support(targetType))[0].transform(element, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,19 +1,23 @@
|
|||||||
import { CheerioAPI } from 'cheerio';
|
import {CheerioAPI} from 'cheerio';
|
||||||
import DoubanAbstractLoadHandler from 'src/douban/data/handler/DoubanAbstractLoadHandler';
|
import DoubanAbstractLoadHandler from 'src/douban/data/handler/DoubanAbstractLoadHandler';
|
||||||
import DoubanNoteSubject from '../model/DoubanPageBroadcastSubject';
|
import DoubanNoteSubject from '../model/DoubanPageBroadcastSubject';
|
||||||
import DoubanPageBroadcastSubject from '../model/DoubanPageBroadcastSubject';
|
import DoubanPageBroadcastSubject from '../model/DoubanPageBroadcastSubject';
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { DoubanPluginSettings } from "src/douban/Douban";
|
import {DoubanPluginSettings} from "src/douban/Douban";
|
||||||
import DoubanSubject from 'src/douban/data/model/DoubanSubject';
|
import DoubanSubject from 'src/douban/data/model/DoubanSubject';
|
||||||
|
|
||||||
//TODO will support in future version
|
//TODO will support in future version
|
||||||
export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHandler<DoubanPageBroadcastSubject> {
|
export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHandler<DoubanPageBroadcastSubject> {
|
||||||
|
|
||||||
|
constructor(doubanPlugin: DoubanPlugin) {
|
||||||
|
super(doubanPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
getTemplate(settings: DoubanPluginSettings): string {
|
getTemplate(settings: DoubanPluginSettings): string {
|
||||||
return settings.bookTemplate;
|
return settings.bookTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
parseText(beforeContent:string, extract: DoubanNoteSubject, settings:DoubanPluginSettings): string {
|
parseText(beforeContent: string, extract: DoubanNoteSubject, settings: DoubanPluginSettings): string {
|
||||||
return settings.bookTemplate ? null : "";
|
return settings.bookTemplate ? null : "";
|
||||||
// settings.noteTemplate
|
// settings.noteTemplate
|
||||||
// .replaceAll("{{id}}", extract.id)
|
// .replaceAll("{{id}}", extract.id)
|
||||||
@ -28,18 +32,11 @@ export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHan
|
|||||||
// .replaceAll("{{authorUrl}}", extract.authorUrl ? extract.authorUrl : "")
|
// .replaceAll("{{authorUrl}}", extract.authorUrl ? extract.authorUrl : "")
|
||||||
// .replaceAll("{{author}}", extract.author ? extract.author : "")
|
// .replaceAll("{{author}}", extract.author ? extract.author : "")
|
||||||
}
|
}
|
||||||
|
|
||||||
support(extract: DoubanSubject): boolean {
|
support(extract: DoubanSubject): boolean {
|
||||||
return extract && extract.type && (extract.type.contains("广播") || extract.type.contains("Broadcast"));
|
return extract && extract.type && (extract.type.contains("广播") || extract.type.contains("Broadcast"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor(doubanPlugin:DoubanPlugin) {
|
|
||||||
super(doubanPlugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
parseSubjectFromHtml(html: CheerioAPI): DoubanPageBroadcastSubject {
|
parseSubjectFromHtml(html: CheerioAPI): DoubanPageBroadcastSubject {
|
||||||
// return html('.new-status .status-wrapper')
|
// return html('.new-status .status-wrapper')
|
||||||
// .get()
|
// .get()
|
||||||
@ -73,7 +70,7 @@ export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHan
|
|||||||
// };
|
// };
|
||||||
// return result;
|
// return result;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import DoubanBroadcastSubject from "./DoubanBroadcastSubject";
|
import DoubanBroadcastSubject from "./DoubanBroadcastSubject";
|
||||||
|
|
||||||
export default class DoubanBroadcastMovieSubject extends DoubanBroadcastSubject{
|
export default class DoubanBroadcastMovieSubject extends DoubanBroadcastSubject {
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,9 +4,9 @@ export default class DoubanBroadcastSubject {
|
|||||||
title: string;
|
title: string;
|
||||||
desc: string;
|
desc: string;
|
||||||
url: string;
|
url: string;
|
||||||
author:string;
|
author: string;
|
||||||
authorUrl:string;
|
authorUrl: string;
|
||||||
timePublished:Date;
|
timePublished: Date;
|
||||||
image:string;
|
image: string;
|
||||||
content:string;
|
content: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
import {AggregateRating, Person, WithContext} from 'schema-dts';
|
|
||||||
|
|
||||||
import DoubanSubject from 'src/douban/data/model/DoubanSubject';
|
import DoubanSubject from 'src/douban/data/model/DoubanSubject';
|
||||||
|
|
||||||
export default class DoubanPageBroadcastSubject extends DoubanSubject {
|
export default class DoubanPageBroadcastSubject extends DoubanSubject {
|
||||||
pageNumber:number;
|
pageNumber: number;
|
||||||
broadcast:DoubanPageBroadcastSubject[];
|
broadcast: DoubanPageBroadcastSubject[];
|
||||||
pageSize:number;
|
pageSize: number;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,9 +3,9 @@ import {DoubanPluginSettings} from "src/douban/Douban";
|
|||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import DoubanSubject, {DoubanParameter} from '../model/DoubanSubject';
|
import DoubanSubject, {DoubanParameter} from '../model/DoubanSubject';
|
||||||
import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler";
|
import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler";
|
||||||
import {Editor, moment, request, requestUrl, RequestUrlParam, sanitizeHTMLToDom} from "obsidian";
|
import {Editor, moment, request, RequestUrlParam} from "obsidian";
|
||||||
import { i18nHelper } from 'src/lang/helper';
|
import {i18nHelper} from 'src/lang/helper';
|
||||||
import { log } from "src/utils/Logutil";
|
import {log} from "src/utils/Logutil";
|
||||||
import {CheerioAPI, load} from "cheerio";
|
import {CheerioAPI, load} from "cheerio";
|
||||||
import YamlUtil from "../../../utils/YamlUtil";
|
import YamlUtil from "../../../utils/YamlUtil";
|
||||||
import {BasicConst, PersonNameMode, TemplateTextMode} from "../../../constant/Constsant";
|
import {BasicConst, PersonNameMode, TemplateTextMode} from "../../../constant/Constsant";
|
||||||
@ -13,20 +13,20 @@ import {BasicConst, PersonNameMode, TemplateTextMode} from "../../../constant/Co
|
|||||||
export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject> implements DoubanSubjectLoadHandler<T> {
|
export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject> implements DoubanSubjectLoadHandler<T> {
|
||||||
|
|
||||||
|
|
||||||
public doubanPlugin:DoubanPlugin;
|
public doubanPlugin: DoubanPlugin;
|
||||||
|
|
||||||
constructor(doubanPlugin:DoubanPlugin) {
|
constructor(doubanPlugin: DoubanPlugin) {
|
||||||
this.doubanPlugin = doubanPlugin;
|
this.doubanPlugin = doubanPlugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
parse(extract: T, settings:DoubanPluginSettings): string {
|
parse(extract: T, settings: DoubanPluginSettings): string {
|
||||||
let template:string = this.getTemplate(settings);
|
let template: string = this.getTemplate(settings);
|
||||||
let frontMatterStart:number = template.indexOf(BasicConst.YAML_FRONT_MATTER_SYMBOL, 0);
|
let frontMatterStart: number = template.indexOf(BasicConst.YAML_FRONT_MATTER_SYMBOL, 0);
|
||||||
let frontMatterEnd:number = template.indexOf(BasicConst.YAML_FRONT_MATTER_SYMBOL, frontMatterStart + 1);
|
let frontMatterEnd: number = template.indexOf(BasicConst.YAML_FRONT_MATTER_SYMBOL, frontMatterStart + 1);
|
||||||
let frontMatter:string = '';
|
let frontMatter: string = '';
|
||||||
let frontMatterBefore:string = '';
|
let frontMatterBefore: string = '';
|
||||||
let frontMatterAfter:string = '';
|
let frontMatterAfter: string = '';
|
||||||
if(frontMatterStart > -1 && frontMatterEnd > -1) {
|
if (frontMatterStart > -1 && frontMatterEnd > -1) {
|
||||||
frontMatterBefore = template.substring(0, frontMatterStart);
|
frontMatterBefore = template.substring(0, frontMatterStart);
|
||||||
frontMatter = template.substring(frontMatterStart, frontMatterEnd + 3);
|
frontMatter = template.substring(frontMatterStart, frontMatterEnd + 3);
|
||||||
frontMatterAfter = template.substring(frontMatterEnd + 3);
|
frontMatterAfter = template.substring(frontMatterEnd + 3);
|
||||||
@ -40,34 +40,17 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
frontMatter = this.parsePartText(frontMatter, extract, settings, TemplateTextMode.YAML);
|
frontMatter = this.parsePartText(frontMatter, extract, settings, TemplateTextMode.YAML);
|
||||||
}
|
}
|
||||||
return frontMatterBefore + frontMatter + frontMatterAfter;
|
return frontMatterBefore + frontMatter + frontMatterAfter;
|
||||||
}else {
|
} else {
|
||||||
return this.parsePartText(template, extract, settings);
|
return this.parsePartText(template, extract, settings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private parsePartText(template: string, extract: T, settings: DoubanPluginSettings, textMode:TemplateTextMode = TemplateTextMode.NORMAL): string {
|
|
||||||
let resultContent = template
|
|
||||||
.replaceAll(DoubanParameter.ID, extract.id)
|
|
||||||
.replaceAll(DoubanParameter.TITLE, this.handleSpecialContent(extract.title, textMode))
|
|
||||||
.replaceAll(DoubanParameter.TYPE, extract.type)
|
|
||||||
.replaceAll(DoubanParameter.SCORE, this.handleSpecialContent(extract.score))
|
|
||||||
.replaceAll(DoubanParameter.IMAGE, extract.image)
|
|
||||||
.replaceAll(DoubanParameter.URL, extract.url)
|
|
||||||
.replaceAll(DoubanParameter.DESC, this.handleSpecialContent(extract.desc, textMode))
|
|
||||||
.replaceAll(DoubanParameter.PUBLISHER, extract.publisher)
|
|
||||||
.replaceAll(DoubanParameter.DATE_PUBLISHED, extract.datePublished ? moment(extract.datePublished).format(settings.dateFormat) : '')
|
|
||||||
.replaceAll(DoubanParameter.TIME_PUBLISHED, extract.datePublished ? moment(extract.datePublished).format(settings.timeFormat) : '')
|
|
||||||
.replaceAll(DoubanParameter.GENRE, this.handleSpecialContent(extract.genre, textMode, settings))
|
|
||||||
;
|
|
||||||
return this.parseText(resultContent, extract, settings, textMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理特殊字符
|
* 处理特殊字符
|
||||||
* @param text
|
* @param text
|
||||||
* @param textMode
|
* @param textMode
|
||||||
*/
|
*/
|
||||||
handleSpecialText(text: string, textMode: TemplateTextMode):string {
|
handleSpecialText(text: string, textMode: TemplateTextMode): string {
|
||||||
let result = text;
|
let result = text;
|
||||||
switch (textMode) {
|
switch (textMode) {
|
||||||
case TemplateTextMode.YAML:
|
case TemplateTextMode.YAML:
|
||||||
@ -83,7 +66,7 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
* @param settings
|
* @param settings
|
||||||
* @param textMode
|
* @param textMode
|
||||||
*/
|
*/
|
||||||
handleContentArray(array: any[], settings: DoubanPluginSettings, textMode: TemplateTextMode):string {
|
handleContentArray(array: any[], settings: DoubanPluginSettings, textMode: TemplateTextMode): string {
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (textMode) {
|
switch (textMode) {
|
||||||
case TemplateTextMode.YAML:
|
case TemplateTextMode.YAML:
|
||||||
@ -101,26 +84,26 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
* @param textMode
|
* @param textMode
|
||||||
* @param settings
|
* @param settings
|
||||||
*/
|
*/
|
||||||
handleSpecialContent(value: any, textMode:TemplateTextMode = TemplateTextMode.NORMAL, settings: DoubanPluginSettings = null): string {
|
handleSpecialContent(value: any, textMode: TemplateTextMode = TemplateTextMode.NORMAL, settings: DoubanPluginSettings = null): string {
|
||||||
let result = '';
|
let result = '';
|
||||||
if (value instanceof Array) {
|
if (value instanceof Array) {
|
||||||
result = this.handleContentArray(value, settings, textMode);
|
result = this.handleContentArray(value, settings, textMode);
|
||||||
}else if (value instanceof Number) {
|
} else if (value instanceof Number) {
|
||||||
result = value ? value.toString() : '';
|
result = value ? value.toString() : '';
|
||||||
}else {
|
} else {
|
||||||
result = this.handleSpecialText(value, textMode);
|
result = this.handleSpecialText(value, textMode);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract getTemplate(settings:DoubanPluginSettings):string;
|
abstract getTemplate(settings: DoubanPluginSettings): string;
|
||||||
|
|
||||||
abstract parseText(beforeContent:string, extract: T, settings:DoubanPluginSettings, textMode:TemplateTextMode): string;
|
abstract parseText(beforeContent: string, extract: T, settings: DoubanPluginSettings, textMode: TemplateTextMode): string;
|
||||||
|
|
||||||
abstract support(extract: DoubanSubject): boolean;
|
abstract support(extract: DoubanSubject): boolean;
|
||||||
|
|
||||||
handle(url:string, editor:Editor):void {
|
handle(url: string, editor: Editor): void {
|
||||||
let requestUrlParam:RequestUrlParam = {
|
let requestUrlParam: RequestUrlParam = {
|
||||||
url: url,
|
url: url,
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: JSON.parse(this.doubanPlugin.settings.searchHeaders),
|
headers: JSON.parse(this.doubanPlugin.settings.searchHeaders),
|
||||||
@ -136,27 +119,27 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract parseSubjectFromHtml(data:CheerioAPI):T | undefined;
|
abstract parseSubjectFromHtml(data: CheerioAPI): T | undefined;
|
||||||
|
|
||||||
toEditor(editor:Editor, extract: T):T {
|
toEditor(editor: Editor, extract: T): T {
|
||||||
this.doubanPlugin.putToEditor(editor, extract);
|
this.doubanPlugin.putToEditor(editor, extract);
|
||||||
return extract;
|
return extract;
|
||||||
}
|
}
|
||||||
|
|
||||||
getPersonName(name:string, settings:DoubanPluginSettings):string {
|
getPersonName(name: string, settings: DoubanPluginSettings): string {
|
||||||
if(!name || !settings || !settings.personNameMode) {
|
if (!name || !settings || !settings.personNameMode) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
let resultName:string = "";
|
let resultName: string = "";
|
||||||
let regValue:RegExpExecArray;
|
let regValue: RegExpExecArray;
|
||||||
switch(settings.personNameMode) {
|
switch (settings.personNameMode) {
|
||||||
case PersonNameMode.CH_NAME:
|
case PersonNameMode.CH_NAME:
|
||||||
regValue = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
|
regValue = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
|
||||||
resultName = regValue?regValue[0]:name;
|
resultName = regValue ? regValue[0] : name;
|
||||||
break;
|
break;
|
||||||
case PersonNameMode.EN_NAME:
|
case PersonNameMode.EN_NAME:
|
||||||
regValue = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
|
regValue = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
|
||||||
resultName = regValue?regValue[0]:name;
|
resultName = regValue ? regValue[0] : name;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
resultName = name;
|
resultName = name;
|
||||||
@ -164,8 +147,7 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
return resultName;
|
return resultName;
|
||||||
}
|
}
|
||||||
|
|
||||||
html_encode(str:string):string
|
html_encode(str: string): string {
|
||||||
{
|
|
||||||
let s = "";
|
let s = "";
|
||||||
if (str.length == 0) return "";
|
if (str.length == 0) return "";
|
||||||
s = str.replace(/&/g, "&");
|
s = str.replace(/&/g, "&");
|
||||||
@ -178,8 +160,7 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
html_decode(str:string):string
|
html_decode(str: string): string {
|
||||||
{
|
|
||||||
let s = "";
|
let s = "";
|
||||||
if (str.length == 0) return "";
|
if (str.length == 0) return "";
|
||||||
s = str.replace(/&/g, "&");
|
s = str.replace(/&/g, "&");
|
||||||
@ -192,4 +173,21 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private parsePartText(template: string, extract: T, settings: DoubanPluginSettings, textMode: TemplateTextMode = TemplateTextMode.NORMAL): string {
|
||||||
|
let resultContent = template
|
||||||
|
.replaceAll(DoubanParameter.ID, extract.id)
|
||||||
|
.replaceAll(DoubanParameter.TITLE, this.handleSpecialContent(extract.title, textMode))
|
||||||
|
.replaceAll(DoubanParameter.TYPE, extract.type)
|
||||||
|
.replaceAll(DoubanParameter.SCORE, this.handleSpecialContent(extract.score))
|
||||||
|
.replaceAll(DoubanParameter.IMAGE, extract.image)
|
||||||
|
.replaceAll(DoubanParameter.URL, extract.url)
|
||||||
|
.replaceAll(DoubanParameter.DESC, this.handleSpecialContent(extract.desc, textMode))
|
||||||
|
.replaceAll(DoubanParameter.PUBLISHER, extract.publisher)
|
||||||
|
.replaceAll(DoubanParameter.DATE_PUBLISHED, extract.datePublished ? moment(extract.datePublished).format(settings.dateFormat) : '')
|
||||||
|
.replaceAll(DoubanParameter.TIME_PUBLISHED, extract.datePublished ? moment(extract.datePublished).format(settings.timeFormat) : '')
|
||||||
|
.replaceAll(DoubanParameter.GENRE, this.handleSpecialContent(extract.genre, textMode, settings))
|
||||||
|
;
|
||||||
|
return this.parseText(resultContent, extract, settings, textMode);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
import {Editor, htmlToMarkdown, moment, renderResults} from "obsidian";
|
import {CheerioAPI} from 'cheerio';
|
||||||
|
|
||||||
import { CheerioAPI } from 'cheerio';
|
|
||||||
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
||||||
import DoubanBookSubject, {DoubanBookParameter} from "../model/DoubanBookSubject";
|
import DoubanBookSubject, {DoubanBookParameter} from "../model/DoubanBookSubject";
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
@ -10,11 +8,15 @@ import {TemplateTextMode} from "../../../constant/Constsant";
|
|||||||
|
|
||||||
export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<DoubanBookSubject> {
|
export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<DoubanBookSubject> {
|
||||||
|
|
||||||
|
constructor(doubanPlugin: DoubanPlugin) {
|
||||||
|
super(doubanPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
getTemplate(settings: DoubanPluginSettings): string {
|
getTemplate(settings: DoubanPluginSettings): string {
|
||||||
return settings.bookTemplate;
|
return settings.bookTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
parseText(beforeContent:string, extract: DoubanBookSubject, settings:DoubanPluginSettings, textMode: TemplateTextMode): string {
|
parseText(beforeContent: string, extract: DoubanBookSubject, settings: DoubanPluginSettings, textMode: TemplateTextMode): string {
|
||||||
return beforeContent
|
return beforeContent
|
||||||
.replaceAll(DoubanBookParameter.author,
|
.replaceAll(DoubanBookParameter.author,
|
||||||
super.handleSpecialContent(
|
super.handleSpecialContent(
|
||||||
@ -22,7 +24,7 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
.replaceAll(DoubanBookParameter.translator, super.handleSpecialContent(extract.translator, textMode, settings))
|
.replaceAll(DoubanBookParameter.translator, super.handleSpecialContent(extract.translator, textMode, settings))
|
||||||
.replaceAll(DoubanBookParameter.isbn, extract.isbn)
|
.replaceAll(DoubanBookParameter.isbn, extract.isbn)
|
||||||
.replaceAll(DoubanBookParameter.originalTitle, super.handleSpecialContent(extract.originalTitle, textMode))
|
.replaceAll(DoubanBookParameter.originalTitle, super.handleSpecialContent(extract.originalTitle, textMode))
|
||||||
.replaceAll(DoubanBookParameter.subTitle,super.handleSpecialContent(extract.subTitle, textMode))
|
.replaceAll(DoubanBookParameter.subTitle, super.handleSpecialContent(extract.subTitle, textMode))
|
||||||
.replaceAll(DoubanBookParameter.totalPage, super.handleSpecialContent(extract.totalPage, textMode))
|
.replaceAll(DoubanBookParameter.totalPage, super.handleSpecialContent(extract.totalPage, textMode))
|
||||||
.replaceAll(DoubanBookParameter.menu, extract.menu.join('\n'))
|
.replaceAll(DoubanBookParameter.menu, extract.menu.join('\n'))
|
||||||
.replaceAll(DoubanBookParameter.price, super.handleSpecialContent(extract.price, textMode))
|
.replaceAll(DoubanBookParameter.price, super.handleSpecialContent(extract.price, textMode))
|
||||||
@ -34,18 +36,11 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
return extract && extract.type && (extract.type.contains("书籍") || extract.type.contains("Book") || extract.type.contains("book"));
|
return extract && extract.type && (extract.type.contains("书籍") || extract.type.contains("Book") || extract.type.contains("book"));
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSpecialAuthorName(authorName:string):string {
|
handleSpecialAuthorName(authorName: string): string {
|
||||||
return authorName.replace(/\[/g, '')
|
return authorName.replace(/\[/g, '')
|
||||||
.replace(']', '/');
|
.replace(']', '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor(doubanPlugin:DoubanPlugin) {
|
|
||||||
super(doubanPlugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
parseSubjectFromHtml(html: CheerioAPI): DoubanBookSubject {
|
parseSubjectFromHtml(html: CheerioAPI): DoubanBookSubject {
|
||||||
let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
|
let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
|
||||||
let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
|
let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
|
||||||
@ -54,7 +49,7 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
|
let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
|
||||||
let title = obj.name;
|
let title = obj.name;
|
||||||
let url = obj.url;
|
let url = obj.url;
|
||||||
let author = obj.author.map((a:any) => a.name);
|
let author = obj.author.map((a: any) => a.name);
|
||||||
let isbn = obj.isbn;
|
let isbn = obj.isbn;
|
||||||
|
|
||||||
|
|
||||||
@ -67,14 +62,14 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
publish.map((index, info) => {
|
publish.map((index, info) => {
|
||||||
let key = html(info).text().trim();
|
let key = html(info).text().trim();
|
||||||
let value;
|
let value;
|
||||||
if(key.indexOf('译者') >= 0){
|
if (key.indexOf('译者') >= 0) {
|
||||||
value = [];
|
value = [];
|
||||||
html(info.parent).find("a").map((index, a) => {
|
html(info.parent).find("a").map((index, a) => {
|
||||||
value.push(html(a).text().trim());
|
value.push(html(a).text().trim());
|
||||||
});
|
});
|
||||||
} else if(key.indexOf('作者') >= 0 || key.indexOf('丛书') >= 0 || key.indexOf('出版社') >= 0){
|
} else if (key.indexOf('作者') >= 0 || key.indexOf('丛书') >= 0 || key.indexOf('出版社') >= 0) {
|
||||||
value = html(info.next.next).text().trim();
|
value = html(info.next.next).text().trim();
|
||||||
}else{
|
} else {
|
||||||
value = html(info.next).text().trim();
|
value = html(info.next).text().trim();
|
||||||
}
|
}
|
||||||
valueMap.set(BookKeyValueMap.get(key), value);
|
valueMap.set(BookKeyValueMap.get(key), value);
|
||||||
@ -82,11 +77,11 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
|
|
||||||
let idPattern = /(\d){5,10}/g;
|
let idPattern = /(\d){5,10}/g;
|
||||||
let idE = idPattern.exec(url);
|
let idE = idPattern.exec(url);
|
||||||
let id = idE ? idE[0]: '';
|
let id = idE ? idE[0] : '';
|
||||||
let menuIdDom = html('#dir_' + id + '_full') ? html('#dir_' + id + '_full') : html('#dir_' + id + '_short');
|
let menuIdDom = html('#dir_' + id + '_full') ? html('#dir_' + id + '_full') : html('#dir_' + id + '_short');
|
||||||
let menu:string[] = menuIdDom ? html(menuIdDom.get(0)).text().trim().split('\n').map(row => row.trim()) : [];
|
let menu: string[] = menuIdDom ? html(menuIdDom.get(0)).text().trim().split('\n').map(row => row.trim()) : [];
|
||||||
menu.length > 0 ? menu.pop() : menu;
|
menu.length > 0 ? menu.pop() : menu;
|
||||||
const result:DoubanBookSubject = {
|
const result: DoubanBookSubject = {
|
||||||
author: author,
|
author: author,
|
||||||
translator: valueMap.has('translator') ? valueMap.get('translator') : [],
|
translator: valueMap.has('translator') ? valueMap.get('translator') : [],
|
||||||
image: image,
|
image: image,
|
||||||
@ -109,13 +104,13 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
binding: valueMap.has('binding') ? valueMap.get('binding') : "",
|
binding: valueMap.has('binding') ? valueMap.get('binding') : "",
|
||||||
};
|
};
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const BookKeyValueMap:Map<string, string> = new Map(
|
const BookKeyValueMap: Map<string, string> = new Map(
|
||||||
[['作者', 'author'],
|
[['作者', 'author'],
|
||||||
['出版社:', 'publisher'],
|
['出版社:', 'publisher'],
|
||||||
['原作名:', 'originalTitle'],
|
['原作名:', 'originalTitle'],
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { CheerioAPI } from 'cheerio';
|
import {CheerioAPI} from 'cheerio';
|
||||||
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import {DoubanPluginSettings} from "src/douban/Douban";
|
import {DoubanPluginSettings} from "src/douban/Douban";
|
||||||
@ -7,8 +7,8 @@ import DoubanGameSubject from '../model/DoubanGameSubject';
|
|||||||
|
|
||||||
export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<DoubanGameSubject> {
|
export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<DoubanGameSubject> {
|
||||||
|
|
||||||
getTemplate(settings: DoubanPluginSettings): string {
|
constructor(doubanPlugin: DoubanPlugin) {
|
||||||
return settings.gameTemplate;
|
super(doubanPlugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse(extract: DoubanGameSubject, settings: DoubanPluginSettings): string {
|
// parse(extract: DoubanGameSubject, settings: DoubanPluginSettings): string {
|
||||||
@ -16,7 +16,11 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
// return super.parse(extract, settings);
|
// return super.parse(extract, settings);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
parseText(beforeContent:string, extract: DoubanGameSubject, settings:DoubanPluginSettings): string {
|
getTemplate(settings: DoubanPluginSettings): string {
|
||||||
|
return settings.gameTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
parseText(beforeContent: string, extract: DoubanGameSubject, settings: DoubanPluginSettings): string {
|
||||||
return beforeContent
|
return beforeContent
|
||||||
.replaceAll("{{platform}}", extract.platform ? extract.platform.join(settings.arraySpilt) : "")
|
.replaceAll("{{platform}}", extract.platform ? extract.platform.join(settings.arraySpilt) : "")
|
||||||
.replaceAll("{{aliases}}", extract.aliases ? extract.aliases.join(settings.arraySpilt) : "")
|
.replaceAll("{{aliases}}", extract.aliases ? extract.aliases.join(settings.arraySpilt) : "")
|
||||||
@ -27,14 +31,6 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
return extract && extract.type && (extract.type.contains("游戏") || extract.type.contains("Game") || extract.type.contains("game"));
|
return extract && extract.type && (extract.type.contains("游戏") || extract.type.contains("Game") || extract.type.contains("game"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor(doubanPlugin:DoubanPlugin) {
|
|
||||||
super(doubanPlugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
parseSubjectFromHtml(html: CheerioAPI): DoubanGameSubject {
|
parseSubjectFromHtml(html: CheerioAPI): DoubanGameSubject {
|
||||||
let title = html(html("#content > h1").get(0)).text();
|
let title = html(html("#content > h1").get(0)).text();
|
||||||
let idContent = html(html("head > meta[name= 'mobile-agent']").get(0)).attr("content");
|
let idContent = html(html("head > meta[name= 'mobile-agent']").get(0)).attr("content");
|
||||||
@ -49,24 +45,24 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
|
|
||||||
let url = `https://www.douban.com/game/${id}/`;
|
let url = `https://www.douban.com/game/${id}/`;
|
||||||
let valueMap = new Map<string, any>();
|
let valueMap = new Map<string, any>();
|
||||||
let value:any;
|
let value: any;
|
||||||
dt.map((index, info) => {
|
dt.map((index, info) => {
|
||||||
let key = html(info).text().trim();
|
let key = html(info).text().trim();
|
||||||
if(key.indexOf('平台') >= 0 || key.indexOf('类型') >= 0){
|
if (key.indexOf('平台') >= 0 || key.indexOf('类型') >= 0) {
|
||||||
value = [];
|
value = [];
|
||||||
html(info.next.next).find("a").map((index, a) => {
|
html(info.next.next).find("a").map((index, a) => {
|
||||||
value.push(html(a).text().trim());
|
value.push(html(a).text().trim());
|
||||||
});
|
});
|
||||||
}else if (key.indexOf('别名') >= 0) {
|
} else if (key.indexOf('别名') >= 0) {
|
||||||
let cc = html(info.next.next).text().trim();
|
let cc = html(info.next.next).text().trim();
|
||||||
value = cc.split("/");
|
value = cc.split("/");
|
||||||
}else{
|
} else {
|
||||||
value = html(info.next.next).text().trim();
|
value = html(info.next.next).text().trim();
|
||||||
}
|
}
|
||||||
valueMap.set(GameKeyValueMap.get(key), value);
|
valueMap.set(GameKeyValueMap.get(key), value);
|
||||||
})
|
})
|
||||||
|
|
||||||
const result:DoubanGameSubject = {
|
const result: DoubanGameSubject = {
|
||||||
id: id,
|
id: id,
|
||||||
type: "Game",
|
type: "Game",
|
||||||
title: title,
|
title: title,
|
||||||
@ -83,6 +79,7 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
};
|
};
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO support game's name i18n
|
//TODO support game's name i18n
|
||||||
// handleI18nName(title: string, settings: DoubanPluginSettings):string {
|
// handleI18nName(title: string, settings: DoubanPluginSettings):string {
|
||||||
// if (!title) {
|
// if (!title) {
|
||||||
@ -110,7 +107,7 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const GameKeyValueMap:Map<string, string> = new Map(
|
const GameKeyValueMap: Map<string, string> = new Map(
|
||||||
[['类型:', 'genre'],
|
[['类型:', 'genre'],
|
||||||
['平台:', 'platform'],
|
['平台:', 'platform'],
|
||||||
['别名:', 'aliases'],
|
['别名:', 'aliases'],
|
||||||
|
|||||||
@ -1,18 +1,22 @@
|
|||||||
import { CheerioAPI } from 'cheerio';
|
import {CheerioAPI} from 'cheerio';
|
||||||
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { DoubanPluginSettings } from "src/douban/Douban";
|
import {DoubanPluginSettings} from "src/douban/Douban";
|
||||||
import SchemaOrg from "src/utils/SchemaOrg";
|
import SchemaOrg from "src/utils/SchemaOrg";
|
||||||
import DoubanSubject from '../model/DoubanSubject';
|
import DoubanSubject from '../model/DoubanSubject';
|
||||||
import DoubanMovieSubject from '../model/DoubanMovieSubject';
|
import DoubanMovieSubject from '../model/DoubanMovieSubject';
|
||||||
|
|
||||||
export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<DoubanMovieSubject> {
|
export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<DoubanMovieSubject> {
|
||||||
|
|
||||||
|
constructor(doubanPlugin: DoubanPlugin) {
|
||||||
|
super(doubanPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
getTemplate(settings: DoubanPluginSettings): string {
|
getTemplate(settings: DoubanPluginSettings): string {
|
||||||
return settings.movieTemplate;
|
return settings.movieTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
parseText(beforeContent:string, extract: DoubanMovieSubject, settings:DoubanPluginSettings): string {
|
parseText(beforeContent: string, extract: DoubanMovieSubject, settings: DoubanPluginSettings): string {
|
||||||
return beforeContent
|
return beforeContent
|
||||||
.replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
|
.replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
|
||||||
.replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
|
.replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
|
||||||
@ -20,18 +24,11 @@ export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
.replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
|
.replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
support(extract: DoubanSubject): boolean {
|
support(extract: DoubanSubject): boolean {
|
||||||
return extract && extract.type && (extract.type.contains("电影") || extract.type.contains("Movie") || extract.type.contains("movie"));
|
return extract && extract.type && (extract.type.contains("电影") || extract.type.contains("Movie") || extract.type.contains("movie"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor(doubanPlugin:DoubanPlugin) {
|
|
||||||
super(doubanPlugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
parseSubjectFromHtml(data: CheerioAPI): DoubanMovieSubject {
|
parseSubjectFromHtml(data: CheerioAPI): DoubanMovieSubject {
|
||||||
return data('script')
|
return data('script')
|
||||||
.get()
|
.get()
|
||||||
@ -44,12 +41,12 @@ export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
let id = idPattern.exec(obj.url);
|
let id = idPattern.exec(obj.url);
|
||||||
let name = obj.name;
|
let name = obj.name;
|
||||||
let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
|
let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
|
||||||
let title = titleExec?titleExec[0]:name;
|
let title = titleExec ? titleExec[0] : name;
|
||||||
|
|
||||||
let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
|
let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
|
||||||
let originalTitle = originalTitleExec?originalTitleExec[0]:name;
|
let originalTitle = originalTitleExec ? originalTitleExec[0] : name;
|
||||||
|
|
||||||
const result:DoubanMovieSubject = {
|
const result: DoubanMovieSubject = {
|
||||||
id: id ? id[0] : '',
|
id: id ? id[0] : '',
|
||||||
title: title,
|
title: title,
|
||||||
type: 'Movie',
|
type: 'Movie',
|
||||||
|
|||||||
@ -1,17 +1,21 @@
|
|||||||
import { CheerioAPI } from 'cheerio';
|
import {CheerioAPI} from 'cheerio';
|
||||||
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
||||||
import DoubanMusicSubject from '../model/DoubanMusicSubject';
|
import DoubanMusicSubject from '../model/DoubanMusicSubject';
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { DoubanPluginSettings } from "src/douban/Douban";
|
import {DoubanPluginSettings} from "src/douban/Douban";
|
||||||
import DoubanSubject from '../model/DoubanSubject';
|
import DoubanSubject from '../model/DoubanSubject';
|
||||||
|
|
||||||
export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<DoubanMusicSubject> {
|
export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<DoubanMusicSubject> {
|
||||||
|
|
||||||
|
constructor(doubanPlugin: DoubanPlugin) {
|
||||||
|
super(doubanPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
getTemplate(settings: DoubanPluginSettings): string {
|
getTemplate(settings: DoubanPluginSettings): string {
|
||||||
return settings.musicTemplate;
|
return settings.musicTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
parseText(beforeContent:string, extract: DoubanMusicSubject, settings:DoubanPluginSettings): string {
|
parseText(beforeContent: string, extract: DoubanMusicSubject, settings: DoubanPluginSettings): string {
|
||||||
return beforeContent
|
return beforeContent
|
||||||
.replaceAll("{{actor}}", extract.actor ? extract.actor.join(settings.arraySpilt) : "")
|
.replaceAll("{{actor}}", extract.actor ? extract.actor.join(settings.arraySpilt) : "")
|
||||||
.replaceAll("{{barcode}}", extract.barcode ? extract.barcode : "")
|
.replaceAll("{{barcode}}", extract.barcode ? extract.barcode : "")
|
||||||
@ -20,18 +24,11 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
.replaceAll("{{numberOfRecords}}", extract.numberOfRecords ? extract.numberOfRecords + "" : "")
|
.replaceAll("{{numberOfRecords}}", extract.numberOfRecords ? extract.numberOfRecords + "" : "")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
support(extract: DoubanSubject): boolean {
|
support(extract: DoubanSubject): boolean {
|
||||||
return extract && extract.type && (extract.type.contains("音乐") || extract.type.contains("Music") || extract.type.contains("music"));
|
return extract && extract.type && (extract.type.contains("音乐") || extract.type.contains("Music") || extract.type.contains("music"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor(doubanPlugin:DoubanPlugin) {
|
|
||||||
super(doubanPlugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
parseSubjectFromHtml(html: CheerioAPI): DoubanMusicSubject {
|
parseSubjectFromHtml(html: CheerioAPI): DoubanMusicSubject {
|
||||||
let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
|
let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
|
||||||
let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
|
let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
|
||||||
@ -46,12 +43,12 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
publish.map((index, info) => {
|
publish.map((index, info) => {
|
||||||
let key = html(info).text().trim();
|
let key = html(info).text().trim();
|
||||||
let value = ''
|
let value = ''
|
||||||
if(key.indexOf('表演者') >= 0){
|
if (key.indexOf('表演者') >= 0) {
|
||||||
// value = html(info.next.next).text().trim();
|
// value = html(info.next.next).text().trim();
|
||||||
let vas:string[] = key.split("\n \n ");
|
let vas: string[] = key.split("\n \n ");
|
||||||
value = vas && vas.length > 1? vas[1]:"";
|
value = vas && vas.length > 1 ? vas[1] : "";
|
||||||
key = vas && vas.length > 0? vas[0]:"";
|
key = vas && vas.length > 0 ? vas[0] : "";
|
||||||
}else{
|
} else {
|
||||||
value = html(info.next).text().trim();
|
value = html(info.next).text().trim();
|
||||||
}
|
}
|
||||||
valueMap.set(MusicKeyValueMap.get(key), value);
|
valueMap.set(MusicKeyValueMap.get(key), value);
|
||||||
@ -60,7 +57,7 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
let idPattern = /(\d){5,10}/g;
|
let idPattern = /(\d){5,10}/g;
|
||||||
let id = idPattern.exec(url);
|
let id = idPattern.exec(url);
|
||||||
|
|
||||||
const result:DoubanMusicSubject = {
|
const result: DoubanMusicSubject = {
|
||||||
image: image,
|
image: image,
|
||||||
datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
|
datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
|
||||||
publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
|
publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
|
||||||
@ -78,13 +75,13 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
barcode: valueMap.has('barcode') ? valueMap.get('barcode') : ""
|
barcode: valueMap.has('barcode') ? valueMap.get('barcode') : ""
|
||||||
};
|
};
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const MusicKeyValueMap:Map<string, string> = new Map(
|
const MusicKeyValueMap: Map<string, string> = new Map(
|
||||||
[['表演者:', 'actor'],
|
[['表演者:', 'actor'],
|
||||||
['流派:', 'genre'],
|
['流派:', 'genre'],
|
||||||
['发行时间:', 'datePublished'],
|
['发行时间:', 'datePublished'],
|
||||||
|
|||||||
@ -1,36 +1,33 @@
|
|||||||
import { CheerioAPI } from 'cheerio';
|
import {CheerioAPI} from 'cheerio';
|
||||||
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
||||||
import DoubanNoteSubject from '../model/DoubanNoteSubject';
|
import DoubanNoteSubject from '../model/DoubanNoteSubject';
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { DoubanPluginSettings } from "src/douban/Douban";
|
import {DoubanPluginSettings} from "src/douban/Douban";
|
||||||
import DoubanSubject from '../model/DoubanSubject';
|
import DoubanSubject from '../model/DoubanSubject';
|
||||||
import html2markdown from '@notable/html2markdown';
|
import html2markdown from '@notable/html2markdown';
|
||||||
|
|
||||||
export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<DoubanNoteSubject> {
|
export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<DoubanNoteSubject> {
|
||||||
|
|
||||||
|
constructor(doubanPlugin: DoubanPlugin) {
|
||||||
|
super(doubanPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
getTemplate(settings: DoubanPluginSettings): string {
|
getTemplate(settings: DoubanPluginSettings): string {
|
||||||
return settings.noteTemplate;
|
return settings.noteTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
parseText(beforeContent:string, extract: DoubanNoteSubject, settings:DoubanPluginSettings): string {
|
parseText(beforeContent: string, extract: DoubanNoteSubject, settings: DoubanPluginSettings): string {
|
||||||
return beforeContent
|
return beforeContent
|
||||||
.replaceAll("{{authorUrl}}", extract.authorUrl ? extract.authorUrl : "")
|
.replaceAll("{{authorUrl}}", extract.authorUrl ? extract.authorUrl : "")
|
||||||
.replaceAll("{{content}}", extract.content ? extract.content : "")
|
.replaceAll("{{content}}", extract.content ? extract.content : "")
|
||||||
.replaceAll("{{author}}", extract.author ? extract.author : "")
|
.replaceAll("{{author}}", extract.author ? extract.author : "")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
support(extract: DoubanSubject): boolean {
|
support(extract: DoubanSubject): boolean {
|
||||||
return extract && extract.type && (extract.type.contains("日记") || extract.type.contains("Note") || extract.type.contains("Article"));
|
return extract && extract.type && (extract.type.contains("日记") || extract.type.contains("Note") || extract.type.contains("Article"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor(doubanPlugin:DoubanPlugin) {
|
|
||||||
super(doubanPlugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
parseSubjectFromHtml(html: CheerioAPI): DoubanNoteSubject {
|
parseSubjectFromHtml(html: CheerioAPI): DoubanNoteSubject {
|
||||||
let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
|
let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
|
||||||
let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
|
let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
|
||||||
@ -43,7 +40,7 @@ export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
let idPattern = /(\d){5,10}/g;
|
let idPattern = /(\d){5,10}/g;
|
||||||
let id = idPattern.exec(url);
|
let id = idPattern.exec(url);
|
||||||
|
|
||||||
const result:DoubanNoteSubject = {
|
const result: DoubanNoteSubject = {
|
||||||
image: image,
|
image: image,
|
||||||
datePublished: timePublished ? new Date(timePublished) : undefined,
|
datePublished: timePublished ? new Date(timePublished) : undefined,
|
||||||
content: content ? html2markdown(content.toString()) : "",
|
content: content ? html2markdown(content.toString()) : "",
|
||||||
@ -59,7 +56,7 @@ export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
genre: []
|
genre: []
|
||||||
};
|
};
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import { CheerioAPI } from "cheerio";
|
import {CheerioAPI} from "cheerio";
|
||||||
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
||||||
import { DoubanPluginSettings } from "src/douban/Douban";
|
import {DoubanPluginSettings} from "src/douban/Douban";
|
||||||
import DoubanSubject from "../model/DoubanSubject";
|
import DoubanSubject from "../model/DoubanSubject";
|
||||||
import { i18nHelper } from "src/lang/helper";
|
import {i18nHelper} from "src/lang/helper";
|
||||||
import { log } from "src/utils/Logutil";
|
import {log} from "src/utils/Logutil";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 默认的处理器
|
* 默认的处理器
|
||||||
@ -12,19 +12,19 @@ export default class DoubanOtherLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
getTemplate(settings: DoubanPluginSettings): string {
|
getTemplate(settings: DoubanPluginSettings): string {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
parseText(beforeContent:string, extract: DoubanSubject, settings:DoubanPluginSettings): string {
|
|
||||||
|
parseText(beforeContent: string, extract: DoubanSubject, settings: DoubanPluginSettings): string {
|
||||||
log.warn(i18nHelper.getMessage('140101'));
|
log.warn(i18nHelper.getMessage('140101'));
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
support(extract: DoubanSubject): boolean {
|
support(extract: DoubanSubject): boolean {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
parseSubjectFromHtml(data: CheerioAPI): DoubanSubject {
|
parseSubjectFromHtml(data: CheerioAPI): DoubanSubject {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { App, Editor } from "obsidian";
|
import {App, Editor} from "obsidian";
|
||||||
|
|
||||||
import DoubanBookLoadHandler from "./DoubanBookLoadHandler";
|
import DoubanBookLoadHandler from "./DoubanBookLoadHandler";
|
||||||
import DoubanMovieLoadHandler from "./DoubanMovieLoadHandler";
|
import DoubanMovieLoadHandler from "./DoubanMovieLoadHandler";
|
||||||
@ -6,22 +6,21 @@ import DoubanMusicLoadHandler from "./DoubanMusicLoadHandler";
|
|||||||
import DoubanNoteLoadHandler from "./DoubanNoteLoadHandler";
|
import DoubanNoteLoadHandler from "./DoubanNoteLoadHandler";
|
||||||
import DoubanOtherLoadHandler from "./DoubanOtherLoadHandler";
|
import DoubanOtherLoadHandler from "./DoubanOtherLoadHandler";
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { DoubanPluginSettings } from "src/douban/Douban";
|
import {DoubanPluginSettings} from "src/douban/Douban";
|
||||||
import DoubanSubject from "../model/DoubanSubject";
|
import DoubanSubject from "../model/DoubanSubject";
|
||||||
import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler";
|
import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler";
|
||||||
import { DoubanTeleplayLoadHandler } from "./DoubanTeleplayLoadHandler";
|
import {DoubanTeleplayLoadHandler} from "./DoubanTeleplayLoadHandler";
|
||||||
import DoubanGameLoadHandler from "./DoubanGameLoadHandler";
|
import DoubanGameLoadHandler from "./DoubanGameLoadHandler";
|
||||||
|
|
||||||
export class DoubanSearchChooseItemHandler {
|
export class DoubanSearchChooseItemHandler {
|
||||||
|
|
||||||
private _app:App;
|
private _app: App;
|
||||||
private _doubanPlugin:DoubanPlugin;
|
private _doubanPlugin: DoubanPlugin;
|
||||||
private _doubanSubjectHandlers:DoubanSubjectLoadHandler<DoubanSubject>[];
|
private _doubanSubjectHandlers: DoubanSubjectLoadHandler<DoubanSubject>[];
|
||||||
private _doubanSubjectHandlerDefault:DoubanSubjectLoadHandler<DoubanSubject>;
|
private _doubanSubjectHandlerDefault: DoubanSubjectLoadHandler<DoubanSubject>;
|
||||||
|
|
||||||
|
|
||||||
|
constructor(app: App, doubanPlugin: DoubanPlugin) {
|
||||||
constructor(app:App, doubanPlugin:DoubanPlugin) {
|
|
||||||
this._app = app;
|
this._app = app;
|
||||||
this._doubanPlugin = doubanPlugin;
|
this._doubanPlugin = doubanPlugin;
|
||||||
this._doubanSubjectHandlerDefault = new DoubanOtherLoadHandler(doubanPlugin);
|
this._doubanSubjectHandlerDefault = new DoubanOtherLoadHandler(doubanPlugin);
|
||||||
@ -34,33 +33,33 @@ export class DoubanSearchChooseItemHandler {
|
|||||||
this._doubanSubjectHandlerDefault];
|
this._doubanSubjectHandlerDefault];
|
||||||
}
|
}
|
||||||
|
|
||||||
public handle(searchExtract:DoubanSubject, editor: Editor):void{
|
public handle(searchExtract: DoubanSubject, editor: Editor): void {
|
||||||
if(!searchExtract) {
|
if (!searchExtract) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let doubanSubjectHandlers:DoubanSubjectLoadHandler<DoubanSubject>[] = this._doubanSubjectHandlers
|
let doubanSubjectHandlers: DoubanSubjectLoadHandler<DoubanSubject>[] = this._doubanSubjectHandlers
|
||||||
.filter(h => h.support(searchExtract));
|
.filter(h => h.support(searchExtract));
|
||||||
if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) {
|
if (doubanSubjectHandlers && doubanSubjectHandlers.length > 0) {
|
||||||
doubanSubjectHandlers[0].handle(searchExtract.url, editor);
|
doubanSubjectHandlers[0].handle(searchExtract.url, editor);
|
||||||
}else {
|
} else {
|
||||||
this._doubanSubjectHandlerDefault.handle(searchExtract.url, editor);
|
this._doubanSubjectHandlerDefault.handle(searchExtract.url, editor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public parseText(extract:DoubanSubject, settings:DoubanPluginSettings):string {
|
public parseText(extract: DoubanSubject, settings: DoubanPluginSettings): string {
|
||||||
if(!settings) {
|
if (!settings) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
let doubanSubjectHandlers:DoubanSubjectLoadHandler<DoubanSubject>[] = this._doubanSubjectHandlers
|
let doubanSubjectHandlers: DoubanSubjectLoadHandler<DoubanSubject>[] = this._doubanSubjectHandlers
|
||||||
.filter(h => h.support(extract));
|
.filter(h => h.support(extract));
|
||||||
if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) {
|
if (doubanSubjectHandlers && doubanSubjectHandlers.length > 0) {
|
||||||
let result = doubanSubjectHandlers.map(h => h.parse(extract, settings));
|
let result = doubanSubjectHandlers.map(h => h.parse(extract, settings));
|
||||||
if(result && result.length > 0) {
|
if (result && result.length > 0) {
|
||||||
return result[0];
|
return result[0];
|
||||||
}else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}else {
|
} else {
|
||||||
return this._doubanSubjectHandlerDefault.parse(extract, settings);
|
return this._doubanSubjectHandlerDefault.parse(extract, settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
import { DoubanPluginSettings } from "src/douban/Douban";
|
import {DoubanPluginSettings} from "src/douban/Douban";
|
||||||
import DoubanSubject from "../model/DoubanSubject";
|
import DoubanSubject from "../model/DoubanSubject";
|
||||||
import { Editor } from "obsidian";
|
import {Editor} from "obsidian";
|
||||||
|
|
||||||
export default interface DoubanSubjectLoadHandler<T extends DoubanSubject> {
|
export default interface DoubanSubjectLoadHandler<T extends DoubanSubject> {
|
||||||
|
|
||||||
parse(extract: T, settings:DoubanPluginSettings): string;
|
parse(extract: T, settings: DoubanPluginSettings): string;
|
||||||
|
|
||||||
support(extract:DoubanSubject):boolean;
|
support(extract: DoubanSubject): boolean;
|
||||||
|
|
||||||
handle(url:string, editor: Editor):void;
|
handle(url: string, editor: Editor): void;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { CheerioAPI } from "cheerio";
|
import {CheerioAPI} from "cheerio";
|
||||||
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { DoubanPluginSettings } from "src/douban/Douban";
|
import {DoubanPluginSettings} from "src/douban/Douban";
|
||||||
import DoubanSubject from "../model/DoubanSubject";
|
import DoubanSubject from "../model/DoubanSubject";
|
||||||
import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject";
|
import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject";
|
||||||
import SchemaOrg from "src/utils/SchemaOrg";
|
import SchemaOrg from "src/utils/SchemaOrg";
|
||||||
@ -9,18 +9,17 @@ import SchemaOrg from "src/utils/SchemaOrg";
|
|||||||
/**
|
/**
|
||||||
* teleplay
|
* teleplay
|
||||||
*/
|
*/
|
||||||
export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler<DoubanTeleplaySubject>{
|
export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler<DoubanTeleplaySubject> {
|
||||||
|
|
||||||
|
constructor(doubanPlugin: DoubanPlugin) {
|
||||||
|
super(doubanPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
getTemplate(settings: DoubanPluginSettings): string {
|
getTemplate(settings: DoubanPluginSettings): string {
|
||||||
return settings.movieTemplate;
|
return settings.movieTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(doubanPlugin:DoubanPlugin) {
|
parseText(beforeContent: string, extract: DoubanTeleplaySubject, settings: DoubanPluginSettings): string {
|
||||||
super(doubanPlugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
parseText(beforeContent:string, extract: DoubanTeleplaySubject, settings:DoubanPluginSettings): string {
|
|
||||||
return beforeContent
|
return beforeContent
|
||||||
.replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
|
.replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
|
||||||
.replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
|
.replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
|
||||||
@ -45,12 +44,12 @@ export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler<DoubanT
|
|||||||
let id = idPattern.exec(obj.url);
|
let id = idPattern.exec(obj.url);
|
||||||
let name = obj.name;
|
let name = obj.name;
|
||||||
let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
|
let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
|
||||||
let title = titleExec?titleExec[0]:name;
|
let title = titleExec ? titleExec[0] : name;
|
||||||
|
|
||||||
let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
|
let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
|
||||||
let originalTitle = originalTitleExec?originalTitleExec[0]:name;
|
let originalTitle = originalTitleExec ? originalTitleExec[0] : name;
|
||||||
|
|
||||||
const result:DoubanTeleplaySubject = {
|
const result: DoubanTeleplaySubject = {
|
||||||
id: id ? id[0] : '',
|
id: id ? id[0] : '',
|
||||||
type: 'Teleplay',
|
type: 'Teleplay',
|
||||||
title: title,
|
title: title,
|
||||||
|
|||||||
@ -1,19 +1,16 @@
|
|||||||
import {AggregateRating, Person, WithContext} from 'schema-dts';
|
|
||||||
|
|
||||||
import DoubanSubject from "./DoubanSubject";
|
import DoubanSubject from "./DoubanSubject";
|
||||||
import PropertyExplainSubject from "@App/data/model/PropertyExplainSubject";
|
|
||||||
|
|
||||||
export default class DoubanBookSubject extends DoubanSubject {
|
export default class DoubanBookSubject extends DoubanSubject {
|
||||||
author:string[];
|
author: string[];
|
||||||
translator:string[];
|
translator: string[];
|
||||||
isbn:string;
|
isbn: string;
|
||||||
originalTitle:string;
|
originalTitle: string;
|
||||||
subTitle:string;
|
subTitle: string;
|
||||||
totalPage:number
|
totalPage: number
|
||||||
series:string;
|
series: string;
|
||||||
menu:string[];
|
menu: string[];
|
||||||
price:number;
|
price: number;
|
||||||
binding:string;
|
binding: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DoubanBookParameter = {
|
export const DoubanBookParameter = {
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
import {AggregateRating, Person} from 'schema-dts';
|
|
||||||
import DoubanSubject from './DoubanSubject';
|
import DoubanSubject from './DoubanSubject';
|
||||||
|
|
||||||
|
|
||||||
export default class DoubanGameSubject extends DoubanSubject {
|
export default class DoubanGameSubject extends DoubanSubject {
|
||||||
aliases:string[];
|
aliases: string[];
|
||||||
developer:string;
|
developer: string;
|
||||||
platform:string[];
|
platform: string[];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import {AggregateRating, Person, WithContext} from 'schema-dts';
|
import {AggregateRating, Person} from 'schema-dts';
|
||||||
|
|
||||||
import DoubanSubject from "./DoubanSubject";
|
import DoubanSubject from "./DoubanSubject";
|
||||||
|
|
||||||
export default class DoubanMovieSubject extends DoubanSubject {
|
export default class DoubanMovieSubject extends DoubanSubject {
|
||||||
director:Person[];
|
director: Person[];
|
||||||
author:Person[];
|
author: Person[];
|
||||||
actor:Person[];
|
actor: Person[];
|
||||||
aggregateRating:AggregateRating;
|
aggregateRating: AggregateRating;
|
||||||
genre:string[];
|
genre: string[];
|
||||||
originalTitle:string;
|
originalTitle: string;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,9 @@
|
|||||||
import {AggregateRating, Person, WithContext} from 'schema-dts';
|
|
||||||
|
|
||||||
import DoubanSubject from "./DoubanSubject";
|
import DoubanSubject from "./DoubanSubject";
|
||||||
|
|
||||||
export default class DoubanMusicSubject extends DoubanSubject {
|
export default class DoubanMusicSubject extends DoubanSubject {
|
||||||
actor:string[];
|
actor: string[];
|
||||||
albumType:string;
|
albumType: string;
|
||||||
medium:string;
|
medium: string;
|
||||||
numberOfRecords:number;
|
numberOfRecords: number;
|
||||||
barcode:string;
|
barcode: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
import {AggregateRating, Person, WithContext} from 'schema-dts';
|
|
||||||
|
|
||||||
import DoubanSubject from "./DoubanSubject";
|
import DoubanSubject from "./DoubanSubject";
|
||||||
|
|
||||||
export default class DoubanNoteSubject extends DoubanSubject {
|
export default class DoubanNoteSubject extends DoubanSubject {
|
||||||
author:string;
|
author: string;
|
||||||
authorUrl:string;
|
authorUrl: string;
|
||||||
content:string;
|
content: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import DoubanSubject from "./DoubanSubject";
|
import DoubanSubject from "./DoubanSubject";
|
||||||
|
|
||||||
export default class DoubanSearchResultSubject extends DoubanSubject {
|
export default class DoubanSearchResultSubject extends DoubanSubject {
|
||||||
cast:string;
|
cast: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,16 +2,16 @@ export default class DoubanSubject {
|
|||||||
id: string;
|
id: string;
|
||||||
title: string;
|
title: string;
|
||||||
type: string;
|
type: string;
|
||||||
score:number;
|
score: number;
|
||||||
image:string;
|
image: string;
|
||||||
url: string;
|
url: string;
|
||||||
desc: string;
|
desc: string;
|
||||||
publisher:string;
|
publisher: string;
|
||||||
datePublished:Date;
|
datePublished: Date;
|
||||||
genre:string[];
|
genre: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const ParameterMap:Map<string, string> = new Map([
|
const ParameterMap: Map<string, string> = new Map([
|
||||||
['id', ''],
|
['id', ''],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
import {AggregateRating, Person, WithContext} from 'schema-dts';
|
import {AggregateRating, Person} from 'schema-dts';
|
||||||
|
|
||||||
import DoubanSubject from "./DoubanSubject";
|
import DoubanSubject from "./DoubanSubject";
|
||||||
|
|
||||||
export default class DoubanTeleplaySubject extends DoubanSubject {
|
export default class DoubanTeleplaySubject extends DoubanSubject {
|
||||||
director:Person[];
|
director: Person[];
|
||||||
author:Person[];
|
author: Person[];
|
||||||
actor:Person[];
|
actor: Person[];
|
||||||
aggregateRating:AggregateRating;
|
aggregateRating: AggregateRating;
|
||||||
datePublished:Date;
|
datePublished: Date;
|
||||||
image:string;
|
image: string;
|
||||||
genre:string[];
|
genre: string[];
|
||||||
originalTitle:string;
|
originalTitle: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
export default class PropertyExplainSubject {
|
export default class PropertyExplainSubject {
|
||||||
name:string;
|
name: string;
|
||||||
desc:string;
|
desc: string;
|
||||||
example:string;
|
example: string;
|
||||||
|
|
||||||
constructor(name:string, desc:string, example:string) {
|
constructor(name: string, desc: string, example: string) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.desc = desc;
|
this.desc = desc;
|
||||||
this.example = example;
|
this.example = example;
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { Editor, FuzzySuggestModal } from "obsidian";
|
import {Editor, FuzzySuggestModal} from "obsidian";
|
||||||
|
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject";
|
import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject";
|
||||||
import { log } from "src/utils/Logutil";
|
import {log} from "src/utils/Logutil";
|
||||||
import {i18nHelper} from "../../../lang/helper";
|
import {i18nHelper} from "../../../lang/helper";
|
||||||
|
|
||||||
export {DoubanFuzzySuggester}
|
export {DoubanFuzzySuggester}
|
||||||
@ -12,7 +12,7 @@ class DoubanFuzzySuggester extends FuzzySuggestModal<DoubanSearchResultSubject>
|
|||||||
|
|
||||||
public editor: Editor;
|
public editor: Editor;
|
||||||
private plugin: DoubanPlugin;
|
private plugin: DoubanPlugin;
|
||||||
private doubanSearchResultExtract:DoubanSearchResultSubject[]
|
private doubanSearchResultExtract: DoubanSearchResultSubject[]
|
||||||
|
|
||||||
constructor(plugin: DoubanPlugin, editor: Editor) {
|
constructor(plugin: DoubanPlugin, editor: Editor) {
|
||||||
super(app);
|
super(app);
|
||||||
@ -23,13 +23,12 @@ class DoubanFuzzySuggester extends FuzzySuggestModal<DoubanSearchResultSubject>
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
getItems(): DoubanSearchResultSubject[] {
|
getItems(): DoubanSearchResultSubject[] {
|
||||||
return this.doubanSearchResultExtract;
|
return this.doubanSearchResultExtract;
|
||||||
}
|
}
|
||||||
|
|
||||||
getItemText(item: DoubanSearchResultSubject): string {
|
getItemText(item: DoubanSearchResultSubject): string {
|
||||||
let text:string = item.type + "/" + (item.score ? item.score : '-') + "/" + item.title + "/" + item.cast;
|
let text: string = item.type + "/" + (item.score ? item.score : '-') + "/" + item.title + "/" + item.cast;
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +37,7 @@ class DoubanFuzzySuggester extends FuzzySuggestModal<DoubanSearchResultSubject>
|
|||||||
this.plugin.doubanExtractHandler.handle(item, this.editor);
|
this.plugin.doubanExtractHandler.handle(item, this.editor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public showSearchList(doubanSearchResultExtractList:DoubanSearchResultSubject[]) {
|
public showSearchList(doubanSearchResultExtractList: DoubanSearchResultSubject[]) {
|
||||||
this.doubanSearchResultExtract = doubanSearchResultExtractList;
|
this.doubanSearchResultExtract = doubanSearchResultExtractList;
|
||||||
this.start();
|
this.start();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { App, Editor, Modal, TextComponent } from "obsidian";
|
import {App, Editor, Modal, TextComponent} from "obsidian";
|
||||||
|
|
||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { i18nHelper } from "src/lang/helper";
|
import {i18nHelper} from "src/lang/helper";
|
||||||
|
|
||||||
export class DoubanSearchModal extends Modal {
|
export class DoubanSearchModal extends Modal {
|
||||||
searchTerm: string;
|
searchTerm: string;
|
||||||
@ -15,9 +15,9 @@ export class DoubanSearchModal extends Modal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onOpen() {
|
onOpen() {
|
||||||
let { contentEl } = this;
|
let {contentEl} = this;
|
||||||
|
|
||||||
contentEl.createEl("h3", { text: i18nHelper.getMessage('110003') });
|
contentEl.createEl("h3", {text: i18nHelper.getMessage('110003')});
|
||||||
|
|
||||||
const inputs = contentEl.createDiv("inputs");
|
const inputs = contentEl.createDiv("inputs");
|
||||||
const searchInput = new TextComponent(inputs).onChange((searchTerm) => {
|
const searchInput = new TextComponent(inputs).onChange((searchTerm) => {
|
||||||
@ -33,7 +33,6 @@ export class DoubanSearchModal extends Modal {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const controls = contentEl.createDiv("controls");
|
const controls = contentEl.createDiv("controls");
|
||||||
const searchButton = controls.createEl("button", {
|
const searchButton = controls.createEl("button", {
|
||||||
text: i18nHelper.getMessage('110004'),
|
text: i18nHelper.getMessage('110004'),
|
||||||
@ -45,7 +44,7 @@ export class DoubanSearchModal extends Modal {
|
|||||||
searchButton.addClass("obsidian_douban_search_button");
|
searchButton.addClass("obsidian_douban_search_button");
|
||||||
|
|
||||||
searchButton.addEventListener("click", this.close.bind(this));
|
searchButton.addEventListener("click", this.close.bind(this));
|
||||||
const cancelButton = controls.createEl("button", { text: i18nHelper.getMessage('110005') });
|
const cancelButton = controls.createEl("button", {text: i18nHelper.getMessage('110005')});
|
||||||
cancelButton.addEventListener("click", this.close.bind(this));
|
cancelButton.addEventListener("click", this.close.bind(this));
|
||||||
cancelButton.addClass("obsidian_douban_search_button");
|
cancelButton.addClass("obsidian_douban_search_button");
|
||||||
|
|
||||||
@ -53,7 +52,7 @@ export class DoubanSearchModal extends Modal {
|
|||||||
|
|
||||||
|
|
||||||
async onClose() {
|
async onClose() {
|
||||||
let { contentEl } = this;
|
let {contentEl} = this;
|
||||||
|
|
||||||
contentEl.empty();
|
contentEl.empty();
|
||||||
if (this.searchTerm) {
|
if (this.searchTerm) {
|
||||||
@ -61,4 +60,4 @@ export class DoubanSearchModal extends Modal {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
import { DoubanPluginSettings, doubanHeaders } from 'src/douban/Douban';
|
import {DoubanPluginSettings} from 'src/douban/Douban';
|
||||||
|
|
||||||
import DoubanSearchResultSubject from '../model/DoubanSearchResultSubject';
|
import DoubanSearchResultSubject from '../model/DoubanSearchResultSubject';
|
||||||
import SearchParserHandler from './SearchParser';
|
import SearchParserHandler from './SearchParser';
|
||||||
import { log } from 'src/utils/Logutil';
|
import {log} from 'src/utils/Logutil';
|
||||||
import {request, RequestUrlParam} from "obsidian";
|
import {request, RequestUrlParam} from "obsidian";
|
||||||
import {i18nHelper} from "../../../lang/helper";
|
import {i18nHelper} from "../../../lang/helper";
|
||||||
import { load } from 'cheerio';
|
import {load} from 'cheerio';
|
||||||
|
|
||||||
export default class Searcher {
|
export default class Searcher {
|
||||||
static search(searchItem:string, doubanSettings:DoubanPluginSettings):Promise<DoubanSearchResultSubject[]> {
|
static search(searchItem: string, doubanSettings: DoubanPluginSettings): Promise<DoubanSearchResultSubject[]> {
|
||||||
let requestUrlParam:RequestUrlParam = {
|
let requestUrlParam: RequestUrlParam = {
|
||||||
url: doubanSettings.searchUrl + searchItem,
|
url: doubanSettings.searchUrl + searchItem,
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: JSON.parse(doubanSettings.searchHeaders),
|
headers: JSON.parse(doubanSettings.searchHeaders),
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { CheerioAPI } from "cheerio";
|
import {CheerioAPI} from "cheerio";
|
||||||
import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject";
|
import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject";
|
||||||
|
|
||||||
export default class SearchParserHandler {
|
export default class SearchParserHandler {
|
||||||
static parseSearch(dataHtml:CheerioAPI):DoubanSearchResultSubject[] {
|
static parseSearch(dataHtml: CheerioAPI): DoubanSearchResultSubject[] {
|
||||||
return dataHtml('.result')
|
return dataHtml('.result')
|
||||||
.get()
|
.get()
|
||||||
.map((i:any) => {
|
.map((i: any) => {
|
||||||
const item = dataHtml(i);
|
const item = dataHtml(i);
|
||||||
let idPattern = /(\d){5,10}/g;
|
let idPattern = /(\d){5,10}/g;
|
||||||
let urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g;
|
let urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g;
|
||||||
@ -17,7 +17,7 @@ export default class SearchParserHandler {
|
|||||||
let title = item.find("div.content > div > h3 > a").text();
|
let title = item.find("div.content > div > h3 > a").text();
|
||||||
let type = item.find("div.content > div > h3 > span").text();
|
let type = item.find("div.content > div > h3 > span").text();
|
||||||
let desc = item.find("div.content > p").text();
|
let desc = item.find("div.content > p").text();
|
||||||
const result:DoubanSearchResultSubject = {
|
const result: DoubanSearchResultSubject = {
|
||||||
id: ececResult ? ececResult[0] : '',
|
id: ececResult ? ececResult[0] : '',
|
||||||
title: title ? title : '-',
|
title: title ? title : '-',
|
||||||
score: score ? Number(score) : null,
|
score: score ? Number(score) : null,
|
||||||
|
|||||||
@ -20,4 +20,4 @@ export default class I18nHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const i18nHelper:I18nHelper = new I18nHelper();
|
export const i18nHelper: I18nHelper = new I18nHelper();
|
||||||
|
|||||||
@ -9,7 +9,7 @@ export default {
|
|||||||
'110006': `sync douban broadcast ot Obsidian`,
|
'110006': `sync douban broadcast ot Obsidian`,
|
||||||
|
|
||||||
//DoubanSettingTab
|
//DoubanSettingTab
|
||||||
'1201' : `Obsidian Douban`,
|
'1201': `Obsidian Douban`,
|
||||||
'120001': `Douban Search Url`,
|
'120001': `Douban Search Url`,
|
||||||
'120002': `Douban search page request address. `,
|
'120002': `Douban search page request address. `,
|
||||||
'120003': `First go to:`,
|
'120003': `First go to:`,
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
//简体中文
|
//简体中文
|
||||||
import DoubanBookSubject from "@App/data/model/DoubanBookSubject";
|
|
||||||
import {extract} from "jest-docblock";
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
//main.ts
|
//main.ts
|
||||||
@ -12,7 +10,7 @@ export default {
|
|||||||
'110006': `同步豆瓣广播至Obsidian`,
|
'110006': `同步豆瓣广播至Obsidian`,
|
||||||
|
|
||||||
//DoubanSettingTab
|
//DoubanSettingTab
|
||||||
'1201' : `Obsidian-豆瓣`,
|
'1201': `Obsidian-豆瓣`,
|
||||||
'120001': `豆瓣搜索地址`,
|
'120001': `豆瓣搜索地址`,
|
||||||
'120002': `豆瓣搜索页面请求地址, 通常是网页搜索的地址. `,
|
'120002': `豆瓣搜索页面请求地址, 通常是网页搜索的地址. `,
|
||||||
'120003': `先访问:`,
|
'120003': `先访问:`,
|
||||||
@ -116,7 +114,10 @@ export default {
|
|||||||
score: {desc: `评分`, example: `9.4`},
|
score: {desc: `评分`, example: `9.4`},
|
||||||
image: {desc: `图片URL`, example: `https://img1.doubanio.com/view/subject/l/public/s28261247.jpg`},
|
image: {desc: `图片URL`, example: `https://img1.doubanio.com/view/subject/l/public/s28261247.jpg`},
|
||||||
url: {desc: `豆瓣URL`, example: `https://book.douban.com/subject/25982198/`},
|
url: {desc: `豆瓣URL`, example: `https://book.douban.com/subject/25982198/`},
|
||||||
desc: {desc: `简述`, example: `戴维·迈尔斯的《社会心理学》是美国700 多所大专院校社会心理学教学所采用的教材,自出版以来深受广大师生和社会心理学爱好者的喜爱,并被翻译成多种语言,有着广泛的影响力。本书译自第11 版。全书共分四...`},
|
desc: {
|
||||||
|
desc: `简述`,
|
||||||
|
example: `戴维·迈尔斯的《社会心理学》是美国700 多所大专院校社会心理学教学所采用的教材,自出版以来深受广大师生和社会心理学爱好者的喜爱,并被翻译成多种语言,有着广泛的影响力。本书译自第11 版。全书共分四...`
|
||||||
|
},
|
||||||
publisher: {desc: `出版社`, example: `人民邮电出版社`},
|
publisher: {desc: `出版社`, example: `人民邮电出版社`},
|
||||||
datePublished: {desc: `出版时间`, example: `2014-10-1`},
|
datePublished: {desc: `出版时间`, example: `2014-10-1`},
|
||||||
genre: {desc: `类型`, example: `社会科学`},
|
genre: {desc: `类型`, example: `社会科学`},
|
||||||
|
|||||||
@ -1,35 +1,34 @@
|
|||||||
import { Notice } from "obsidian";
|
import {Notice} from "obsidian";
|
||||||
import SchemaOrg from "./SchemaOrg";
|
import {i18nHelper} from "src/lang/helper";
|
||||||
import { i18nHelper } from "src/lang/helper";
|
|
||||||
|
|
||||||
class Logger {
|
class Logger {
|
||||||
|
|
||||||
public error(e:any):any {
|
public error(e: any): any {
|
||||||
new Notice(i18nHelper.getMessage('130201') + e);
|
new Notice(i18nHelper.getMessage('130201') + e);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
public warn(e:any):any {
|
public warn(e: any): any {
|
||||||
new Notice(i18nHelper.getMessage('130301') + e);
|
new Notice(i18nHelper.getMessage('130301') + e);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
public info(e:any):any {
|
public info(e: any): any {
|
||||||
console.log(`Douban Plugin info:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`);
|
console.log(`Douban Plugin info:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
public trace(e:any):any {
|
public trace(e: any): any {
|
||||||
// return e;
|
// return e;
|
||||||
console.log(`Douban Plugin trace:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`);
|
console.log(`Douban Plugin trace:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
public traceN(notion:string, e:any):any {
|
public traceN(notion: string, e: any): any {
|
||||||
// return e;
|
// return e;
|
||||||
console.log(`${notion} ${typeof e == 'string' ? e : JSON.stringify(e)}`);
|
console.log(`${notion} ${typeof e == 'string' ? e : JSON.stringify(e)}`);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const log:Logger = new Logger();
|
export const log: Logger = new Logger();
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import { Person } from "schema-dts";
|
import {Person} from "schema-dts";
|
||||||
|
|
||||||
export default class SchemaOrg {
|
export default class SchemaOrg {
|
||||||
public static getPersonName(p:Person):string {
|
public static getPersonName(p: Person): string {
|
||||||
if(isString(p)) {
|
if (isString(p)) {
|
||||||
return p;
|
return p;
|
||||||
}else {
|
} else {
|
||||||
let name: any = getProperty(p, 'name');
|
let name: any = getProperty(p, 'name');
|
||||||
return name + "";
|
return name + "";
|
||||||
}
|
}
|
||||||
@ -13,9 +13,9 @@ export default class SchemaOrg {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function isString(s:any): s is string {
|
function isString(s: any): s is string {
|
||||||
return typeof s === 'string';
|
return typeof s === 'string';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function getProperty<T, K extends keyof T>(o: T, name: K): T[K] {
|
function getProperty<T, K extends keyof T>(o: T, name: K): T[K] {
|
||||||
|
|||||||
@ -1,15 +1,12 @@
|
|||||||
import {i18nHelper} from "../lang/helper";
|
|
||||||
|
|
||||||
export default class YamlUtil {
|
export default class YamlUtil {
|
||||||
|
|
||||||
|
|
||||||
|
public static hasSpecialChar(str: string): boolean {
|
||||||
public static hasSpecialChar(str:string):boolean {
|
|
||||||
return SPECIAL_CHAR_REG.test(str);
|
return SPECIAL_CHAR_REG.test(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static handleSpecialChar(text: string):string {
|
public static handleSpecialChar(text: string): string {
|
||||||
// return this.hasSpecialChar(text) ? text.replace(SPECIAL_CHAR_REG, (match, p1) => {
|
// return this.hasSpecialChar(text) ? text.replace(SPECIAL_CHAR_REG, (match, p1) => {
|
||||||
// return SPECIAL_CHAR_REG_REPLACE.get(p1) || p1;
|
// return SPECIAL_CHAR_REG_REPLACE.get(p1) || p1;
|
||||||
// }) : text;
|
// }) : text;
|
||||||
@ -26,7 +23,7 @@ export default class YamlUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const SPECIAL_CHAR_REG = /[{}\[\]&*#?|\-<>=!%@:`,\n]/;
|
const SPECIAL_CHAR_REG = /[{}\[\]&*#?|\-<>=!%@:`,\n]/;
|
||||||
const SPECIAL_CHAR_REG_REPLACE:Map<string, string> = new Map([
|
const SPECIAL_CHAR_REG_REPLACE: Map<string, string> = new Map([
|
||||||
['{', '\\{'],
|
['{', '\\{'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user