diff --git a/src/org/wanxp/douban/setting/BasicSettingsHelper.ts b/src/org/wanxp/douban/setting/BasicSettingsHelper.ts index ccbbe0f..276684d 100644 --- a/src/org/wanxp/douban/setting/BasicSettingsHelper.ts +++ b/src/org/wanxp/douban/setting/BasicSettingsHelper.ts @@ -1,4 +1,4 @@ -import {i18nHelper} from "../../lang/helper"; +import I18nHelper, {i18nHelper} from "../../lang/helper"; import {Platform, Setting} from "obsidian"; import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings"; import SettingsManager from "./SettingsManager"; @@ -7,6 +7,7 @@ import DoubanLogoutModel from "../component/DoubanLogoutModel"; import User from "../user/User"; import {createFolderSelectionSetting} from "./TemplateSettingHelper"; import StringUtil from "../../utils/StringUtil"; +import {log} from "../../utils/Logutil"; export function constructBasicUI(containerEl: HTMLElement, manager: SettingsManager) { containerEl.createEl('h3', { text: i18nHelper.getMessage('1210') }); @@ -124,10 +125,12 @@ export function constructDoubanTokenSettingsUI(containerEl: HTMLElement, manager export function constructLoginSettingsUI(containerEl: HTMLElement, manager: SettingsManager) { manager.debug(`配置界面:未登录-展示登录按钮`) - new Setting(containerEl).setName(i18nHelper.getMessage('100131')).addButton((button) => { + let loginSetting = containerEl.createDiv("login-button"); + let loginCookie = containerEl.createDiv("login-button-cookie"); + + new Setting(loginSetting).setName(i18nHelper.getMessage('100131')).addButton((button) => { return button .setButtonText(i18nHelper.getMessage('100130')) - .setCta() .onClick(async () => { button.setDisabled(true); manager.debug(`配置界面:点击登录按钮`) @@ -135,6 +138,67 @@ export function constructLoginSettingsUI(containerEl: HTMLElement, manager: Sett await loginModel.doLogin(); }); }); + const loginCookieSetting:Setting = new Setting(loginSetting).setName(i18nHelper.getMessage('100133')); + // .setDesc(i18nHelper.getMessage('100134')) + loginCookieSetting.addButton((button) => { + loginCookieSetting.descEl.appendChild( + createFragment((frag) => { + frag.appendText( + i18nHelper.getMessage('100134') + ); + frag.createEl( + 'a', + { + text: i18nHelper.getMessage('100139'), + href: 'https://wiki.wanxuping.com/zh/obsidian-douban/setting/login/getCookie', + }, + (a) => { + a.setAttr('target', '_blank'); + } + ); + frag.appendText(i18nHelper.getMessage('100138')); + }) + ); + + + return button + .setButtonText(i18nHelper.getMessage('100135')) + .onClick(async () => { + button.setDisabled(true); + manager.debug(`配置界面:点击登录异常处理按钮`) + constructLoginCookieSettingsUI(loginCookie, containerEl, manager); + }); + }); +} + +export function constructLoginCookieSettingsUI(containerEl: HTMLElement, parentContainerEl: HTMLElement, manager: SettingsManager) { + manager.debug(`配置界面:登录异常处理按钮-展示Cookie输入框`) + new Setting(containerEl).setName(i18nHelper.getMessage('100136')) + .setClass("obsidian_douban_settings_cookie_login").addTextArea((text) => { + text.onChange(value => manager.updateCookieTemp(value)); + return text; + }).addExtraButton((button) => { + return button + .setIcon('check') + .onClick(async () => { + button.setDisabled(true); + manager.debug(`配置界面:确认输入Cookie`); + const user:User = await manager.plugin.userComponent.loginCookie(manager.getCookieTemp()) + if (!user || !user.id) { + log.notice(i18nHelper.getMessage('100137')) + } + constructDoubanTokenSettingsUI(parentContainerEl, manager); + }); + }) + .addExtraButton((button) => { + return button + .setIcon('x') + .onClick(async () => { + button.setDisabled(true); + manager.debug(`配置界面:取消输入Cookie`); + constructDoubanTokenSettingsUI(parentContainerEl, manager); + }); + }); } export function constructHasLoginSettingsUI(containerEl: HTMLElement, manager: SettingsManager) { diff --git a/src/org/wanxp/douban/setting/SettingsManager.ts b/src/org/wanxp/douban/setting/SettingsManager.ts index 3d48912..c78b324 100644 --- a/src/org/wanxp/douban/setting/SettingsManager.ts +++ b/src/org/wanxp/douban/setting/SettingsManager.ts @@ -11,6 +11,8 @@ export default class SettingsManager { cleanupFns: Array<() => void> = []; innerLogger: Logger = new Logger(); + cookieTemp:string; + constructor(app: App, plugin: DoubanPlugin) { this.app = app; this.plugin = plugin; @@ -43,4 +45,12 @@ export default class SettingsManager { } } + updateCookieTemp(cookie:string):void { + this.cookieTemp = cookie; + } + + getCookieTemp():string { + return this.cookieTemp; + } + } diff --git a/src/org/wanxp/douban/user/UserComponent.ts b/src/org/wanxp/douban/user/UserComponent.ts index 245a404..5df8abd 100644 --- a/src/org/wanxp/douban/user/UserComponent.ts +++ b/src/org/wanxp/douban/user/UserComponent.ts @@ -74,7 +74,9 @@ export default class UserComponent { 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); + if(this.user) { + 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 a5cd62d..a092226 100644 --- a/src/org/wanxp/lang/locale/en.ts +++ b/src/org/wanxp/lang/locale/en.ts @@ -88,6 +88,13 @@ PS: This file could be delete if you want to. '100129': `You have not login Douban, please login in computer first! After login, you can use your rating and reading status, see the last for specific variables.`, '100130': `Login`, '100131': `Login Douban`, + '100133': `For Login Error `, + '100135': `LoginByCookie`, + '100136': `Cookie Input`, + '100137': `Cookie Login Failed, Can not get User Info By Cookie, Please Check Your Cookie Text`, + '100134': `If you login failed, please click this button and follow`, + '100139': `Tutorial`, + '100138': `get Cookie and input to text area bellow`, '100132': `Load Douban Login Page Failed`, diff --git a/src/org/wanxp/lang/locale/zh-cn.ts b/src/org/wanxp/lang/locale/zh-cn.ts index 035dbf2..f952c8e 100644 --- a/src/org/wanxp/lang/locale/zh-cn.ts +++ b/src/org/wanxp/lang/locale/zh-cn.ts @@ -82,6 +82,13 @@ export default { '100129': `豆瓣未登录,请先在电脑端登录!登录后导入参数可使用你的评分以及阅读状态等,具体可用参数见最后.`, '100130': `登录`, '100131': `登录豆瓣`, + '100133': `登录出错处理`, + '100135': `Cookie登录`, + '100136': `Cookie输入`, + '100137': `使用Cookie登录失败,请确认Cookie填写是否正确`, + '100134': `如果上面登录按钮点击后在弹窗中登录还是没成功,请点击此[Cookie登录]按钮,然后按照`, + '100139': `[教程]`, + '100138': `获取Cookie,并将Cookie复制到下面输入框中,最后点击✔️`, '100132': `加载豆瓣登录页面失败`, //DoubanSettingTab diff --git a/styles.css b/styles.css index 8875f4c..9097e6b 100644 --- a/styles.css +++ b/styles.css @@ -4,6 +4,13 @@ width: 100%; } +.obsidian_douban_settings_cookie_login > .setting-item-control > textarea { + margin-left: 5px; + margin-right: 5px; + height: 100px; + width: 100%; +} + .obsidian_douban_settings_textField { margin-left: 5px; margin-right: 5px;