upgrade to v1.6.1

This commit is contained in:
wanxp 2022-11-06 23:35:00 +08:00
parent f8d453abb2
commit 53ca2ec446
14 changed files with 216 additions and 52 deletions

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

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

@ -3,7 +3,6 @@ import {PersonNameMode, SupportType} from "./Constsant";
import {doubanHeaders} from "./Douban";
export const DEFAULT_SETTINGS: DoubanPluginSetting = {
//以后会被移除
movieTemplateFile: ``,
bookTemplateFile: ``,
musicTemplateFile: ``,
@ -27,4 +26,5 @@ export const DEFAULT_SETTINGS: DoubanPluginSetting = {
{name: 'myType', value: 'game', field: SupportType.GAME},
{name: 'myType', value: 'teleplay', field: SupportType.TELEPLAY},
],
loginCookiesContent: '',
}

@ -0,0 +1,67 @@
import { Notice } from 'obsidian';
import { log } from 'src/utils/Logutil';
import {i18nHelper} from "../../lang/helper";
import {DoubanSettingTab} from "@App/setting/DoubanSettingTab";
import SettingsManager from "@App/setting/SettingsManager";
import {constructDoubanTokenSettingsUI, constructLoginSettingsUI} from "@App/setting/BasicSettingsHelper";
// Credits go to zhaohongxuan's Weread Plugin : https://github.com/zhaohongxuan/obsidian-weread-plugin
export default class DoubanLoginModel {
private modal: any;
private containerEl: HTMLElement;
private settingsManager: SettingsManager;
constructor(containerEl: HTMLElement, settingsManager: SettingsManager) {
this.containerEl = containerEl;
this.settingsManager = settingsManager;
log.info('初始化登录页面');
const { remote } = require('electron');
const { BrowserWindow: RemoteBrowserWindow } = remote;
this.modal = new RemoteBrowserWindow({
parent: remote.getCurrentWindow(),
width: 960,
height: 540,
show: false
});
this.modal.once('ready-to-show', () => {
this.modal.setTitle(i18nHelper.getMessage('100101'));
this.modal.show();
});
const session = this.modal.webContents.session;
const filter = {
urls: ['https://www.douban.com/']
};
session.webRequest.onSendHeaders(filter, (details:any) => {
const cookies = details.requestHeaders['Cookie'];
const cookieArr = this.parseCookies(cookies);
// const wr_name = cookieArr.find((cookie) => cookie.name == 'wr_name').value;
if (cookieArr) {
this.settingsManager.updateSetting('loginCookiesContent', cookieArr);
constructDoubanTokenSettingsUI(containerEl, settingsManager);
this.modal.close();
} else {
this.modal.reload();
}
});
}
private parseCookies(cookies: any) {
return cookies;
}
async doLogin() {
try {
await this.modal.loadURL('https://accounts.douban.com/passport/login');
} catch (error) {
log.error('加载豆瓣登录页面失败')
}
}
onClose() {
this.modal.close();
}
}

@ -0,0 +1,48 @@
import {DoubanSettingTab} from "@App/setting/DoubanSettingTab";
import {i18nHelper} from "../../lang/helper";
import SettingsManager from "@App/setting/SettingsManager";
import {constructDoubanTokenSettingsUI, constructLoginSettingsUI} from "@App/setting/BasicSettingsHelper";
import {log} from "../../utils/Logutil";
// Credits go to zhaohongxuan's Weread Plugin : https://github.com/zhaohongxuan/obsidian-weread-plugin
export default class DoubanLogoutModel {
private modal: any;
private containerEl: HTMLElement;
private settingsManager: SettingsManager;
constructor(containerEl: HTMLElement, settingsManager: SettingsManager) {
const { remote } = require('electron');
const { BrowserWindow: RemoteBrowserWindow } = remote;
this.modal = new RemoteBrowserWindow({
parent: remote.getCurrentWindow(),
width: 960,
height: 540,
show: false
});
this.modal.once('ready-to-show', () => {
this.modal.setTitle(i18nHelper.getMessage('100101'));
this.modal.show();
});
const session = this.modal.webContents.session;
const filter = {
urls: ['https://www.douban.com/accounts/logout']
};
session.webRequest.onCompleted(filter, (details:any) => {
log.info('已请求登出成功:');
if (details.statusCode == 200) {
this.settingsManager.updateSetting('loginCookiesContent', '');
constructDoubanTokenSettingsUI(containerEl, settingsManager);
this.modal.close();
}
});
}
async doLogout() {
await this.modal.loadURL('https://www.douban.com/logout');
}
onClose() {
this.modal.close();
}
}

