diff options
author | metamuffin <metamuffin@disroot.org> | 2022-09-10 00:56:25 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-09-10 00:56:25 +0200 |
commit | 429dc2d5375abf8ca9c3861bdc4bdff52a31b0e4 (patch) | |
tree | 2fa8201ebdf45237a9ec90429bd18b5d6cdd9944 /client-web/source/preferences.ts | |
parent | 95041256f86745832df42423e889d50d2cff35e7 (diff) | |
download | keks-meet-429dc2d5375abf8ca9c3861bdc4bdff52a31b0e4.tar keks-meet-429dc2d5375abf8ca9c3861bdc4bdff52a31b0e4.tar.bz2 keks-meet-429dc2d5375abf8ca9c3861bdc4bdff52a31b0e4.tar.zst |
overlay rework + settings
Diffstat (limited to 'client-web/source/preferences.ts')
-rw-r--r-- | client-web/source/preferences.ts | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/client-web/source/preferences.ts b/client-web/source/preferences.ts deleted file mode 100644 index d6b6656..0000000 --- a/client-web/source/preferences.ts +++ /dev/null @@ -1,83 +0,0 @@ -// there should be no deps to dom APIs in this file for the tablegen to work - -export function hex_id(len = 8): string { - if (len > 8) return hex_id() + hex_id(len - 8) - return Math.floor(Math.random() * 16 ** len).toString(16).padStart(len, "0") -} - -// TODO this could be simpler -const string = "", bool = false, number = 0; // example types for ts -export const PREF_DECLS = { - username: { type: string, default: "guest-" + hex_id(), description: "Username" }, - warn_redirect: { type: bool, default: false, description: "Interal option that is set by a server redirect." }, - - /* MEDIA */ - microphone_enabled: { type: bool, default: false, description: "Add one microphone track on startup" }, - screencast_enabled: { type: bool, default: false, description: "Add one screencast track on startup" }, - camera_enabled: { type: bool, default: false, description: "Add one camera track on startup" }, - rnnoise: { type: bool, default: true, description: "Use RNNoise for noise suppression" }, - native_noise_suppression: { type: bool, default: false, description: "Suggest the browser to do noise suppression" }, - microphone_gain: { type: number, default: 1, description: "Amplify microphone volume" }, - video_fps: { type: number, description: "Preferred framerate (in 1/s) for screencast and camera" }, - video_resolution: { type: number, description: "Preferred width for screencast and camera" }, - camera_facing_mode: { type: string, possible_values: ["environment", "user"], description: "Prefer user-facing or env-facing camera" }, - auto_gain_control: { type: bool, description: "Automatically adjust mic gain" }, - echo_cancellation: { type: bool, description: "Cancel echo" }, -} - -export interface PrefDecl<T> { - default?: T, - type: T, - description?: string, - possible_values?: T[] - optional?: boolean, -} - -type Type = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"; -type TypeMapper = { "string": string, "number": number, "boolean": boolean } - -type PrefMap<T extends { [key: string]: { type: unknown } }> = { [Key in keyof T]: T[Key]["type"] } -export function register_prefs<T extends Record<string, PrefDecl<unknown>>>(ds: T): PrefMap<T> { - const p: PrefMap<T> = {} as PrefMap<T> - for (const key in ds) { - const d = ds[key]; - const type = typeof d.type; - let value = get_param(type, key) ?? d.default; - if (d.possible_values) if (!d.possible_values.includes(value)) value = d.default - p[key] = value - } - return p -} - -const raw_params = globalThis.Deno ? {} : load_params().p; -export function load_params(): { p: { [key: string]: string }, rname: string } { - const q: Record<string, string> = {} - const [rname, params] = window.location.hash.substring(1).split("?") - if (!params) return { rname, p: {} } - for (const kv of params.split("&")) { - const [key, value] = kv.split("=") - if (key == "prototype") continue - q[decodeURIComponent(key)] = decodeURIComponent(value) - } - return { p: q, rname } -} - -export function get_param<T>(ty: string, key: string): T | undefined { - const v = raw_params[key] - if (v == undefined) return undefined - if (ty == "string") return v as unknown as T - else if (ty == "number") { - const n = parseInt(v) - if (!Number.isNaN(n)) return n as unknown as T - console.warn("invalid number parameter"); - } else if (ty == "boolean") { - if (v == "0" || v == "false" || v == "no") return false as unknown as T - if (v == "1" || v == "true" || v == "yes") return true as unknown as T - console.warn("invalid boolean parameter"); - } else { - throw new Error("invalid param type"); - } - return undefined -} - -export const PREFS = register_prefs(PREF_DECLS) |