fix login and teleplay

This commit is contained in:
wanxp 2022-12-02 23:00:22 +08:00
parent 92e30cf97d
commit c49750b848
16 changed files with 3481 additions and 3408 deletions

@ -1,7 +1,7 @@
{ {
"id": "obsidian-douban-plugin", "id": "obsidian-douban-plugin",
"name": "Douban", "name": "Douban",
"version": "1.7.6", "version": "1.7.7",
"minAppVersion": "0.12.0", "minAppVersion": "0.12.0",
"description": "This is a plugin that can import movies/books/musics/notes/games info data from Douban for Obsidian .", "description": "This is a plugin that can import movies/books/musics/notes/games info data from Douban for Obsidian .",
"author": "Wanxp", "author": "Wanxp",

2
package-lock.json generated

@ -1,6 +1,6 @@
{ {
"name": "obsidian-douban-plugin", "name": "obsidian-douban-plugin",
"version": "v1.5.2", "version": "1.7.7",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

@ -1,6 +1,6 @@
{ {
"name": "obsidian-douban-plugin", "name": "obsidian-douban-plugin",
"version": "1.7.6", "version": "1.7.7",
"description": "This is a plugin for Obsidian (https://obsidian.md) that can import data from Douban (https://www.douban.com/).", "description": "This is a plugin for Obsidian (https://obsidian.md) that can import data from Douban (https://www.douban.com/).",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {

@ -5,6 +5,7 @@ import {DoubanSettingTab} from "../setting/DoubanSettingTab";
import SettingsManager from "../setting/SettingsManager"; import SettingsManager from "../setting/SettingsManager";
import {constructDoubanTokenSettingsUI} from "../setting/BasicSettingsHelper"; import {constructDoubanTokenSettingsUI} from "../setting/BasicSettingsHelper";
import StringUtil from "../../utils/StringUtil"; import StringUtil from "../../utils/StringUtil";
import {Integer} from "schema-dts";
// Credits go to zhaohongxuan's Weread Plugin : https://github.com/zhaohongxuan/obsidian-weread-plugin // Credits go to zhaohongxuan's Weread Plugin : https://github.com/zhaohongxuan/obsidian-weread-plugin
@ -17,7 +18,8 @@ export default class DoubanLoginModel {
this.containerEl = containerEl; this.containerEl = containerEl;
this.settingsManager = settingsManager; this.settingsManager = settingsManager;
this.settingsManager.debug(`配置界面:初始化登录界面`) this.settingsManager.debug(`配置界面:初始化登录界面`)
const { remote } = require('electron'); const { remote} = require('electron');
const { BrowserWindow: RemoteBrowserWindow } = remote; const { BrowserWindow: RemoteBrowserWindow } = remote;
this.modal = new RemoteBrowserWindow({ this.modal = new RemoteBrowserWindow({
parent: remote.getCurrentWindow(), parent: remote.getCurrentWindow(),
@ -35,6 +37,26 @@ export default class DoubanLoginModel {
constructDoubanTokenSettingsUI(this.containerEl, this.settingsManager); constructDoubanTokenSettingsUI(this.containerEl, this.settingsManager);
}); });
this.modal.webContents.on('did-fail-load', (event:Event, errorCode:Integer ) => {
// 例如, 当 Ctrl/Cmd are down 被按下,仅开启应用程序菜单键盘快捷键。
this.settingsManager.debug('加载失败' + errorCode);
})
this.modal.webContents.on('did-fail-load', (event:Event) => {
// 例如, 当 Ctrl/Cmd are down 被按下,仅开启应用程序菜单键盘快捷键。
this.settingsManager.debug('加载成功');
})
this.modal.webContents.on('did-navigate', async (_event: any, _url: string, httpResponseCode: number) => {
if (httpResponseCode == 403) {
// what you want to do
this.settingsManager.debug(`配置界面:登录界面,加载页面失败,HttpStatus:${httpResponseCode},URL:${_url}`);
await this.modal.loadURL('data:text/html;charset=utf-8;base64,55Sx5LqO5aSa5qyh6aKR57mB6K+35rGC5pWw5o2u77yM6LGG55Oj5b2T5YmN5pqC5pe25LiN5Y+v55SoLiDor7fkuo4xMuWwj+aXtuaIljI05bCP5pe25ZCO5YaN6YeN6K+V77yM5oiW6YeN572u5L2g55qE572R57ucKOWmgumHjeaWsOaLqOWPt+aIluabtOaNoue9kee7nCk=');
}else {
this.settingsManager.debug(`配置界面:登录界面,加载页面成功,HttpStatus:${httpResponseCode},URL:${_url}`);
}
});
const session = this.modal.webContents.session; const session = this.modal.webContents.session;
const filter = { const filter = {
urls: ['https://www.douban.com/','https://accounts.douban.com/','https://accounts.douban.com/passport/login'] urls: ['https://www.douban.com/','https://accounts.douban.com/','https://accounts.douban.com/passport/login']
@ -49,13 +71,13 @@ export default class DoubanLoginModel {
let user = await settingsManager.plugin.userComponent.loginCookie(cookieArr); let user = await settingsManager.plugin.userComponent.loginCookie(cookieArr);
if (user && user.login) { if (user && user.login) {
this.settingsManager.debug(`配置界面:登录界面豆瓣登录成功, 信息:id:${StringUtil.confuse(user.id)}:, 用户名:${StringUtil.confuse(user.name)}`) this.settingsManager.debug(`配置界面:登录界面豆瓣登录成功, 信息:id:${StringUtil.confuse(user.id)}:, 用户名:${StringUtil.confuse(user.name)}`)
session.clearStorageData(() => {
this.settingsManager.debug(`配置界面:登录界面 登录前本地清理缓存成功2`)
});
this.onClose(); this.onClose();
return; return;
} }
this.settingsManager.debug(`配置界面:登录界面豆瓣登录失败, cookies未能成功获取用户信息`) this.settingsManager.debug(`配置界面:登录界面豆瓣登录失败, cookies未能成功获取用户信息`)
} else {
this.settingsManager.debug(`配置界面:登录界面请求检测没有获取到Cookie`)
this.onReload();
} }
}); });
} }
@ -75,6 +97,7 @@ export default class DoubanLoginModel {
onClose() { onClose() {
this.settingsManager.debug(`配置界面:登录界面关闭, 自动退出登录界面`) this.settingsManager.debug(`配置界面:登录界面关闭, 自动退出登录界面`)
// this.modal.destroy();
this.modal.close(); this.modal.close();
} }

@ -40,12 +40,12 @@ export default class DoubanLogoutModel {
this.settingsManager.debug(`配置界面:登出界面请求头检测:${details.url}`) this.settingsManager.debug(`配置界面:登出界面请求头检测:${details.url}`)
const cookies = details.requestHeaders['Cookie']; const cookies = details.requestHeaders['Cookie'];
// const wr_name = cookieArr.find((cookie) => cookie.name == 'wr_name').value; // const wr_name = cookieArr.find((cookie) => cookie.name == 'wr_name').value;
if (cookies && cookies.indexOf('dbcl2') < 0) { // if (cookies && cookies.indexOf('dbcl2') < 0) {
this.settingsManager.debug(`配置界面:登出界面退出登录请求检测成功,准备退出登录`) this.settingsManager.debug(`配置界面:登出界面退出登录请求检测成功,准备退出登录`)
this.settingsManager.plugin.userComponent.logout(); this.settingsManager.plugin.userComponent.logout();
this.settingsManager.debug(`配置界面:登出界面退出登录成功`) this.settingsManager.debug(`配置界面:登出界面退出登录成功`);
this.onClose(); this.onClose();
} // }
}); });
} }
@ -55,7 +55,8 @@ export default class DoubanLogoutModel {
} }
onClose() { onClose() {
this.settingsManager.debug(`配置界面:登出界面关闭, 自动退出登出界面`) this.settingsManager.debug(`配置界面:登出界面关闭, 自动退出登出界面`);
// this.modal.destroy();
this.modal.close(); this.modal.close();
} }