@ -6,11 +6,12 @@ import {request, RequestUrlParam} from "obsidian";
import {i18nHelper} from "../../../lang/helper";
import {load} from 'cheerio';
import {DoubanPluginSetting} from "@App/setting/model/DoubanPluginSetting";
import {DEFAULT_SETTINGS} from "../../../constant/DefaultSettings";
export default class Searcher {
static search(searchItem: string, doubanSettings: DoubanPluginSetting): Promise<DoubanSearchResultSubject[]> {
let requestUrlParam: RequestUrlParam = {
url: doubanSettings.searchUrl + searchItem,
url: DEFAULT_SETTINGS.searchUrl + searchItem,
method: "GET",
headers: JSON.parse(doubanSettings.searchHeaders),
throw: true

@ -1,48 +1,16 @@
import {i18nHelper} from "../../lang/helper";
import {Setting} from "obsidian";
import {Platform, Setting} from "obsidian";
import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings";
import SettingsManager from "@App/setting/SettingsManager";
import DoubanLoginModel from "@App/component/DoubanLoginModel";
import DoubanLogoutModel from "@App/component/DoubanLogoutModel";
import { log } from "src/utils/Logutil";
export function constructBasicUI(containerEl: HTMLElement, manager: SettingsManager) {
containerEl.createEl('h3', { text: i18nHelper.getMessage('1210') });
new Setting(containerEl).setName(i18nHelper.getMessage('120001'))
.then((setting) => {
setting.addText((textField) => {
setting.descEl.appendChild(
createFragment((frag) => {
frag.appendText(i18nHelper.getMessage('120002'));
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120003'));
frag.createEl(
'a',
{
text: i18nHelper.getMessage('120901'),
href: 'https://www.douban.com',
},
(a) => {
a.setAttr('target', '_blank');
}
);
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120004'));
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120005'));
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120006'));
frag.createEl('br');
})
);
textField.inputEl.addClass("obsidian_douban_settings_textField");
textField
.setPlaceholder(DEFAULT_SETTINGS.searchUrl)
.setValue(manager.plugin.settings.searchUrl)
.onChange(async (value) => {
manager.plugin.settings.searchUrl = value;
await manager.plugin.saveSettings();
});
});
});
// containerEl.createDiv('login-setting', (loginSettingEl) => {
// constructDoubanTokenSettingsUI(loginSettingEl, manager);
// });
new Setting(containerEl).setName(i18nHelper.getMessage('120501')).then((setting) => {
setting.addMomentFormat((mf) => {
@ -127,3 +95,76 @@ export function constructBasicUI(containerEl: HTMLElement, manager: SettingsMana
});
});
}
export function constructDoubanTokenSettingsUI(containerEl: HTMLElement, manager: SettingsManager) {
let cookie = manager.getSetting('loginCookiesContent');
containerEl.empty();
if (Platform.isDesktopApp) {
if(cookie) {
constructHasLoginSettingsUI(containerEl, manager);
}else {
constructLoginSettingsUI(containerEl, manager);
}
} else {
if(cookie) {
showMobileLogout(containerEl, manager);
}else {
showMobileLogin(containerEl, manager);
}
}
}
export function constructLoginSettingsUI(containerEl: HTMLElement, manager: SettingsManager) {
new Setting(containerEl).setName('登录豆瓣').addButton((button) => {
return button
.setButtonText('登录')
.setCta()
.onClick(async () => {
button.setDisabled(true);
const loginModel = new DoubanLoginModel(containerEl, manager);
await loginModel.doLogin();
});
});
}
export function constructHasLoginSettingsUI(containerEl: HTMLElement, manager: SettingsManager) {
new Setting(containerEl)
.setName('豆瓣用户信息')
.setDesc('已登录')
.addButton((button) => {
return button
.setButtonText('登出')
.setCta()
.onClick(async () => {
button.setDisabled(true);
const loginModel = new DoubanLogoutModel(containerEl, manager);
await loginModel.doLogout();
// manager.updateSetting('loginCookiesContent', '');
});
});
}
function showMobileLogin(containerEl: HTMLElement, manager: SettingsManager) {
new Setting(containerEl)
.setName('豆瓣用户信息')
.setDesc('豆瓣未登录,请先在电脑端登录!')
}
function showMobileLogout(containerEl: HTMLElement, manager: SettingsManager) {
new Setting(containerEl)
.setName('豆瓣用户信息')
.setDesc('已登录')
.addButton((button) => {
return button
.setButtonText('登出')
.setCta()
.onClick(async () => {
manager.updateSetting('loginCookiesContent', '');
constructDoubanTokenSettingsUI(containerEl, manager);
});
});
}

@ -2,10 +2,6 @@ import {App, Setting} from "obsidian";
import { DEFAULT_SETTINGS } from "src/constant/DefaultSettings";
import DoubanPlugin from "../../../main";
import { DoubanPluginSetting } from "./model/DoubanPluginSetting";
import {createFileSelectionSetting, createFolderSelectionSetting} from "@App/setting/TemplateSettingHelper";
import {i18nHelper} from "../../lang/helper";
import {PersonNameMode, PersonNameModeRecords} from "../../constant/Constsant";
import {constructBasicUI} from "@App/setting/BasicSettingsHelper";
export default class SettingsManager {
app: App;
@ -19,11 +15,16 @@ export default class SettingsManager {
this.settings = plugin.settings;
}
getSetting(key: keyof DoubanPluginSetting) {
getSettingWithDefault(key: keyof DoubanPluginSetting) {
return [this.settings[key], DEFAULT_SETTINGS[key]];
}
getSetting(key: keyof DoubanPluginSetting) {
return this.settings[key];
}
async updateSetting(key: keyof DoubanPluginSetting, value:any) {

@ -29,7 +29,7 @@ export function createFileSelectionSetting({name, desc, placeholder, key, manage
// @ts-ignore
setting.setDesc(i18nHelper.getMessage(desc));
setting.addSearch(async (search: SearchComponent) => {
const [oldValue, defaultVal] = manager.getSetting(key);
const [oldValue, defaultVal] = manager.getSettingWithDefault(key);
let v = defaultVal;
if (oldValue) {
v = oldValue;
@ -65,7 +65,7 @@ export function createFolderSelectionSetting({
// @ts-ignore
setting.setDesc( i18nHelper.getMessage(desc));
setting.addSearch(async (search: SearchComponent) => {
const [oldValue, defaultVal] = manager.getSetting(key);
const [oldValue, defaultVal] = manager.getSettingWithDefault(key);
let v = defaultVal;
if (oldValue) {
v = oldValue;

@ -17,5 +17,6 @@ export interface DoubanPluginSetting {
dataFileNamePath: string,
statusBar: boolean,
customProperties: CustomProperty[],
loginCookiesContent: string,
}

@ -22,6 +22,9 @@ export default {
'120005': `The redirected web page address is the search address,`,
'120006': `Just copy the web address to the current input box.`,
'100101': `Login Douban`,
'1210': `Basic Setting`,
'1203': `Template Setting`,
'1220': `Output Setting`,

@ -13,6 +13,7 @@ export default {
'110201': `{0} 文件已经存在.`,
'110202': `{0} 模板文件无法读取`,
'100101': `登录豆瓣`,
//DoubanSettingTab
'1201': `Obsidian-豆瓣`,

@ -16,7 +16,7 @@ class Logger {
}
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;
}

@ -11,5 +11,6 @@
"v1.5.0": "0.12.0",
"v1.5.1": "0.12.0",
"v1.5.2": "0.12.0",
"v1.6.0": "0.12.0"
"v1.6.0": "0.12.0",
"v1.6.1": "0.12.0"
}