Initial commit: mumh5, a modern Mumble client
Electron desktop app with a Svelte 5 interface for any Mumble server. - Mumble protocol core: TLS, handshake, channels, users, text, plugin data, client-side pacing of Murmur's rate limits - Voice: WebCodecs Opus over the TCP tunnel, voice activity, push to talk, always-on, devices, per-user volume and local mute - Several servers at once, voice on one; server rail with icons and ordering - Chat: channels, direct messages, side chat, file sharing through f0ckm, inline images without it, click-to-play YouTube - Profiles with rich descriptions, registration, rename, nicknames, connection information and moderation menus - Identity wizard, multiple identities, PKCS#12 import/export, desktop Mumble certificate import, certificate pinning and viewer - Tray icon with voice state - Unit, server and end-to-end tests against a real Murmur Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import type { CertDetails } from '../core/transport.ts';
|
||||
|
||||
export interface PromptRequest {
|
||||
title: string;
|
||||
label: string;
|
||||
confirm: string;
|
||||
danger?: boolean;
|
||||
input?: 'text' | 'password' | 'none';
|
||||
initial?: string;
|
||||
text?: string;
|
||||
onsubmit: (value: string) => void;
|
||||
}
|
||||
|
||||
export interface CertRequest {
|
||||
title: string;
|
||||
chain: CertDetails[];
|
||||
status?: { ok: boolean; text: string };
|
||||
}
|
||||
|
||||
// App-wide dialogs that can be opened from anywhere (menus, panels)
|
||||
class Ui {
|
||||
prompt = $state<PromptRequest | null>(null);
|
||||
cert = $state<CertRequest | null>(null);
|
||||
settingsOpen = $state(false);
|
||||
wizard = $state<'setup' | 'add' | null>(null);
|
||||
// Quick audio popover from right-clicking mute (input) or deafen (output)
|
||||
quickAudio = $state<{ kind: 'input' | 'output'; x: number; y: number } | null>(null);
|
||||
settingsTab = $state<'voice' | 'files' | 'identities'>('voice');
|
||||
// Session whose connection information is shown
|
||||
userInfo = $state<number | null>(null);
|
||||
// Set when a panel was opened on a layout where it is an overlay
|
||||
panelOpen = $state(false);
|
||||
}
|
||||
|
||||
export const ui = new Ui();
|
||||
Reference in New Issue
Block a user