From b3b9ab2c447ec426c6e4d35f59d0ac8be26cc32d Mon Sep 17 00:00:00 2001
From: wanxp <977741432@qq.com>
Date: Sat, 26 Nov 2022 15:55:41 +0800
Subject: [PATCH] add debug mode
---
src/org/wanxp/constant/DefaultSettings.ts | 1 +
.../douban/component/DoubanLoginModel.ts | 21 ++++++-
.../douban/component/DoubanLogoutModel.ts | 15 +++++
.../douban/setting/AdvancedSettingsHelper.ts | 57 +++++++++++++++++++
.../douban/setting/BasicSettingsHelper.ts | 7 ++-
.../wanxp/douban/setting/DoubanSettingTab.ts | 8 +++
.../wanxp/douban/setting/SettingsManager.ts | 8 +++
.../setting/model/DoubanPluginSetting.ts | 1 +
src/org/wanxp/douban/user/UserComponent.ts | 6 ++
src/org/wanxp/lang/locale/en.ts | 9 +++
src/org/wanxp/lang/locale/zh-cn.ts | 10 ++++
src/org/wanxp/main.ts | 3 +
src/org/wanxp/utils/Logutil.ts | 7 ++-
src/org/wanxp/utils/StringUtil.ts | 17 ++++++
14 files changed, 165 insertions(+), 5 deletions(-)
create mode 100644 src/org/wanxp/douban/setting/AdvancedSettingsHelper.ts
diff --git a/src/org/wanxp/constant/DefaultSettings.ts b/src/org/wanxp/constant/DefaultSettings.ts
index 2e57155..956e3b6 100644
--- a/src/org/wanxp/constant/DefaultSettings.ts
+++ b/src/org/wanxp/constant/DefaultSettings.ts
@@ -18,6 +18,7 @@ export const DEFAULT_SETTINGS: DoubanPluginSetting = {
dataFilePath: "",
dataFileNamePath: "/{{type}}/{{title}}",
statusBar: true,
+ debugMode: false,
customProperties: [
{name: 'myType', value: 'movie', field: SupportType.MOVIE},
{name: 'myType', value: 'book', field: SupportType.BOOK},
diff --git a/src/org/wanxp/douban/component/DoubanLoginModel.ts b/src/org/wanxp/douban/component/DoubanLoginModel.ts
index f824078..c4f1b2a 100644
--- a/src/org/wanxp/douban/component/DoubanLoginModel.ts
+++ b/src/org/wanxp/douban/component/DoubanLoginModel.ts
@@ -4,6 +4,7 @@ import {i18nHelper} from "../../lang/helper";
import {DoubanSettingTab} from "../setting/DoubanSettingTab";
import SettingsManager from "../setting/SettingsManager";
import {constructDoubanTokenSettingsUI} from "../setting/BasicSettingsHelper";
+import StringUtil from "../../utils/StringUtil";
// Credits go to zhaohongxuan's Weread Plugin : https://github.com/zhaohongxuan/obsidian-weread-plugin
@@ -15,7 +16,7 @@ export default class DoubanLoginModel {
constructor(containerEl: HTMLElement, settingsManager: SettingsManager) {
this.containerEl = containerEl;
this.settingsManager = settingsManager;
-
+ this.settingsManager.debug(`配置界面:初始化登录界面`)
const { remote } = require('electron');
const { BrowserWindow: RemoteBrowserWindow } = remote;
this.modal = new RemoteBrowserWindow({
@@ -30,6 +31,7 @@ export default class DoubanLoginModel {
this.modal.show();
});
this.modal.on('closed', () => {
+ this.showCloseMessage();
constructDoubanTokenSettingsUI(this.containerEl, this.settingsManager);
});
@@ -38,15 +40,21 @@ export default class DoubanLoginModel {
urls: ['https://www.douban.com/','https://accounts.douban.com/','https://accounts.douban.com/passport/login']
};
session.webRequest.onSendHeaders(filter, async (details:any) => {
+ this.settingsManager.debug(`配置界面:登录界面请求头检测:${details.url}`)
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.debug(`配置界面:登录界面请求检测,获取到Cookie`)
let user = await settingsManager.plugin.userComponent.loginCookie(cookieArr);
if (user && user.login) {
+ this.settingsManager.debug(`配置界面:登录界面豆瓣登录成功, 信息:id:${StringUtil.confuse(user.id)}:, 用户名:${StringUtil.confuse(user.name)}`)
this.onClose();
+ return;
}
+ this.settingsManager.debug(`配置界面:登录界面豆瓣登录失败, cookies未能成功获取用户信息`)
} else {
+ this.settingsManager.debug(`配置界面:登录界面请求检测,没有获取到Cookie`)
this.onReload();
}
});
@@ -58,6 +66,7 @@ export default class DoubanLoginModel {
async doLogin() {
try {
+ this.settingsManager.debug(`配置界面:登录界面加载登录页面`)
await this.modal.loadURL('https://accounts.douban.com/passport/login');
} catch (error) {
log.error(i18nHelper.getMessage('100101'), error)
@@ -65,10 +74,20 @@ export default class DoubanLoginModel {
}
onClose() {
+ this.settingsManager.debug(`配置界面:登录界面关闭, 自动退出登录界面`)
this.modal.close();
}
onReload() {
+ this.settingsManager.debug(`配置界面:登录界面重新加载`)
this.modal.reload();
}
+
+ private showCloseMessage() {
+ if(this.settingsManager.plugin.userComponent.isLogin()) {
+ this.settingsManager.debug(`配置界面:登录界面关闭, 但未检测到登出, 登录失败`)
+ }else {
+ this.settingsManager.debug(`配置界面:登录界面关闭, 登录成功`)
+ }
+ }
}
diff --git a/src/org/wanxp/douban/component/DoubanLogoutModel.ts b/src/org/wanxp/douban/component/DoubanLogoutModel.ts
index 69e277a..34a4013 100644
--- a/src/org/wanxp/douban/component/DoubanLogoutModel.ts
+++ b/src/org/wanxp/douban/component/DoubanLogoutModel.ts
@@ -13,6 +13,7 @@ export default class DoubanLogoutModel {
private containerEl: HTMLElement;
constructor(containerEl: HTMLElement, settingsManager: SettingsManager) {
this.settingsManager = settingsManager;
+ this.settingsManager.debug(`配置界面:初始化登出界面`)
this.containerEl = containerEl;
const { remote } = require('electron');
const { BrowserWindow: RemoteBrowserWindow } = remote;
@@ -27,6 +28,7 @@ export default class DoubanLogoutModel {
this.modal.show();
});
this.modal.on('closed', () => {
+ this.showCloseMessage();
constructDoubanTokenSettingsUI(this.containerEl, this.settingsManager);
});
const session = this.modal.webContents.session;
@@ -35,20 +37,33 @@ export default class DoubanLogoutModel {
'https://www.douban.com/accounts/logout']
};
session.webRequest.onSendHeaders(filter, (details:any) => {
+ this.settingsManager.debug(`配置界面:登出界面请求头检测:${details.url}`)
const cookies = details.requestHeaders['Cookie'];
// const wr_name = cookieArr.find((cookie) => cookie.name == 'wr_name').value;
if (cookies && cookies.indexOf('dbcl2') < 0) {
+ this.settingsManager.debug(`配置界面:登出界面退出登录请求检测成功,准备退出登录`)
this.settingsManager.plugin.userComponent.logout();
+ this.settingsManager.debug(`配置界面:登出界面退出登录成功`)
this.onClose();
}
});
}
async doLogout() {
+ this.settingsManager.debug(`配置界面:登出界面加载登出页面`)
await this.modal.loadURL('https://www.douban.com/accounts/logout?source=main&ck=DfFJ');
}
onClose() {
+ this.settingsManager.debug(`配置界面:登出界面关闭, 自动退出登出界面`)
this.modal.close();
}
+
+ private showCloseMessage() {
+ if(this.settingsManager.plugin.userComponent.isLogin()) {
+ this.settingsManager.debug(`配置界面:登出界面关闭, 但未检测到登出, 退出登录失败`)
+ }else {
+ this.settingsManager.debug(`配置界面:登出界面关闭, 退出登录成功`)
+ }
+ }
}
diff --git a/src/org/wanxp/douban/setting/AdvancedSettingsHelper.ts b/src/org/wanxp/douban/setting/AdvancedSettingsHelper.ts
new file mode 100644
index 0000000..f47ec14
--- /dev/null
+++ b/src/org/wanxp/douban/setting/AdvancedSettingsHelper.ts
@@ -0,0 +1,57 @@
+import {i18nHelper} from "../../lang/helper";
+import {Platform, Setting} from "obsidian";
+import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings";
+import SettingsManager from "./SettingsManager";
+import DoubanLoginModel from "../component/DoubanLoginModel";
+import DoubanLogoutModel from "../component/DoubanLogoutModel";
+import User from "../user/User";
+import {createFolderSelectionSetting} from "./TemplateSettingHelper";
+import { log } from "../../utils/Logutil";
+
+
+
+export function constructAdvancedUI(containerEl: HTMLElement, manager: SettingsManager) {
+ containerEl.createEl('h3', { text: i18nHelper.getMessage('1250') });
+ containerEl.createEl('p', { text: i18nHelper.getMessage('1252') });
+ const settings:Setting = new Setting(containerEl);
+ const advancedSettings = containerEl.createDiv('advanced-settings');
+ settings.setDesc(i18nHelper.getMessage('1251')).addExtraButton((extraButton) => {
+ extraButton
+ .setIcon('reset')
+ .setTooltip(i18nHelper.getMessage('121905'))
+ .onClick(async () => {
+ resetAdvanced(manager);
+ await manager.plugin.saveSettings();
+ showAdvancedSettings(advancedSettings, manager)
+ });
+ })
+ showAdvancedSettings(advancedSettings, manager);
+
+}
+
+function showAdvancedSettings(containerEl: HTMLElement, manager: SettingsManager) {
+ containerEl.empty();
+ new Setting(containerEl)
+ .setName(i18nHelper.getMessage('125001'))
+ .setDesc(i18nHelper.getMessage('125002'))
+ .addToggle((toggleComponent) => {
+ toggleComponent
+ // .setTooltip(i18nHelper.getMessage('121403'))
+ .setValue(manager.plugin.settings.debugMode)
+ .onChange(async (value) => {
+ manager.plugin.settings.debugMode = value;
+ if (value) {
+ log.info("调试模式开启");
+ }else{
+ log.info("调试模式关闭");
+ }
+ await manager.plugin.saveSettings();
+ });
+ });
+}
+
+function resetAdvanced( manager: SettingsManager) {
+ log.info("调试模式关闭");
+ manager.plugin.settings.debugMode = false;
+}
+
diff --git a/src/org/wanxp/douban/setting/BasicSettingsHelper.ts b/src/org/wanxp/douban/setting/BasicSettingsHelper.ts
index bfa7464..d8aa387 100644
--- a/src/org/wanxp/douban/setting/BasicSettingsHelper.ts
+++ b/src/org/wanxp/douban/setting/BasicSettingsHelper.ts
@@ -6,6 +6,7 @@ import DoubanLoginModel from "../component/DoubanLoginModel";
import DoubanLogoutModel from "../component/DoubanLogoutModel";
import User from "../user/User";
import {createFolderSelectionSetting} from "./TemplateSettingHelper";
+import StringUtil from "../../utils/StringUtil";
export function constructBasicUI(containerEl: HTMLElement, manager: SettingsManager) {
containerEl.createEl('h3', { text: i18nHelper.getMessage('1210') });
@@ -102,6 +103,7 @@ export function constructBasicUI(containerEl: HTMLElement, manager: SettingsMana
export function constructDoubanTokenSettingsUI(containerEl: HTMLElement, manager: SettingsManager) {
containerEl.empty();
let login = manager.plugin.userComponent.isLogin();
+ manager.debug(`配置界面:展示豆瓣状态:${login?'已登录':'未登录'}`)
if (Platform.isDesktopApp) {
if(login) {
constructHasLoginSettingsUI(containerEl, manager);
@@ -121,12 +123,14 @@ export function constructDoubanTokenSettingsUI(containerEl: HTMLElement, manager
export function constructLoginSettingsUI(containerEl: HTMLElement, manager: SettingsManager) {
+ manager.debug(`配置界面:未登录-展示登录按钮`)
new Setting(containerEl).setName(i18nHelper.getMessage('100131')).addButton((button) => {
return button
.setButtonText(i18nHelper.getMessage('100130'))
.setCta()
.onClick(async () => {
button.setDisabled(true);
+ manager.debug(`配置界面:点击登录按钮`)
const loginModel = new DoubanLoginModel(containerEl, manager);
await loginModel.doLogin();
});
@@ -141,7 +145,7 @@ export function constructHasLoginSettingsUI(containerEl: HTMLElement, manager: S
${i18nHelper.getMessage('100123')}: ${user.id}
${i18nHelper.getMessage('100124')}: ${user.name}
${i18nHelper.getMessage('100125')}`;
-
+ manager.debug(`配置界面:展示豆瓣登录信息:id:${StringUtil.confuse(user.id)}, 用户名:${StringUtil.confuse(user.name)}`)
new Setting(containerEl)
.setName(i18nHelper.getMessage('100126'))
.setDesc(userDom)
@@ -151,6 +155,7 @@ ${i18nHelper.getMessage('100125')}`;
.setCta()
.onClick(async () => {
button.setDisabled(true);
+ manager.debug(`配置界面:点击退出登录按钮`)
const loginModel = new DoubanLogoutModel(containerEl, manager);
await loginModel.doLogout();
});
diff --git a/src/org/wanxp/douban/setting/DoubanSettingTab.ts b/src/org/wanxp/douban/setting/DoubanSettingTab.ts
index 2608ca5..a055460 100644
--- a/src/org/wanxp/douban/setting/DoubanSettingTab.ts
+++ b/src/org/wanxp/douban/setting/DoubanSettingTab.ts
@@ -11,6 +11,8 @@ import { constructTemplateUI } from "./TemplateSettingHelper";
import { constructBasicUI } from "./BasicSettingsHelper";
import { constructTemplateVariablesUI } from "./TemplateVariableSettingsHelper";
import {constructCustomPropertySettingsUI, constructCustomPropertyUI} from "./CustomPropertySettingsHelper";
+import {log} from "../../utils/Logutil";
+import { constructAdvancedUI } from "./AdvancedSettingsHelper";
/**
* 部分逻辑参考以下项目
@@ -19,6 +21,7 @@ import {constructCustomPropertySettingsUI, constructCustomPropertyUI} from "./Cu
export class DoubanSettingTab extends PluginSettingTab {
plugin: DoubanPlugin;
settingsManager: SettingsManager;
+
constructor(app: App, plugin: DoubanPlugin) {
super(app, plugin);
this.plugin = plugin;
@@ -35,5 +38,10 @@ export class DoubanSettingTab extends PluginSettingTab {
constructOutUI(containerEl, this.settingsManager);
constructCustomPropertySettingsUI(containerEl, this.settingsManager);
constructTemplateVariablesUI(containerEl, this.settingsManager);
+ constructAdvancedUI(containerEl, this.settingsManager);
+ }
+
+ hide(): void {
+
}
}
diff --git a/src/org/wanxp/douban/setting/SettingsManager.ts b/src/org/wanxp/douban/setting/SettingsManager.ts
index bed0c1b..729f998 100644
--- a/src/org/wanxp/douban/setting/SettingsManager.ts
+++ b/src/org/wanxp/douban/setting/SettingsManager.ts
@@ -1,6 +1,7 @@
import {App, Setting} from "obsidian";
import { DEFAULT_SETTINGS } from "src/org/wanxp/constant/DefaultSettings";
import DoubanPlugin from "../../main";
+import Logger from "../../utils/Logutil";
import { DoubanPluginSetting } from "./model/DoubanPluginSetting";
export default class SettingsManager {
@@ -8,6 +9,7 @@ export default class SettingsManager {
plugin: DoubanPlugin;
settings: DoubanPluginSetting;
cleanupFns: Array<() => void> = [];
+ innerLogger: Logger = new Logger();
constructor(app: App, plugin: DoubanPlugin) {
this.app = app;
@@ -33,4 +35,10 @@ export default class SettingsManager {
await this.plugin.saveSettings();
}
+ debug(message:string) {
+ if(this.settings.debugMode) {
+ this.innerLogger.debug(message);
+ }
+ }
+
}
diff --git a/src/org/wanxp/douban/setting/model/DoubanPluginSetting.ts b/src/org/wanxp/douban/setting/model/DoubanPluginSetting.ts
index 02a71d5..bd2e90b 100644
--- a/src/org/wanxp/douban/setting/model/DoubanPluginSetting.ts
+++ b/src/org/wanxp/douban/setting/model/DoubanPluginSetting.ts
@@ -16,6 +16,7 @@ export interface DoubanPluginSetting {
dataFilePath: string,
dataFileNamePath: string,
statusBar: boolean,
+ debugMode: boolean,
customProperties: CustomProperty[],
loginCookiesContent: string,
cacheImage: boolean,
diff --git a/src/org/wanxp/douban/user/UserComponent.ts b/src/org/wanxp/douban/user/UserComponent.ts
index 14e6695..edc0cba 100644
--- a/src/org/wanxp/douban/user/UserComponent.ts
+++ b/src/org/wanxp/douban/user/UserComponent.ts
@@ -9,6 +9,7 @@ import {log} from "../../utils/Logutil";
import {i18nHelper} from "../../lang/helper";
import User from "./User";
import DoubanGameSubject from "../data/model/DoubanGameSubject";
+import StringUtil from "../../utils/StringUtil";
export default class UserComponent {
private settingsManager: SettingsManager;
@@ -53,10 +54,13 @@ export default class UserComponent {
async loginByCookie():Promise {
let cookie = this.settingsManager.getSetting('loginCookiesContent');
if(!cookie) {
+ this.settingsManager.debug('主界面:loginByCookie:无豆瓣cookies信息,获取用户信息失败');
return new User();
}
+ this.settingsManager.debug('主界面:loginByCookie:豆瓣cookies信息正常,尝试获取用户信息');
await this.loadUserInfo(cookie).then(user => {
this.user = user;
+ this.settingsManager.debug(`主界面:loginByCookie:豆瓣cookies信息正常,${user&&user.id?'获取用户信息成功id:'+ StringUtil.confuse(user.id) + ',用户名:'+ StringUtil.confuse(user.name) :'获取用户信息失败'}`);
});
return this.user;
}
@@ -65,8 +69,10 @@ export default class UserComponent {
if(!cookie) {
return new User();
}
+ this.settingsManager.debug('配置界面:loginCookie:豆瓣cookies信息正常,尝试获取用户信息');
await this.loadUserInfo(cookie).then(user => {
this.user = user;
+ this.settingsManager.debug(`配置界面:loginCookie:豆瓣cookies信息正常,${user&&user.id?'获取用户信息成功id:'+ StringUtil.confuse(user.id) + ',用户名:'+ StringUtil.confuse(user.name) :'获取用户信息失败'}`);
});
this.settingsManager.updateSetting('loginCookiesContent', cookie);
return this.user;
diff --git a/src/org/wanxp/lang/locale/en.ts b/src/org/wanxp/lang/locale/en.ts
index 7f0c6fa..e50016a 100644
--- a/src/org/wanxp/lang/locale/en.ts
+++ b/src/org/wanxp/lang/locale/en.ts
@@ -76,6 +76,10 @@ PS: This file could be delete if you want to.
'1230': `Usable Variables`,
'1204': `Set template file path. If keep empty, it will use the default template file to create file. All the usable variables at the end.👇`,
'1205': `🧡Tip: You can click the 'Copy' button to copy default template content, then create and paste to your own template file. After that, back to select the file. `,
+ '1250': `Advanced Setting`,
+ '1252': `Some Debug or Other Settings`,
+ '1251': `☢The Advanced Setting only could be changed after you know what you are doing`,
+
'1240': `Custom Variable`,
'1241': `To use the custom variables, you need to wrap them in double curly brackets. For example, {{myType}} will be replaced with the your custom type value. `,
'1242': `Add custom variable, so that you can use it in the template file or file name. `,
@@ -185,9 +189,14 @@ PS: This file could be delete if you want to.
'121901': `Copy default template content to clipboard`,
'121902': `Reset to default value`,
+ '121905': `Reset Advanced Settings to default value`,
+
'121903': `Copy default template content (that your state in object) to clipboard`,
+ '125001': `Debug Mode`,
+ '125002': `Open Debug Mode, so that this plugin will log some message in console`,
+
//error
'130101': `Fetch Data Error, {0}`,
diff --git a/src/org/wanxp/lang/locale/zh-cn.ts b/src/org/wanxp/lang/locale/zh-cn.ts
index eec7c72..6f643f0 100644
--- a/src/org/wanxp/lang/locale/zh-cn.ts
+++ b/src/org/wanxp/lang/locale/zh-cn.ts
@@ -85,6 +85,16 @@ export default {
'1240': `自定义属性`,
'1241': `自定义参数使用时请用'{{}}'包裹, 举例: 参数myType, 则使用时为{{myType}}. `,
'1242': `添加自定义参数, 参数可用于模板中或者文件名中. `,
+ '1250': `高级设置`,
+ '1252': `一些运行时的高级配置,如开启debug模式`,
+ '1251': `☢高级设置只有当你知道修改此设置之后的影响才允许修改, 正常情况下请保持默认`,
+
+ '125001': `调试模式`,
+ '125002': `调试模式开启后,将会在控制台打印此插件的日志信息`,
+
+
+
+
'124101': `新增`,
'124108': `新增一个自定义参数`,
'124102': `参数名称:`,
diff --git a/src/org/wanxp/main.ts b/src/org/wanxp/main.ts
index 68107f4..547c5bc 100644
--- a/src/org/wanxp/main.ts
+++ b/src/org/wanxp/main.ts
@@ -266,10 +266,13 @@ export default class DoubanPlugin extends Plugin {
}
async checkLogin(context: HandleContext):Promise {
+ this.settingsManager.debug('主界面:同步时的登录状态检测');
if (!context.userComponent.needLogin()) {
+ this.settingsManager.debug('主界面:同步时的登录状态检测完成: 无用户信息, 尝试使用cookie获取用户信息');
await context.userComponent.loginByCookie();
}
if (!context.userComponent.isLogin()) {
+ this.settingsManager.debug('主界面:同步时的登录状态检测完成: 尝试使用cookie获取用户信息失败');
new Notice(i18nHelper.getMessage('140303'));
return false;
}
diff --git a/src/org/wanxp/utils/Logutil.ts b/src/org/wanxp/utils/Logutil.ts
index a967b3b..e8a088e 100644
--- a/src/org/wanxp/utils/Logutil.ts
+++ b/src/org/wanxp/utils/Logutil.ts
@@ -1,7 +1,8 @@
-import {Notice} from "obsidian";
+import {moment, Notice} from "obsidian";
import {i18nHelper} from "src/org/wanxp/lang/helper";
-class Logger {
+export default class Logger {
+
public error(msg: any, e:any): any {
new Notice(msg);
@@ -28,7 +29,7 @@ class Logger {
}
public debug(e: any): any {
- console.log(`OB-Douban:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`);
+ console.log(`OB-Douban:${moment(new Date()).format('YYYY-MM-DD HH:mm:SS')}:${typeof e == 'string' ? e : JSON.stringify(e)}`);
return e;
}
diff --git a/src/org/wanxp/utils/StringUtil.ts b/src/org/wanxp/utils/StringUtil.ts
index 6b6ddb1..d2a2057 100644
--- a/src/org/wanxp/utils/StringUtil.ts
+++ b/src/org/wanxp/utils/StringUtil.ts
@@ -23,4 +23,21 @@ export default class StringUtil {
return id;
}
+
+ public static confuse(text: string):string {
+ if (!text) {
+ return
+ }
+ let texts = Array.from(text);
+ const length = texts.length;
+ const newTexts = [];
+ for (let i = 0; i < length; i++) {
+ let val = text[i];
+ if (i >= length/3 && i <= length * 2/3) {
+ val = '*'
+ }
+ newTexts[i] = val;
+ }
+ return newTexts.join('');
+ }
}