mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-04 08:38:41 +08:00
172 lines
5.3 KiB
TypeScript
172 lines
5.3 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";
|
|
import {
|
|
ARRAY_NAME_PREFIX_NAME,
|
|
ArraySetting,
|
|
ArraySettingFieldName,
|
|
DEFAULT_SETTINGS_ARRAY_NAME
|
|
} from "./model/ArraySetting";
|
|
|
|
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[], arraySetting:ArraySetting): string {
|
|
let result:string = StringUtil.handleArray(arr, arraySetting);
|
|
return HtmlUtil.strToHtml(result);
|
|
}
|
|
|
|
async updateArraySetting(arraySetting: ArraySetting) {
|
|
if (arraySetting.arrayName == DEFAULT_SETTINGS_ARRAY_NAME) {
|
|
this.settings.arrayStart = arraySetting.arrayStart;
|
|
this.settings.arrayElementStart = arraySetting.arrayElementStart;
|
|
this.settings.arraySpiltV2 = arraySetting.arraySpiltV2;
|
|
this.settings.arrayElementEnd = arraySetting.arrayElementEnd;
|
|
this.settings.arrayEnd = arraySetting.arrayEnd;
|
|
}else {
|
|
const index = this.settings.arraySettings.findIndex(as => as.arrayName == arraySetting.arrayName);
|
|
if (index == -1) {
|
|
this.settings.arraySettings.push(arraySetting);
|
|
} else {
|
|
this.settings.arraySettings[index] = arraySetting;
|
|
}
|
|
}
|
|
await this.plugin.saveSettings();
|
|
}
|
|
|
|
async removeArraySetting(arrayName: string) {
|
|
if (arrayName == DEFAULT_SETTINGS_ARRAY_NAME) {
|
|
return;
|
|
}else {
|
|
this.settings.arraySettings = this.settings.arraySettings.filter(arraySetting => arraySetting.arrayName !== arrayName);
|
|
}
|
|
await this.plugin.saveSettings();
|
|
}
|
|
|
|
getArraySetting(arrayName: string) {
|
|
if (!this.settings.arraySettings) {
|
|
this.settings.arraySettings = [];
|
|
}
|
|
if (arrayName == DEFAULT_SETTINGS_ARRAY_NAME) {
|
|
return this.getDefaultArraySetting(DEFAULT_SETTINGS_ARRAY_NAME, 0);
|
|
}else {
|
|
const arraySetting = this.settings.arraySettings.find(arraySetting => arraySetting.arrayName == arrayName);
|
|
if (arraySetting) {
|
|
return arraySetting;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
getDefaultArraySetting(arrayName:string, index:number): ArraySetting {
|
|
return {arrayName: arrayName,
|
|
arrayStart: this.settings.arrayStart,
|
|
arrayElementStart: this.settings.arrayElementStart,
|
|
arraySpiltV2: this.settings.arraySpiltV2,
|
|
arrayElementEnd: this.settings.arrayElementEnd,
|
|
arrayEnd: this.settings.arrayEnd,
|
|
index: index
|
|
};
|
|
}
|
|
|
|
async addArraySetting() {
|
|
const index = this.settings.arraySettings.length + 1;
|
|
const arraySetting = this.getDefaultArraySetting(ARRAY_NAME_PREFIX_NAME + index, index);
|
|
this.settings.arraySettings.push(arraySetting);
|
|
await this.plugin.saveSettings();
|
|
return arraySetting;
|
|
}
|
|
}
|