From 3b7a2fb3a1edbf819668f6d4bc9a8ea43d12742e Mon Sep 17 00:00:00 2001 From: wanxp <977741432@qq.com> Date: Sat, 3 Dec 2022 17:08:19 +0800 Subject: [PATCH] fix movie/teleplay actor and director name wrong --- src/org/wanxp/constant/DefaultSettings.ts | 1 + .../data/handler/DoubanAbstractLoadHandler.ts | 69 ++++++++++++++++++- .../data/handler/DoubanMovieLoadHandler.ts | 5 ++ .../data/handler/DoubanTeleplayLoadHandler.ts | 5 ++ .../douban/setting/OutputSettingsHelper.ts | 13 ++++ .../setting/model/DoubanPluginSetting.ts | 2 + src/org/wanxp/lang/locale/en.ts | 4 ++ src/org/wanxp/lang/locale/zh-cn.ts | 4 +- src/org/wanxp/net/NetFileHandler.ts | 5 +- 9 files changed, 103 insertions(+), 5 deletions(-) diff --git a/src/org/wanxp/constant/DefaultSettings.ts b/src/org/wanxp/constant/DefaultSettings.ts index 9d77ba0..e72cabe 100644 --- a/src/org/wanxp/constant/DefaultSettings.ts +++ b/src/org/wanxp/constant/DefaultSettings.ts @@ -29,6 +29,7 @@ export const DEFAULT_SETTINGS: DoubanPluginSetting = { ], loginCookiesContent: '', cacheImage: true, + cacheHighQuantityImage: true, attachmentPath: 'assets', syncHandledDataArray: [], } diff --git a/src/org/wanxp/douban/data/handler/DoubanAbstractLoadHandler.ts b/src/org/wanxp/douban/data/handler/DoubanAbstractLoadHandler.ts index 9e5282d..7110d92 100644 --- a/src/org/wanxp/douban/data/handler/DoubanAbstractLoadHandler.ts +++ b/src/org/wanxp/douban/data/handler/DoubanAbstractLoadHandler.ts @@ -23,6 +23,8 @@ import {DoubanUserParameter, UserStateSubject} from "../model/UserStateSubject"; import {DoubanSubjectState, DoubanSubjectStateRecords} from "../../../constant/DoubanUserState"; import DoubanLoginModel from "../../component/DoubanLoginModel"; import DoubanHumanCheckModel from "../../component/DoubanHumanCheckModel"; +import DoubanMovieSubject from "../model/DoubanMovieSubject"; +import {Person} from "schema-dts"; export default abstract class DoubanAbstractLoadHandler implements DoubanSubjectLoadHandler { @@ -181,6 +183,33 @@ export default abstract class DoubanAbstractLoadHandler return this.getPersonNameByMode(name, context.settings.personNameMode); } + getPersonName2(originalName: string, chineseName: string, context: HandleContext): string { + return this.getPersonNameByMode2(originalName, chineseName, context.settings.personNameMode); + } + + + getPersonNameByMode2(originalName: string, chineseName: string, personNameMode: string): string { + if (!originalName || !personNameMode) { + return ""; + } + let resultName: string; + switch (personNameMode) { + case PersonNameMode.CH_NAME: + resultName = chineseName; + break; + case PersonNameMode.EN_NAME: + resultName = originalName.trim().replaceAll(chineseName, '').trim(); + if (!resultName) { + resultName = originalName; + } + break; + default: + resultName = originalName; + } + return resultName; + } + + getPersonNameByMode(name: string, personNameMode: string): string { if (!name || !personNameMode) { return ""; @@ -423,13 +452,28 @@ export default abstract class DoubanAbstractLoadHandler if (!extract.image || (syncConfig && !syncConfig.cacheImage) || !context.settings.cacheImage) { return; } - let image = extract.image; + const image = extract.image; const filename = image.split('/').pop(); let folder = syncConfig? syncConfig.attachmentPath : context.settings.attachmentPath; if (!folder) { folder = DEFAULT_SETTINGS.attachmentPath; } - const {success, filepath} = await context.netFileHandler.downloadFile(image, folder, filename); + if (context.settings.cacheHighQuantityImage && context.userComponent.isLogin()) { + try { + const fileNameSpilt = filename.split('.'); + const highImage = `https://img9.doubanio.com/view/photo/raw/public/${fileNameSpilt.first()}.jpg` + const highFilename = fileNameSpilt.first() + '.jpg'; + const {success, filepath} = await context.netFileHandler.downloadFile(highImage, folder, highFilename, context); + if (success) { + extract.image = filepath; + return; + } + }catch (e) { + console.error(e); + console.error('下载高清封面失败,将会使用普通封面') + } + } + const {success, filepath} = await context.netFileHandler.downloadFile(image, folder, filename, context); if (success) { extract.image = filepath; } @@ -447,4 +491,25 @@ export default abstract class DoubanAbstractLoadHandler } + + handlePersonNameByMeta(html: CheerioAPI, movie: DoubanSubject, context: HandleContext, + metaProperty:string, objectProperty:string) { + let metaProperties: string[] = html(`head > meta[property='${metaProperty}']`).get() + .map((e) => { + return html(e).attr('content'); + }); + // @ts-ignore + movie[objectProperty] + // @ts-ignore + .filter((p:Person) => p.name) + // @ts-ignore + .map((p:Person) => { + // @ts-ignore + const persons = metaProperties.filter((a) => p.name.indexOf(a) >= 0); + if (persons) { + // @ts-ignore + p.name = this.getPersonName2(p.name, persons[0], context); + } + }) + } } diff --git a/src/org/wanxp/douban/data/handler/DoubanMovieLoadHandler.ts b/src/org/wanxp/douban/data/handler/DoubanMovieLoadHandler.ts index 8ca49a4..eecc9a0 100644 --- a/src/org/wanxp/douban/data/handler/DoubanMovieLoadHandler.ts +++ b/src/org/wanxp/douban/data/handler/DoubanMovieLoadHandler.ts @@ -10,6 +10,7 @@ import {PersonNameMode, SupportType, TemplateKey} from "../../../constant/Consts import {UserStateSubject} from "../model/UserStateSubject"; import {moment} from "obsidian"; import YamlUtil, {SPECIAL_CHAR_REG, TITLE_ALIASES_SPECIAL_CHAR_REG_G} from "../../../utils/YamlUtil"; +import { Person } from 'schema-dts'; export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler { @@ -99,6 +100,9 @@ export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler = new Map( diff --git a/src/org/wanxp/douban/data/handler/DoubanTeleplayLoadHandler.ts b/src/org/wanxp/douban/data/handler/DoubanTeleplayLoadHandler.ts index a753c18..08856f4 100644 --- a/src/org/wanxp/douban/data/handler/DoubanTeleplayLoadHandler.ts +++ b/src/org/wanxp/douban/data/handler/DoubanTeleplayLoadHandler.ts @@ -102,6 +102,11 @@ export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler { + toggleComponent + .setTooltip(i18nHelper.getMessage('121437')) + .setValue(manager.plugin.settings.cacheHighQuantityImage) + .onChange(async (value) => { + manager.plugin.settings.cacheHighQuantityImage = value; + await manager.plugin.saveSettings(); + constructAttachmentFileSettingsUI(containerEl, manager); + }); + }); } } diff --git a/src/org/wanxp/douban/setting/model/DoubanPluginSetting.ts b/src/org/wanxp/douban/setting/model/DoubanPluginSetting.ts index 4a862c1..4ab30ac 100644 --- a/src/org/wanxp/douban/setting/model/DoubanPluginSetting.ts +++ b/src/org/wanxp/douban/setting/model/DoubanPluginSetting.ts @@ -21,6 +21,8 @@ export interface DoubanPluginSetting { customProperties: CustomProperty[], loginCookiesContent: string, cacheImage: boolean, + cacheHighQuantityImage: boolean, + attachmentPath: string, syncHandledDataArray: SyncHandledData[], } diff --git a/src/org/wanxp/lang/locale/en.ts b/src/org/wanxp/lang/locale/en.ts index ceb5f87..dd6893b 100644 --- a/src/org/wanxp/lang/locale/en.ts +++ b/src/org/wanxp/lang/locale/en.ts @@ -194,6 +194,10 @@ PS: This file could be delete if you want to. '121432': `Attachment folder`, '121433': `Attachment file created from Obsidian-Douban will be placed in this folder, If blank, they will be placed in the default location for this vault.`, '121434': `assets`, + '121435': `Save High Definition Cover`, + '121436': `High Definition Cover looks better but it will take more space, and you must login douban in this plugin`, + '121437': `Please login first, Then this function could be enable`, + '121501': `Note folder`, diff --git a/src/org/wanxp/lang/locale/zh-cn.ts b/src/org/wanxp/lang/locale/zh-cn.ts index aa7d089..ead0ef9 100644 --- a/src/org/wanxp/lang/locale/zh-cn.ts +++ b/src/org/wanxp/lang/locale/zh-cn.ts @@ -206,7 +206,9 @@ export default { '121432': `附件存放位置`, '121433': `保存的附件将会存放至该文件夹中. 如果为空, 笔记将会存放到默认位置(assets) `, '121434': `assets`, - + '121435': `保存高清封面`, + '121436': `高清封面图片质量更高清晰度更好,并且需要您在此插件登录豆瓣才能生效,若未登录则默认使用低精度版本封面`, + '121437': `登录后此功能才会生效`, '121501': `笔记存放位置`, diff --git a/src/org/wanxp/net/NetFileHandler.ts b/src/org/wanxp/net/NetFileHandler.ts index 49a5889..95f18ea 100644 --- a/src/org/wanxp/net/NetFileHandler.ts +++ b/src/org/wanxp/net/NetFileHandler.ts @@ -3,6 +3,7 @@ import {log} from "../utils/Logutil"; import {i18nHelper} from "../lang/helper"; import FileHandler from "../file/FileHandler"; import {FileUtil} from "../utils/FileUtil"; +import HandleContext from "../douban/data/model/HandleContext"; export default class NetFileHandler { private fileHandler: FileHandler; @@ -11,12 +12,12 @@ export default class NetFileHandler { this.fileHandler = fileHandler; } - async downloadFile(url: string, folder:string, filename: string): Promise<{ success: boolean, error:string, filepath: string }> { + async downloadFile(url: string, folder:string, filename: string, context:HandleContext): Promise<{ success: boolean, error:string, filepath: string }> { const requestUrlParam: RequestUrlParam = { url: url, method: "GET", throw: true, - headers: {} + headers: {Cookie: context.settings.loginCookiesContent} }; const filePath:string = FileUtil.join(folder, filename); return requestUrl(requestUrlParam)