This commit is contained in:
Miodec 2025-12-12 17:15:20 +01:00
parent 122178eac9
commit 197e15d6b6
3 changed files with 67 additions and 46 deletions

View file

@ -88,55 +88,55 @@ function isConfigChangeBlocked(): boolean {
return false;
}
export function batchSetConfig(
keyValues: Partial<Config>,
nosave: boolean = false,
): Partial<Record<keyof Config, boolean>> {
let ret: Partial<Record<keyof Config, boolean>> = {};
for (const key of typedKeys(keyValues)) {
ret[key] = setConfig(key, keyValues[key] as Config[keyof Config], {
nosave: true,
batched: true,
});
//@ts-expect-error this is fine
configToSend[key] = config[key];
}
// export function batchSetConfig(
// keyValues: Partial<Config>,
// nosave: boolean = false,
// ): Partial<Record<keyof Config, boolean>> {
// let ret: Partial<Record<keyof Config, boolean>> = {};
// for (const key of typedKeys(keyValues)) {
// ret[key] = setConfig(key, keyValues[key] as Config[keyof Config], {
// nosave: true,
// batched: true,
// });
// //@ts-expect-error this is fine
// configToSend[key] = config[key];
// }
const restartRequired = typedKeys(keyValues).some((key) => {
const metadata = configMetadata[key];
return metadata.changeRequiresRestart;
});
// const restartRequired = typedKeys(keyValues).some((key) => {
// const metadata = configMetadata[key];
// return metadata.changeRequiresRestart;
// });
const triggerResizeNeeded = typedKeys(keyValues).some((key) => {
const metadata = configMetadata[key];
return metadata.triggerResize;
});
// const triggerResizeNeeded = typedKeys(keyValues).some((key) => {
// const metadata = configMetadata[key];
// return metadata.triggerResize;
// });
if (triggerResizeNeeded) {
triggerResize();
}
// if (triggerResizeNeeded) {
// triggerResize();
// }
if (!nosave) {
configLS.set(config);
saveToDatabase();
}
// if (!nosave) {
// configLS.set(config);
// saveToDatabase();
// }
ConfigEvent.dispatch({
key: "batchConfigApplied",
nosave,
fullConfig: config,
restartRequired,
});
// ConfigEvent.dispatch({
// key: "batchConfigApplied",
// nosave,
// fullConfig: config,
// restartRequired,
// });
return ret;
}
// return ret;
// }
export function setConfig<T extends keyof Config>(
key: T,
value: Config[T],
options?: {
nosave?: boolean;
batched?: boolean;
noevent?: boolean;
},
): boolean {
const metadata = configMetadata[key] as ConfigMetadataObject[T];
@ -225,7 +225,8 @@ export function setConfig<T extends keyof Config>(
config[key] = value;
if (!options?.nosave) saveToLocalStorage(key, options?.nosave);
if (!options?.batched) {
if (!options?.noevent) {
// @ts-expect-error i can't figure this out
ConfigEvent.dispatch({
key: key,
@ -233,11 +234,12 @@ export function setConfig<T extends keyof Config>(
nosave: options?.nosave ?? false,
previousValue: previousValue as Config[T],
});
if (metadata.triggerResize && !options?.nosave) {
triggerResize();
}
}
if (metadata.triggerResize && !options?.nosave) {
triggerResize();
}
metadata.afterSet?.({
nosave: options?.nosave ?? false,
currentConfig: config,
@ -345,7 +347,7 @@ export async function applyConfig(
const set = setConfig(configKey, configValue, {
nosave: true,
batched: true,
noevent: true,
});
if (!set) {
@ -357,6 +359,8 @@ export async function applyConfig(
saveToLocalStorage(key);
}
ConfigEvent.dispatch({ key: "configApplied", fullConfig: config });
ConfigEvent.dispatch({ key: "fullConfigChangeFinished" });
}

View file

@ -4,12 +4,11 @@ export type ConfigEventKey =
| keyof Config
| "fullConfigChange"
| "fullConfigChangeFinished"
| "batchConfigApplied";
| "configApplied";
type SubscribeParams = {
nosave?: boolean;
fullConfig?: Config;
restartRequired?: boolean;
} & {
[K in ConfigEventKey]?: K extends keyof Config
? { key: K; newValue: Config[K]; previousValue: Config[K] }
@ -25,7 +24,7 @@ export function subscribe(fn: SubscribeFunction): void {
}
export function dispatch(options: SubscribeParams): void {
console.log("displatching config event", options);
console.log("dispatching config event", options);
subscribers.forEach((fn) => {
try {
fn(options);

View file

@ -2033,6 +2033,24 @@ $("#wordsWrapper").on("click", () => {
});
ConfigEvent.subscribe(({ key, newValue }) => {
if (key === "configApplied") {
$(
"#caret, #paceCaret, #liveStatsMini, #typingTest, #wordsInput, #compositionDisplay",
).css("fontSize", Config.fontSize + "rem");
updateWordWrapperClasses();
updateLiveStatsOpacity(Config.timerOpacity);
updateLiveStatsColor(Config.timerColor);
if (!Config.showOutOfFocusWarning) OutOfFocus.hide();
if (Config.compositionDisplay === "below") {
CompositionDisplay.update(" ");
CompositionDisplay.show();
} else {
CompositionDisplay.hide();
}
flipColors(Config.flipTestColors);
colorful(Config.colorfulMode);
}
if (key === "quickRestart") {
if (newValue === "off") {
$(".pageTest #restartTestButton").removeClass("hidden");