diff options
author | metamuffin <metamuffin@disroot.org> | 2022-09-10 22:10:36 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-09-10 22:10:36 +0200 |
commit | bd33ef5dc96a938fe1886cc6775d7e38652c055d (patch) | |
tree | a8cba897b4bcd19488dacf60c0d5e387788069ce /client-web/source/preferences/mod.ts | |
parent | c8a23ccb83a28808517915d3b76a8b8159e6ed4d (diff) | |
download | keks-meet-bd33ef5dc96a938fe1886cc6775d7e38652c055d.tar keks-meet-bd33ef5dc96a938fe1886cc6775d7e38652c055d.tar.bz2 keks-meet-bd33ef5dc96a938fe1886cc6775d7e38652c055d.tar.zst |
keep mic_gain in sync with prefs
Diffstat (limited to 'client-web/source/preferences/mod.ts')
-rw-r--r-- | client-web/source/preferences/mod.ts | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/client-web/source/preferences/mod.ts b/client-web/source/preferences/mod.ts index 5f238bb..d1f3635 100644 --- a/client-web/source/preferences/mod.ts +++ b/client-web/source/preferences/mod.ts @@ -17,14 +17,17 @@ type PrefMap<T extends { [key: string]: { type: unknown } }> = { [Key in keyof T type Optional<T extends { [key: string]: unknown }> = { [Key in keyof T]?: T[Key] } export const { prefs: PREFS, explicit: PREFS_EXPLICIT } = register_prefs(PREF_DECLS) const pref_change_handlers: Map<keyof typeof PREFS, Set<() => unknown>> = new Map() -export const on_pref_changed = (key: keyof typeof PREFS, cb: () => unknown) => - (pref_change_handlers.get(key) +export const on_pref_changed = (key: keyof typeof PREFS, cb: () => unknown): (() => void) => { + const m = (pref_change_handlers.get(key) ?? (() => { const n = new Set<() => unknown>(); pref_change_handlers.set(key, n); return n })() - ).add(cb) + ) + m.add(cb) + return () => m.delete(cb) +} export function register_prefs<T extends Record<string, PrefDecl<unknown>>>(ds: T): { prefs: PrefMap<T>, explicit: Optional<PrefMap<T>> } { const prefs: PrefMap<T> = {} as PrefMap<T> |