From 62f2fbf838ca30b36329e70dfe630b1ca30cc70f Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Wed, 2 Aug 2023 23:25:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=BE=E7=BD=AE=E7=9A=84?= =?UTF-8?q?=E7=9B=91=E5=90=AC=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/main/setting.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/core/main/setting.ts b/src/core/main/setting.ts index 2ef3b7e..085f658 100644 --- a/src/core/main/setting.ts +++ b/src/core/main/setting.ts @@ -1,3 +1,5 @@ +import { EmitableEvent, EventEmitter } from '../common/eventEmitter'; + type MotaSettingType = boolean | number | MotaSetting; interface MotaSettingItem { @@ -8,7 +10,15 @@ interface MotaSettingItem { display?: (value: T) => string; } -class MotaSetting { +interface SettingEvent extends EmitableEvent { + valueChange: ( + key: string, + newValue: T, + oldValue: T + ) => void; +} + +class MotaSetting extends EventEmitter { private list: Record = {}; special?: string; @@ -17,6 +27,7 @@ class MotaSetting { */ markAsSpecial(sp: string) { this.special = sp; + this.register('@special', '', false); return this; } @@ -70,7 +81,9 @@ class MotaSetting { `Expected: ${typeof setting.value}. Recieve: ${typeof value}` ); } + const old = setting.value as boolean | number; setting.value = value; + this.emit('valueChange', this.formatKey(key), old, value); } /** @@ -86,7 +99,9 @@ class MotaSetting { `Type expected: number. See: ${typeof setting.value}` ); } + const old = setting.value as boolean | number; setting.value += value; + this.emit('valueChange', this.formatKey(key), old, value); } /** @@ -115,6 +130,10 @@ class MotaSetting { return now.list[list.at(-1)!] ?? null; } + + private formatKey(key: string) { + return key.replace('.@special', ''); + } } export const mainSetting = new MotaSetting();