obsidian-douban/src/org/wanxp/douban/setting/SettingsManager.ts
2023-12-21 13:27:16 +08:00

106 lines
3.1 KiB
TypeScript

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";
import StringUtil from "../../utils/StringUtil";
import {DEFAULT_DOUBAN_HEADERS, ONLINE_SETTING_DEFAULT, SupportType} from "../../constant/Constsant";
import GithubUtil from "../../utils/GithubUtil";
import {DoubanPluginOnlineData} from "./model/DoubanPluginOnlineData";
import {DoubanPluginOnlineSettings} from "./model/DoubanPluginOnlineSettings";
import {DoubanPluginSubjectProperty} from "./model/DoubanPluginSubjectProperty";
import HandleContext from "../data/model/HandleContext";
import HtmlUtil from "../../utils/HtmlUtil";
export default class SettingsManager {
app: App;
plugin: DoubanPlugin;
settings: DoubanPluginSetting;
cleanupFns: Array<() => void> = [];
innerLogger: Logger = new Logger();
cookieTemp:string;
onlineSettings: DoubanPluginOnlineSettings;
constructor(app: App, plugin: DoubanPlugin) {
this.app = app;
this.plugin = plugin;
this.settings = plugin.settings;
}
getSettingWithDefault(key: keyof DoubanPluginSetting) {
return [this.settings[key], DEFAULT_SETTINGS[key]];
}
getSetting(key: keyof DoubanPluginSetting) {
return this.settings[key];
}
getHeaders():object {
if (this.settings.loginHeadersContent) {
// return StringUtil.parseHeaders(this.settings.loginHeadersContent);
return JSON.parse(this.settings.loginHeadersContent);
}else if (this.settings.loginCookiesContent) {
return {Cookie: this.settings.loginCookiesContent, ...DEFAULT_DOUBAN_HEADERS};
}else {
return DEFAULT_DOUBAN_HEADERS;
}
}
getHeadersByCookie(cookie:string):object {
if (cookie) {
return {...DEFAULT_DOUBAN_HEADERS, Cookie: cookie};
}else {
return DEFAULT_DOUBAN_HEADERS;
}
}
async updateSetting(key: keyof DoubanPluginSetting, value:any) {
// @ts-ignore
this.settings[key] = value;
await this.plugin.saveSettings();
}
debug(message:any):any {
if(this.settings.debugMode) {
return this.innerLogger.debug(message);
}else {
return message;
}
}
updateCookieTemp(cookie:string):void {
this.cookieTemp = cookie;
}
getCookieTemp():string {
return this.cookieTemp;
}
getSelector(itemType: SupportType, propertyName: string):string[] {
if (this.onlineSettings && this.onlineSettings.properties) {
const doubanPluginSubjectProperty:DoubanPluginSubjectProperty = this.onlineSettings.properties.find(subjectProperty => subjectProperty.type === itemType && subjectProperty.name === propertyName);
if(doubanPluginSubjectProperty) {
return doubanPluginSubjectProperty.selectors;
}
}
const doubanPluginSubjectProperty = ONLINE_SETTING_DEFAULT.properties.find(subjectProperty => subjectProperty.type === itemType && subjectProperty.name === propertyName);
if(doubanPluginSubjectProperty) {
return doubanPluginSubjectProperty.selectors;
}
return [];
}
handleArray(arr: string[]): string {
let result:string = StringUtil.handleArray(arr, this.settings);
return HtmlUtil.strToHtml(result);
}
}