更新
This commit is contained in:
parent
d707d983fb
commit
e623d6fd14
@ -1,7 +1,8 @@
|
||||
import { Injectable } from "../container/Injectable";
|
||||
import ClassName from "../container/ClassName";
|
||||
import Logger from "./Logger";
|
||||
import defaultConfig, { Config } from "./config/defaultConfig";
|
||||
import defaultConfig, { Config, isNotified } from "./config/defaultConfig";
|
||||
import MsgWrapper from "./utils/MsgWrapper";
|
||||
|
||||
@Injectable()
|
||||
@ClassName('LocalConfigWrapper')
|
||||
@ -9,19 +10,25 @@ export default class LocalConfigWrapper {
|
||||
|
||||
constructor(
|
||||
private readonly logger: Logger,
|
||||
private readonly msgWrapper: MsgWrapper,
|
||||
) {
|
||||
}
|
||||
|
||||
public get config(): Config {
|
||||
let setLocal = this.setLocal;
|
||||
const _this = this;
|
||||
return new Proxy(this.Local, {
|
||||
get(target: Config, prop: string) {
|
||||
return target[prop] || defaultConfig[prop];
|
||||
return target[prop] ?? defaultConfig[prop];
|
||||
},
|
||||
set(target: Config, prop: string, value: any): boolean {
|
||||
let config = target;
|
||||
let preVal = config[prop];
|
||||
config[prop] = value;
|
||||
setLocal(config);
|
||||
_this.setLocal(config);
|
||||
let msg = `[${ prop }]值变更 ${ preVal }->${ value }`;
|
||||
_this.logger.info(msg);
|
||||
if (isNotified(prop))
|
||||
_this.msgWrapper.create(msg);
|
||||
return true;
|
||||
}
|
||||
})
|
||||
|
||||
@ -3,7 +3,6 @@ import { missionDict } from "../dictionary/translation";
|
||||
import getTaskHint from "../func/translate/getTaskHint";
|
||||
import CommonUtils from "./utils/CommonUtils";
|
||||
import Log from "./Log";
|
||||
import WuhuConfig from "./WuhuConfig";
|
||||
import SHOP_BEER_STATIC_ITEM_HTML from "../../static/html/buyBeer/shop_beer_static_item.html";
|
||||
import ADD_BEER_HEAD_HTML from "../../static/html/buyBeer/add_beer_head.html";
|
||||
import QUICK_CRIMES_HTML from "../../static/html/quick_crimes.html";
|
||||
@ -53,7 +52,8 @@ export default class UrlRouter {
|
||||
_base.append(reloadSwitch.getBase()).insert2Dom();
|
||||
reloadSwitch.getInput().addEventListener('change', () => {
|
||||
if (reloadSwitch.getInput().checked) window.location.replace(window.location.href);
|
||||
WuhuConfig.set('SolveGoogleScriptPendingIssue', reloadSwitch.getInput().checked, true);
|
||||
this.localConfigWrapper.config.SolveGoogleScriptPendingIssue = reloadSwitch.getInput().checked;
|
||||
// WuhuConfig.set('SolveGoogleScriptPendingIssue', reloadSwitch.getInput().checked, true);
|
||||
});
|
||||
|
||||
_base.append(document.createElement('br'));
|
||||
|
||||
@ -1,146 +0,0 @@
|
||||
import WuhuBase from "./WuhuBase";
|
||||
import Alert from "./utils/Alert";
|
||||
import Log from "./Log";
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
export default class WuhuConfig extends WuhuBase {
|
||||
|
||||
/**
|
||||
* 获取键或多个键对应的值,返回值或列表
|
||||
* @param key
|
||||
*/
|
||||
// public static get(key: string | string[]) {
|
||||
// let localPool = this.getLocal();
|
||||
// if (typeof key === 'string') {
|
||||
// return localPool[key];
|
||||
// } else {
|
||||
// let ret: string[] = [];
|
||||
// key.forEach(k => {
|
||||
// ret.push(localPool[k])
|
||||
// });
|
||||
// return ret;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
public static set(key: string, val: any, isNotify = false, callback: Function = () => null) {
|
||||
let config = WuhuConfig.getLocal();
|
||||
let prev = config[key];
|
||||
config[key] = val;
|
||||
localStorage.setItem('wh_trans_settings', JSON.stringify(config));
|
||||
|
||||
if (isNotify) new Alert('已保存设置')
|
||||
new Promise(() => callback()).then();
|
||||
Log.info(`值变更:[${ key }] ${ JSON.stringify({ from: prev, to: val }) }`);
|
||||
return val;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查类型不符合时设置为默认值
|
||||
*/
|
||||
// public static setDefaults(): void {
|
||||
// let count = 0;
|
||||
// [
|
||||
// // 开启翻译
|
||||
// { key: 'transEnable', val: false },
|
||||
// { key: 'transNew', val: true },
|
||||
// // 快速犯罪
|
||||
// { key: 'quickCrime', val: true },
|
||||
// // 任务助手
|
||||
// { key: 'missionHint', val: true },
|
||||
// // 小镇攻略
|
||||
// { key: 'xmasTownWT', val: true },
|
||||
// // 小镇提醒
|
||||
// { key: 'xmasTownNotify', val: true },
|
||||
// // 起飞爆e
|
||||
// { key: 'energyAlert', val: true },
|
||||
// // 飞行闹钟
|
||||
// { key: 'trvAlarm', val: true },
|
||||
// // 啤酒提醒
|
||||
// { key: '_15Alarm', val: true },
|
||||
// // 捡垃圾助手
|
||||
// { key: 'cityFinder', val: false },
|
||||
// // 叠E保护
|
||||
// { key: 'SEProtect', val: false },
|
||||
// // PT一键购买
|
||||
// { key: 'ptQuickBuy', val: false },
|
||||
// // 光速拔刀 6-关闭
|
||||
// { key: 'quickAttIndex', val: 2 },
|
||||
// // 光速跑路 0-leave 1-mug 2-hos 3-关闭
|
||||
// { key: 'quickFinishAtt', val: 3 },
|
||||
// // 自动开打和结束
|
||||
// { key: 'autoStartFinish', val: false },
|
||||
// /**
|
||||
// * @deprecated 废弃
|
||||
// */
|
||||
// { key: 'attRelocate', val: true },
|
||||
// // 攻击自刷新 0-无间隔 1-5s 6-关闭
|
||||
// { key: 'attReload', val: 6 },
|
||||
// // 价格监视
|
||||
// { key: 'priceWatcher', val: { xan: -1, pt: -1 } },
|
||||
// // 开发者模式
|
||||
// { key: 'isDev', val: false },
|
||||
// // 啤酒提醒时间
|
||||
// { key: '_15AlarmTime', val: 50 },
|
||||
// // 4条转跳
|
||||
// { key: 'barsRedirect', val: true },
|
||||
// // 浮动存钱框
|
||||
// { key: 'floatDepo', val: true },
|
||||
// // 公司转跳存钱
|
||||
// { key: 'companyRedirect', val: true },
|
||||
// // 收起公司冰蛙效率表
|
||||
// { key: 'companyBWCollapse', val: true },
|
||||
// /**
|
||||
// * @deprecated
|
||||
// */
|
||||
// { key: 'removeScripts', val: true },
|
||||
// // 海外警告
|
||||
// { key: 'abroadWarning', val: true },
|
||||
// // 落地转跳
|
||||
// { key: 'landedRedirect', val: '' },
|
||||
// // 任何位置一键存钱
|
||||
// { key: 'companyDepositAnywhere', val: false },
|
||||
// // 火车提醒时间
|
||||
// { key: 'CHTrainsDetect', val: 0 },
|
||||
// // 火车提醒开关
|
||||
// { key: 'CHTrainsDetectSwitch', val: true },
|
||||
// // 隐藏个人资料头像
|
||||
// { key: 'HideProfileImg', val: false },
|
||||
// // 显示曾用名
|
||||
// { key: 'ShowNameHistory', val: true },
|
||||
// // 盯梢模式强度 0-550 1-950 2-1450 ms
|
||||
// { key: 'WatchTargetFreq', val: 1 },
|
||||
// // 隐藏侧边栏
|
||||
// { key: 'HideSidebar', val: false },
|
||||
// // 添加隐藏边栏按钮
|
||||
// { key: 'HideSidebarBtn', val: true },
|
||||
// // 搜索页占位区
|
||||
// { key: 'SearchPagePlaceholder', val: true },
|
||||
// // 解决一直转圈(加载中)的问题
|
||||
// { key: 'SolveGoogleScriptPendingIssue', val: false },
|
||||
// // 图标坐标
|
||||
// { key: 'IconPosition', val: {} },
|
||||
// // 记住图标位置
|
||||
// { key: 'SaveIconPosition', val: false },
|
||||
// // 现金变动提醒
|
||||
// { key: 'CashChangeAlert', val: false },
|
||||
// // 收集数据以改进翻译质量
|
||||
// { key: 'CollectPlayerData', val: true },
|
||||
// // 迷你资料卡显示上次行动时间
|
||||
// { key: 'ShowMiniProfLastAct', val: true },
|
||||
//
|
||||
// /**
|
||||
// * @deprecated
|
||||
// */
|
||||
// { key: 'dangerZone', val: false },
|
||||
// ].forEach(df => {
|
||||
// if (typeof WuhuConfig.get(df.key) !== typeof df.val) {
|
||||
// WuhuConfig.set(df.key, df.val);
|
||||
// count++;
|
||||
// }
|
||||
// });
|
||||
// Log.info('设置默认值,新:' + count);
|
||||
// }
|
||||
}
|
||||
@ -1,4 +1,3 @@
|
||||
import WuhuConfig from "../WuhuConfig";
|
||||
import Log from "../Log";
|
||||
import InfoUtils from "../utils/InfoUtils";
|
||||
import Alert from "../utils/Alert";
|
||||
@ -107,11 +106,16 @@ export default class BuyBeerHelper implements BeerMonitorLoop, ResponseInject {
|
||||
|
||||
public skip_today(): void {
|
||||
const date = new Date();
|
||||
WuhuConfig.set('_15_alarm_ignore', [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()], false);
|
||||
this.localConfigWrapper.config._15_alarm_ignore = [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()];
|
||||
// WuhuConfig.set('_15_alarm_ignore', [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()], false);
|
||||
// 通知
|
||||
const notify = new Alert(`明早8点前将不再提醒 <button id="wh-rd-btn-${ this.mathUtils.getRandomInt(0, 100) }">取消</button>`);
|
||||
// 通知中的取消按钮
|
||||
notify.getElement().querySelector('.wh-notify-msg button').addEventListener('click', () => WuhuConfig.set('_15_alarm_ignore', undefined, true));
|
||||
notify.getElement().querySelector('.wh-notify-msg button')
|
||||
.addEventListener(
|
||||
'click',
|
||||
() => this.localConfigWrapper.config._15_alarm_ignore.length = 0
|
||||
);
|
||||
}
|
||||
|
||||
public setTimeHandler(): void {
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
import WuhuConfig from "../WuhuConfig";
|
||||
import CommonUtils from "../utils/CommonUtils";
|
||||
import TornStyleBlock from "../utils/TornStyleBlock";
|
||||
import TornStyleSwitch from "../utils/TornStyleSwitch";
|
||||
@ -41,7 +40,7 @@ export default class ProfileHelper implements ResponseInject {
|
||||
this.block.append(hideImgSwitch.getBase());
|
||||
hideImgSwitch.getInput().addEventListener('change', () => {
|
||||
document.body.classList.toggle('wh-hide_profile_img');
|
||||
WuhuConfig.set('HideProfileImg', hideImgSwitch.getInput().checked, true);
|
||||
this.localConfigWrapper.config.HideProfileImg = hideImgSwitch.getInput().checked;
|
||||
});
|
||||
if (this.localConfigWrapper.config.ShowNameHistory) {
|
||||
globVars.responseHandlers.push((url, body) => this.responseHandler(url, body));
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import TornStyleBlock from "../utils/TornStyleBlock";
|
||||
import WuhuConfig from "../WuhuConfig";
|
||||
import TornStyleSwitch from "../utils/TornStyleSwitch";
|
||||
import { Injectable } from "../../container/Injectable";
|
||||
import ClassName from "../../container/ClassName";
|
||||
@ -21,7 +20,7 @@ export default class StackHelper {
|
||||
input.onchange = e => {
|
||||
let target = e.target as HTMLInputElement;
|
||||
document.body.classList.toggle('wh-gym-stack');
|
||||
WuhuConfig.set('SEProtect', target.checked, true);
|
||||
this.localConfigWrapper.config.SEProtect = target.checked;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -1,98 +1,10 @@
|
||||
const defaultConfig = {
|
||||
// 开启翻译
|
||||
transEnable: false,
|
||||
transNew: true,
|
||||
// 快速犯罪
|
||||
quickCrime: true,
|
||||
// 任务助手
|
||||
missionHint: true,
|
||||
// 小镇攻略
|
||||
xmasTownWT: true,
|
||||
// 小镇提醒
|
||||
xmasTownNotify: true,
|
||||
// 起飞爆e
|
||||
energyAlert: true,
|
||||
// 飞行闹钟
|
||||
trvAlarm: true,
|
||||
// 啤酒提醒
|
||||
_15Alarm: true,
|
||||
// 啤酒提醒时间
|
||||
_15AlarmTime: 50,
|
||||
// 啤酒提醒忽略当天
|
||||
_15_alarm_ignore: '',
|
||||
// 捡垃圾助手
|
||||
cityFinder: false,
|
||||
// 叠E保护
|
||||
SEProtect: false,
|
||||
// PT一键购买
|
||||
ptQuickBuy: false,
|
||||
// 光速拔刀 6-关闭
|
||||
quickAttIndex: 2,
|
||||
// 光速跑路 0-leave 1-mug 2-hos 3-关闭
|
||||
quickFinishAtt: 3,
|
||||
// 自动开打和结束
|
||||
autoStartFinish: false,
|
||||
// 攻击自刷新 0-无间隔 1-5s 6-关闭
|
||||
attReload: 6,
|
||||
// 价格监视
|
||||
priceWatcher: { xan: -1, pt: -1 },
|
||||
// 开发者模式
|
||||
isDev: false,
|
||||
// 4条转跳
|
||||
barsRedirect: true,
|
||||
// 浮动存钱框
|
||||
floatDepo: true,
|
||||
// 公司转跳存钱
|
||||
companyRedirect: true,
|
||||
// 收起公司冰蛙效率表
|
||||
companyBWCollapse: true,
|
||||
// 海外警告
|
||||
abroadWarning: true,
|
||||
// 落地转跳
|
||||
landedRedirect: '',
|
||||
// 任何位置一键存钱
|
||||
companyDepositAnywhere: false,
|
||||
// 火车提醒时间
|
||||
CHTrainsDetect: 0,
|
||||
// 火车提醒开关
|
||||
CHTrainsDetectSwitch: true,
|
||||
// 隐藏个人资料头像
|
||||
HideProfileImg: false,
|
||||
// 显示曾用名
|
||||
ShowNameHistory: true,
|
||||
// 盯梢模式强度 0-550 1-950 2-1450 ms
|
||||
WatchTargetFreq: 1,
|
||||
// 隐藏侧边栏
|
||||
HideSidebar: false,
|
||||
// 添加隐藏边栏按钮
|
||||
HideSidebarBtn: true,
|
||||
// 搜索页占位区
|
||||
SearchPagePlaceholder: true,
|
||||
// 解决一直转圈(加载中)的问题
|
||||
SolveGoogleScriptPendingIssue: false,
|
||||
// 图标坐标
|
||||
IconPosition: {} as { x: number, y: number },
|
||||
// 记住图标位置
|
||||
SaveIconPosition: false,
|
||||
// 现金变动提醒
|
||||
CashChangeAlert: false,
|
||||
// 收集数据以改进翻译质量
|
||||
CollectPlayerData: true,
|
||||
// 迷你资料卡显示上次行动时间
|
||||
ShowMiniProfLastAct: true,
|
||||
// 自定义css
|
||||
CustomCss: '',
|
||||
|
||||
/** @deprecated */
|
||||
attRelocate: false,
|
||||
};
|
||||
// } as const;
|
||||
|
||||
// export default defaultConfig;
|
||||
const notifyKey = Symbol('ConfigNotifyKey');
|
||||
|
||||
class DefaultConfigType {
|
||||
// 开启翻译
|
||||
transEnable = false;
|
||||
|
||||
@Notified()
|
||||
transNew = true;
|
||||
// 快速犯罪
|
||||
quickCrime = true;
|
||||
@ -108,12 +20,16 @@ class DefaultConfigType {
|
||||
trvAlarm = true;
|
||||
// 啤酒提醒
|
||||
_15Alarm = true;
|
||||
_15_alarm_ignore = false;
|
||||
|
||||
@Notified()
|
||||
_15_alarm_ignore: number[] = [];
|
||||
// 啤酒提醒时间
|
||||
_15AlarmTime = 50;
|
||||
// 捡垃圾助手
|
||||
cityFinder = false;
|
||||
|
||||
// 叠E保护
|
||||
@Notified()
|
||||
SEProtect = false;
|
||||
// PT一键购买
|
||||
ptQuickBuy = false;
|
||||
@ -141,7 +57,9 @@ class DefaultConfigType {
|
||||
companyBWCollapse = true;
|
||||
// 海外警告
|
||||
abroadWarning = true;
|
||||
|
||||
// 落地转跳
|
||||
@Notified()
|
||||
landedRedirect = '';
|
||||
// 任何位置一键存钱
|
||||
companyDepositAnywhere = false;
|
||||
@ -149,7 +67,9 @@ class DefaultConfigType {
|
||||
CHTrainsDetect = 0;
|
||||
// 火车提醒开关
|
||||
CHTrainsDetectSwitch = true;
|
||||
|
||||
// 隐藏个人资料头像
|
||||
@Notified()
|
||||
HideProfileImg = false;
|
||||
// 显示曾用名
|
||||
ShowNameHistory = true;
|
||||
@ -161,7 +81,9 @@ class DefaultConfigType {
|
||||
HideSidebarBtn = true;
|
||||
// 搜索页占位区
|
||||
SearchPagePlaceholder = true;
|
||||
|
||||
// 解决一直转圈(加载中)的问题
|
||||
@Notified()
|
||||
SolveGoogleScriptPendingIssue = false;
|
||||
// 图标坐标
|
||||
IconPosition: Partial<{ x: number, y: number }> = {};
|
||||
@ -173,10 +95,22 @@ class DefaultConfigType {
|
||||
CollectPlayerData = true;
|
||||
// 迷你资料卡显示上次行动时间
|
||||
ShowMiniProfLastAct = true;
|
||||
|
||||
// 自定义css
|
||||
@Notified()
|
||||
CustomCss = '';
|
||||
}
|
||||
|
||||
|
||||
export type Config = DefaultConfigType;
|
||||
export default new DefaultConfigType() as Readonly<Config>;
|
||||
|
||||
let config = new DefaultConfigType();
|
||||
|
||||
export default config as Readonly<Config>;
|
||||
|
||||
function Notified(f: boolean = true) {
|
||||
return Reflect.metadata(notifyKey, f);
|
||||
}
|
||||
|
||||
export function isNotified(propertyKey: string): boolean {
|
||||
return Reflect.getMetadata(notifyKey, config, propertyKey);
|
||||
}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import Popup from "../utils/Popup";
|
||||
import WuhuConfig from "../WuhuConfig";
|
||||
import ClassName from "../../container/ClassName";
|
||||
import { Injectable } from "../../container/Injectable";
|
||||
import LocalConfigWrapper from "../LocalConfigWrapper";
|
||||
@ -19,7 +18,7 @@ export default class CustomCssHandler {
|
||||
let button = pop.element.querySelector('button');
|
||||
textarea.value = this.localConfigWrapper.config.CustomCss || '';
|
||||
button.addEventListener('click', () => {
|
||||
WuhuConfig.set('CustomCss', textarea.value || '', true);
|
||||
this.localConfigWrapper.config.CustomCss = textarea.value || '';
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,6 @@ import LOADING_IMG_HTML from "../../../static/html/loading_img.html";
|
||||
import Timer from "./Timer";
|
||||
import FetchUtils from "./FetchUtils";
|
||||
import TornStyleSwitch from "./TornStyleSwitch";
|
||||
import WuhuConfig from "../WuhuConfig";
|
||||
import { MenuItemConfig } from "../ZhongIcon";
|
||||
import TRAVEL_STATE from "../../enum/TravelState";
|
||||
import InventoryItemInfo from "../../interface/responseType/InventoryItemInfo";
|
||||
@ -304,7 +303,7 @@ export default class CommonUtils {
|
||||
(tip) && (switcher.getBase().setAttribute('title', tip));
|
||||
_input.checked = this.localConfigWrapper.config[dictName];
|
||||
_input.onchange = e => {
|
||||
WuhuConfig.set(dictName, _input.checked, true);
|
||||
this.localConfigWrapper.config[dictName] = _input.checked;
|
||||
if (changeEv) changeEv(e);
|
||||
};
|
||||
new_node.appendChild(switcher.getBase());
|
||||
@ -339,7 +338,7 @@ export default class CommonUtils {
|
||||
option.innerHTML = domText;
|
||||
select.appendChild(option);
|
||||
});
|
||||
select.onchange = e => WuhuConfig.set(dictName, (<HTMLSelectElement>e.target).selectedIndex);
|
||||
select.onchange = e => this.localConfigWrapper.config[dictName] = (<HTMLSelectElement>e.target).selectedIndex;
|
||||
label.appendChild(text);
|
||||
label.appendChild(select);
|
||||
new_node.appendChild(label);
|
||||
|
||||
12
src/ts/class/utils/MsgWrapper.ts
Normal file
12
src/ts/class/utils/MsgWrapper.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import ClassName from "../../container/ClassName";
|
||||
import { Injectable } from "../../container/Injectable";
|
||||
import Alert from "./Alert";
|
||||
import IWHNotify from "../../interface/IWHNotify";
|
||||
|
||||
@ClassName('MsgWrapper')
|
||||
@Injectable()
|
||||
export default class MsgWrapper {
|
||||
create(msg: string, options: IWHNotify = {},): Alert {
|
||||
return new Alert(msg, options);
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,3 @@
|
||||
import WuhuConfig from "../../class/WuhuConfig";
|
||||
import Popup from "../../class/utils/Popup";
|
||||
import LocalConfigWrapper from "../../class/LocalConfigWrapper";
|
||||
import { Container } from "../../container/Container";
|
||||
@ -28,7 +27,7 @@ export default function landedRedirect() {
|
||||
buttonFct.innerHTML = '填入帮派金库金库';
|
||||
buttonTest.innerHTML = '测试链接';
|
||||
|
||||
buttonSave.addEventListener('click', () => WuhuConfig.set('landedRedirect', input.value, true));
|
||||
buttonSave.addEventListener('click', () => localConfigWrapper.config.landedRedirect = input.value);
|
||||
buttonCmp.addEventListener('click', () => input.value = 'https://www.torn.com/companies.php#/option=funds');
|
||||
buttonFct.addEventListener('click', () => input.value = 'https://www.torn.com/factions.php?step=your#/tab=armoury');
|
||||
buttonTest.addEventListener('click', () => window.open(input.value));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user