wuhu-torn-helper/src/ts/class/LocalConfigWrapper.ts
2023-04-04 12:02:14 +08:00

57 lines
1.7 KiB
TypeScript

import { Injectable } from "../container/Injectable";
import ClassName from "../container/ClassName";
import Logger from "./Logger";
import defaultConfig, { Config, isNotified } from "./config/defaultConfig";
import MsgWrapper from "./utils/MsgWrapper";
@Injectable()
@ClassName('LocalConfigWrapper')
export default class LocalConfigWrapper {
constructor(
private readonly logger: Logger,
private readonly msgWrapper: MsgWrapper,
) {
}
public get config(): Config {
const _this = this;
return new Proxy(this.Local, {
get(target: Config, prop: string) {
return target[prop] ?? defaultConfig[prop];
},
set(target: Config, prop: string, value: any): boolean {
let config = target;
let preVal = config[prop];
config[prop] = value;
_this.setLocal(config);
let msg = `[${ prop }]值变更 ${ preVal }->${ value }`;
_this.logger.info(msg);
if (isNotified(prop))
_this.msgWrapper.create(msg);
return true;
}
})
}
/**
* 从localstorage解析返回配置对象
* @private
*/
private get Local(): Config {
let config: Config;
try {
config = JSON.parse(localStorage.getItem('wh_trans_settings'))
} catch (e) {
this.logger.error('配置获取失败, 载入默认');
config = defaultConfig;
localStorage.setItem('wh_trans_settings', JSON.stringify(defaultConfig));
}
return config;
}
private setLocal(config: Config) {
localStorage.setItem('wh_trans_settings', JSON.stringify(config));
}
}