mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-04 08:38:41 +08:00
upgrade to v1.6.1
This commit is contained in:
parent
f8d453abb2
commit
53ca2ec446
@ -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: '',
|
||||
}
|
||||
|
||||
67
src/douban/component/DoubanLoginModel.ts
Normal file
67
src/douban/component/DoubanLoginModel.ts
Normal file
@ -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();
|
||||
}
|
||||
}
|
||||
48
src/douban/component/DoubanLogoutModel.ts
Normal file
48
src/douban/component/DoubanLogoutModel.ts
Normal file
@ -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"
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user