Change ephemeral settings to only persist in ephemeralConfig

This commit is contained in:
ayumi-signal 2024-03-07 09:36:08 -08:00 committed by GitHub
parent 07e2fb7f60
commit 73e8bec42f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 295 additions and 265 deletions

View file

@ -9,9 +9,8 @@ import type { UnwrapPromise } from '../types/Util';
import type {
IPCEventsValuesType,
IPCEventsCallbacksType,
IPCEventGetterType,
IPCEventSetterType,
} from './createIPCEvents';
import type { SystemTraySetting } from '../types/SystemTraySetting';
type SettingOptionsType = {
getter?: boolean;
@ -23,7 +22,27 @@ export type SettingType<Value> = Readonly<{
setValue: (value: Value) => Promise<Value>;
}>;
function capitalize<Name extends keyof IPCEventsValuesType>(
export type ThemeType = 'light' | 'dark' | 'system';
export type EphemeralSettings = {
spellCheck: boolean;
systemTraySetting: SystemTraySetting;
themeSetting: ThemeType;
localeOverride: string | null;
};
export type SettingsValuesType = IPCEventsValuesType & EphemeralSettings;
type SettingGetterType<Key extends keyof SettingsValuesType> =
`get${Capitalize<Key>}`;
type SettingSetterType<Key extends keyof SettingsValuesType> =
`set${Capitalize<Key>}`;
type SettingUpdaterType<Key extends keyof SettingsValuesType> =
`update${Capitalize<Key>}`;
function capitalize<Name extends keyof SettingsValuesType>(
name: Name
): Capitalize<Name> {
const result = name.slice(0, 1).toUpperCase() + name.slice(1);
@ -31,21 +50,27 @@ function capitalize<Name extends keyof IPCEventsValuesType>(
return result as Capitalize<Name>;
}
function getSetterName<Key extends keyof IPCEventsValuesType>(
function getSetterName<Key extends keyof SettingsValuesType>(
name: Key
): IPCEventSetterType<Key> {
): SettingSetterType<Key> {
return `set${capitalize(name)}`;
}
function getGetterName<Key extends keyof IPCEventsValuesType>(
function getGetterName<Key extends keyof SettingsValuesType>(
name: Key
): IPCEventGetterType<Key> {
): SettingGetterType<Key> {
return `get${capitalize(name)}`;
}
function getUpdaterName<Key extends keyof EphemeralSettings>(
name: Key
): SettingUpdaterType<Key> {
return `update${capitalize(name)}`;
}
export function createSetting<
Name extends keyof IPCEventsValuesType,
Value extends IPCEventsValuesType[Name]
Name extends keyof SettingsValuesType,
Value extends SettingsValuesType[Name]
>(name: Name, overrideOptions: SettingOptionsType = {}): SettingType<Value> {
const options = {
getter: true,
@ -86,7 +111,7 @@ export function createCallback<
}
export function installSetting(
name: keyof IPCEventsValuesType,
name: keyof SettingsValuesType,
{ getter = true, setter = true }: { getter?: boolean; setter?: boolean } = {}
): void {
const getterName = getGetterName(name);
@ -135,6 +160,21 @@ export function installSetting(
}
}
export function installEphemeralSetting(name: keyof EphemeralSettings): void {
installSetting(name);
const updaterName = getUpdaterName(name);
ipcRenderer.on(`settings:update:${name}`, async (_event, value) => {
const updateFn = window.Events[updaterName] as (value: unknown) => void;
if (!updateFn) {
return;
}
await updateFn(value);
});
}
export function installCallback<Name extends keyof IPCEventsCallbacksType>(
name: Name
): void {