@ -9,6 +9,7 @@ import HandleContext from "../model/HandleContext";
import {PersonNameMode, SupportType, TemplateKey} from "../../../constant/Constsant"; import {PersonNameMode, SupportType, TemplateKey} from "../../../constant/Constsant";
import {UserStateSubject} from "../model/UserStateSubject"; import {UserStateSubject} from "../model/UserStateSubject";
import {moment} from "obsidian"; import {moment} from "obsidian";
import YamlUtil, {SPECIAL_CHAR_REG, TITLE_ALIASES_SPECIAL_CHAR_REG_G} from "../../../utils/YamlUtil";
export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<DoubanMovieSubject> { export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<DoubanMovieSubject> {
@ -27,7 +28,7 @@ export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<Do
.replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "") .replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "")
.replaceAll("{{actor}}", extract.actor ? extract.actor.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "") .replaceAll("{{actor}}", extract.actor ? extract.actor.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "")
.replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "") .replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "")
.replaceAll("{{aliases}}", extract.aliases ? extract.aliases.join(settings.arraySpilt) : "") .replaceAll("{{aliases}}", extract.aliases ? extract.aliases.map(a=>a.replace(TITLE_ALIASES_SPECIAL_CHAR_REG_G, '_')).join(settings.arraySpilt) : "")
.replaceAll("{{country}}", extract.country ? extract.country.join(settings.arraySpilt) : "") .replaceAll("{{country}}", extract.country ? extract.country.join(settings.arraySpilt) : "")
.replaceAll("{{language}}", extract.language ? extract.language.join(settings.arraySpilt) : "") .replaceAll("{{language}}", extract.language ? extract.language.join(settings.arraySpilt) : "")
.replaceAll("{{IMDb}}", extract.IMDb ? extract.IMDb : "") .replaceAll("{{IMDb}}", extract.IMDb ? extract.IMDb : "")

