diff options
Diffstat (limited to 'client-web/source/preferences.ts')
-rw-r--r-- | client-web/source/preferences.ts | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/client-web/source/preferences.ts b/client-web/source/preferences.ts index e7fc7bb..63efeb2 100644 --- a/client-web/source/preferences.ts +++ b/client-web/source/preferences.ts @@ -1,9 +1,12 @@ +import { hex_id } from "./helper.ts"; export interface PrefDecl<T> { name: string, - default: T + default: T, + type?: Type, description: string, possible_values?: T[] + optional?: boolean, } type Type = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"; @@ -13,7 +16,9 @@ export function register_prefs<T extends Record<string, PrefDecl<unknown>>>(ds: const p: PrefMap<T> = {} as PrefMap<T> for (const key in ds) { const d = ds[key]; - let value = get_param(d.default, d.name) ?? d.default; + let type = typeof d.default; + if (type == "undefined") { if (d.type) type = d.type; else throw new Error("type needed"); } + let value = get_param(type, d.name) ?? d.default; if (d.possible_values) if (!d.possible_values.includes(value)) value = d.default p[key] = value } @@ -31,10 +36,9 @@ export function load_query_params(): { [key: string]: string } { return q } -export function get_param<T>(example: T, key: string): T | undefined { +export function get_param<T>(ty: string, key: string): T | undefined { const v = raw_params[key] if (v == undefined) return undefined - const ty = typeof example if (ty == "string") return v as unknown as T else if (ty == "number") { const n = parseInt(v) @@ -50,14 +54,14 @@ export function get_param<T>(example: T, key: string): T | undefined { return undefined } - const PREF_DECLS = { rnnoise: { name: "rnnoise", default: true, description: "Use RNNoise for noise suppression" }, native_noise_suppression: { name: "native_noise_suppression", default: false, description: "Suggest the browser to do noise suppression" }, - username: { name: "username", default: "guest", description: "Username" }, + username: { name: "username", default: "guest-" + hex_id(), description: "Username" }, microphone_gain: { name: "microphone_gain", default: 1, description: "Amplify microphone volume" }, microphone_enabled: { name: "microphone_enabled", default: false, description: "Add one microphone track on startup" }, camera_enabled: { name: "camera_enabled", default: false, description: "Add one camera track on startup" }, screencast_enabled: { name: "screencast_enabled", default: false, description: "Add one screencast track on startup" }, + camera_facing_mode: { name: "camera_facing_mode", default: undefined as undefined | string, type: "string" as const, possible_values: ["environment", "user", undefined], description: "Prefer user-facing or env-facing camera" } } export const PREFS = register_prefs(PREF_DECLS) |