@ -9,6 +9,7 @@ import {PersonNameMode, SupportType, TemplateKey} from "../../../constant/Consts
import {aliases} from "css-select"; import {aliases} from "css-select";
import {UserStateSubject} from "../model/UserStateSubject"; import {UserStateSubject} from "../model/UserStateSubject";
import {moment} from "obsidian"; import {moment} from "obsidian";
import YamlUtil, {SPECIAL_CHAR_REG, TITLE_ALIASES_SPECIAL_CHAR_REG_G} from "../../../utils/YamlUtil";
/** /**
* teleplay * teleplay
@ -30,7 +31,7 @@ export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler<DoubanT
.replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "") .replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "")
.replaceAll("{{actor}}", extract.actor ? extract.actor.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "") .replaceAll("{{actor}}", extract.actor ? extract.actor.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "")
.replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "") .replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "")
.replaceAll("{{aliases}}", extract.aliases ? extract.aliases.join(settings.arraySpilt) : "") .replaceAll("{{aliases}}", extract.aliases ? extract.aliases.map(a=>a.replace(TITLE_ALIASES_SPECIAL_CHAR_REG_G, '_')).join(settings.arraySpilt) : "")
.replaceAll("{{country}}", extract.country ? extract.country.join(settings.arraySpilt) : "") .replaceAll("{{country}}", extract.country ? extract.country.join(settings.arraySpilt) : "")
.replaceAll("{{language}}", extract.language ? extract.language.join(settings.arraySpilt) : "") .replaceAll("{{language}}", extract.language ? extract.language.join(settings.arraySpilt) : "")
.replaceAll("{{IMDb}}", extract.IMDb ? extract.IMDb : "") .replaceAll("{{IMDb}}", extract.IMDb ? extract.IMDb : "")

@ -2,24 +2,41 @@
import DoubanSearchResultSubject from '../model/DoubanSearchResultSubject'; import DoubanSearchResultSubject from '../model/DoubanSearchResultSubject';
import SearchParserHandler from './SearchParser'; import SearchParserHandler from './SearchParser';
import {log} from 'src/org/wanxp/utils/Logutil'; import {log} from 'src/org/wanxp/utils/Logutil';
import {request, RequestUrlParam} from "obsidian"; import {request, requestUrl, RequestUrlParam} from "obsidian";
import {i18nHelper} from "../../../lang/helper"; import {i18nHelper} from "../../../lang/helper";
import {load} from 'cheerio'; import {load} from 'cheerio';
import {DoubanPluginSetting} from "../../setting/model/DoubanPluginSetting"; import {DoubanPluginSetting} from "../../setting/model/DoubanPluginSetting";
import {DEFAULT_SETTINGS} from "../../../constant/DefaultSettings"; import {DEFAULT_SETTINGS} from "../../../constant/DefaultSettings";
import SettingsManager from "../../setting/SettingsManager";
export default class Searcher { export default class Searcher {
static search(searchItem: string, doubanSettings: DoubanPluginSetting): Promise<DoubanSearchResultSubject[]> { static search(searchItem: string, doubanSettings: DoubanPluginSetting, settingsManager:SettingsManager): Promise<DoubanSearchResultSubject[]> {
const myHeaders:Record<string, string> = JSON.parse(doubanSettings.searchHeaders);
if (doubanSettings.loginCookiesContent) {
myHeaders.Cookie = doubanSettings.loginCookiesContent
}
let requestUrlParam: RequestUrlParam = { let requestUrlParam: RequestUrlParam = {
url: DEFAULT_SETTINGS.searchUrl + searchItem, url: DEFAULT_SETTINGS.searchUrl + searchItem,
method: "GET", method: "GET",
headers: JSON.parse(doubanSettings.searchHeaders), headers: myHeaders,
throw: true throw: true
}; };
return request(requestUrlParam) return requestUrl(requestUrlParam)
.then(requestUrlResponse => {
if (requestUrlResponse.status == 403) {
throw new Error(i18nHelper.getMessage('130106'));
}
return requestUrlResponse.text;
})
.then(load) .then(load)
.then(SearchParserHandler.parseSearch) .then(SearchParserHandler.parseSearch)
.catch(e => log.error(i18nHelper.getMessage('130101').replace('{0}', e.toString()), e)); .catch(e => {
if(e.toString().indexOf('403') > 0) {
throw new Error(i18nHelper.getMessage('130106'));
}else {
throw log.error(i18nHelper.getMessage('130101').replace('{0}', e.toString()), e);
}
});
; ;
}; };

@ -155,9 +155,14 @@ ${i18nHelper.getMessage('100125')}`;
.setCta() .setCta()
.onClick(async () => { .onClick(async () => {
button.setDisabled(true); button.setDisabled(true);
manager.debug(`配置界面:点击退出登录按钮`) manager.debug(`配置界面:点击退出登录按钮,准备退出登录`)
const loginModel = new DoubanLogoutModel(containerEl, manager); // manager.debug(`配置界面:登出界面退出登录请求检测成功,准备退出登录`)
await loginModel.doLogout(); manager.plugin.userComponent.logout();
manager.debug(`配置界面:退出登录成功`);
constructDoubanTokenSettingsUI(containerEl, manager);
// const loginModel = new DoubanLogoutModel(containerEl, manager);
// await loginModel.doLogout();
}); });
}); });
} }

@ -1,7 +1,7 @@
import SettingsManager from "../setting/SettingsManager"; import SettingsManager from "../setting/SettingsManager";
import {DoubanPluginSetting} from "../setting/model/DoubanPluginSetting"; import {DoubanPluginSetting} from "../setting/model/DoubanPluginSetting";
import DoubanSearchResultSubject from "../data/model/DoubanSearchResultSubject"; import DoubanSearchResultSubject from "../data/model/DoubanSearchResultSubject";
import {request, RequestUrlParam} from "obsidian"; import {request, requestUrl, RequestUrlParam, RequestUrlResponse} from "obsidian";
import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings"; import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings";
import {CheerioAPI, load} from "cheerio"; import {CheerioAPI, load} from "cheerio";
import SearchParserHandler from "../data/search/SearchParser"; import SearchParserHandler from "../data/search/SearchParser";
@ -87,11 +87,21 @@ export default class UserComponent {
}; };
this.settingsManager.debug('loadUserInfo:尝试获取用户信息:https://www.douban.com/mine/'); this.settingsManager.debug('loadUserInfo:尝试获取用户信息:https://www.douban.com/mine/');
return request(requestUrlParam) return request(requestUrlParam)
.then(response => this.settingsManager.settings.debugMode ? this.settingsManager.debug(response) : response) .then(requestUrlResponse => {
if (requestUrlResponse.indexOf('https://sec.douban.com/a') > 0) {
throw new Error(i18nHelper.getMessage('130105'));
}
return requestUrlResponse;
})
.then(load) .then(load)
.then(this.getUserInfo) .then(this.getUserInfo)
.catch(e => log.error(i18nHelper.getMessage('130101').replace('{0}', e.toString()), e)); .catch(e => {
; if(e.toString().indexOf('403') > 0) {
throw new Error(i18nHelper.getMessage('130105'));
}else {
throw log.error(i18nHelper.getMessage('130101').replace('{0}', e.toString()), e)
}
});
}; };

@ -223,6 +223,10 @@ PS: This file could be delete if you want to.
//error //error
'130101': `Fetch Data Error, {0}`, '130101': `Fetch Data Error, {0}`,
'140101': `Not support for current type. You can add Issues at Github:Wanxp/obsidian-douban`, '140101': `Not support for current type. You can add Issues at Github:Wanxp/obsidian-douban`,
'130105': `Can not use Douban this time, Please try again after 12 hour or 24 hour. Or you can reset your connection `,
'130106': `Can not use Douban this time, Please try Login In Douban Plugin. If not working please again after 12 hour or 24 hour. Or you can reset your connection `,
'140201': `[OB-Douban]: searching '{0}'...`, '140201': `[OB-Douban]: searching '{0}'...`,
'140202': `[OB-Douban]: result {0} rows`, '140202': `[OB-Douban]: result {0} rows`,

@ -226,6 +226,10 @@ export default {
'130102': `Obsidian Douban插件错误提示:`, '130102': `Obsidian Douban插件错误提示:`,
'130103': `Obsidian Douban插件异常提示:`, '130103': `Obsidian Douban插件异常提示:`,
'140101': `当前版本暂不支持该类型导入,请升级Obsidian Douban或至github提交issuess获取帮助`, '140101': `当前版本暂不支持该类型导入,请升级Obsidian Douban或至github提交issuess获取帮助`,
'130105': `由于多次频繁请求数据,豆瓣当前暂时不可用. 请于12小时或24小时后再重试或重置你的网络(如重新拨号或更换网络) `,
'130106': `请尝试在Douban插件中登录后操作. 若还是无效果则尝试于12小时或24小时后再重试或重置你的网络(如重新拨号或更换网络) `,
'140201': `[OB-Douban]: 开始搜索'{0}'...`, '140201': `[OB-Douban]: 开始搜索'{0}'...`,
'140202': `[OB-Douban]: 搜索条数{0}条`, '140202': `[OB-Douban]: 搜索条数{0}条`,

@ -111,7 +111,7 @@ export default class DoubanPlugin extends Plugin {
async search(searchTerm: string, context: HandleContext) { async search(searchTerm: string, context: HandleContext) {
try { try {
this.showStatus(i18nHelper.getMessage('140201', searchTerm)); this.showStatus(i18nHelper.getMessage('140201', searchTerm));
const resultList = await Searcher.search(searchTerm, this.settings); const resultList = await Searcher.search(searchTerm, this.settings, context.plugin.settingsManager);
this.showStatus(i18nHelper.getMessage('140202', resultList.length.toString())); this.showStatus(i18nHelper.getMessage('140202', resultList.length.toString()));
new DoubanFuzzySuggester(this, context).showSearchList(resultList); new DoubanFuzzySuggester(this, context).showSearchList(resultList);
} catch (e) { } catch (e) {

@ -29,7 +29,11 @@ export default class Logger {
} }
public debug(e: any): any { public debug(e: any): any {
console.log(`OB-Douban:${moment(new Date()).format('YYYY-MM-DD HH:mm:SS')}:${typeof e == 'string' ? e : JSON.stringify(e)}`); if(e instanceof Error) {
console.error(e);
}else {
console.log(`OB-Douban:${moment(new Date()).format('YYYY-MM-DD HH:mm:SS')}:${typeof e == 'string' ? e : JSON.stringify(e)}`);
}
return e; return e;
} }

@ -22,7 +22,9 @@ export default class YamlUtil {
} }
const SPECIAL_CHAR_REG = /[{}\[\]&*#?|\-<>=!%@:`,\n]/; export const SPECIAL_CHAR_REG = /[{}\[\]&*#?|\-<>=!%@:`,\n]/;
export const TITLE_ALIASES_SPECIAL_CHAR_REG_G = /[{}\[\]&*#?|\-<>=!%@:`, \n]/g;
const SPECIAL_CHAR_REG_REPLACE: Map<string, string> = new Map([ const SPECIAL_CHAR_REG_REPLACE: Map<string, string> = new Map([
['{', '\\{'], ['{', '\\{'],
]); ]);

@ -21,5 +21,6 @@
"v1.7.3": "0.12.0", "v1.7.3": "0.12.0",
"1.7.4": "0.12.0", "1.7.4": "0.12.0",
"1.7.5": "0.12.0", "1.7.5": "0.12.0",
"1.7.6": "0.12.0" "1.7.6": "0.12.0",
"1.7.7": "0.12.0"
} }