feat(clients): expose all channel codec params + guest nickname everywhere
Channel create/edit UIs only surfaced a subset of the core's vc_audio_config, and DRED was exposed nowhere. While adding it, found a latent ABI mismatch: both Swift AudioConfig and the C# VcAudioConfigNative blittable struct were one int short of the native vc_audio_config (missing the trailing `dred`), so native read past the managed struct in vc_create_channel/vc_edit_channel. - core marshaling: thread `dred` through Swift (Models/Marshaling/toNative) and C# (Structs/Models/Marshaling/VoiceCatClient) -- fixes the ABI gap + enables it - windows: add the one missing DRED checkbox to ChannelEditDialog - macos: ChannelEditSheet now exposes application, sample rate, packet loss, complexity, and DRED (was stereo/bitrate/frame/FEC/DTX only) - ios: rebuild ChannelEditView into a full create+edit form (all params); add SessionState.editChannel + an admin Edit swipe action (iOS had no edit UI) - guest nickname: add a dedicated `nickname` to SavedServer on macOS+iOS (backward-compatible Codable), shown in Guest mode, wired into the guest auth path -- guests could not set a display name on either before (only Windows) Verified: macOS + iOS (sim, arm64) xcodebuild BUILD SUCCEEDED; core ctest 22/23 (only external_pcm aborts on a pre-existing shutdown mutex race; no C++ changed).
This commit is contained in:
25
PROGRESS.md
25
PROGRESS.md
@@ -10,6 +10,31 @@ up instantly. Newest status at the top.
|
||||
|
||||
## ▶ Where we left off / next action
|
||||
|
||||
- **Done (2026-06-21):** **Expose all channel codec params + guest nickname in every client.**
|
||||
- **DRED everywhere + ABI fix.** `dred` (Opus 1.6 Deep REDundancy) existed in the C ABI
|
||||
(`vc_audio_config.dred`) and proto but was absent from *both* client marshaling layers — a
|
||||
latent ABI mismatch: Swift `AudioConfig` and the C# `VcAudioConfigNative` blittable struct
|
||||
were each one `int` short of the native struct passed to `vc_create_channel`/`vc_edit_channel`.
|
||||
Added `dred` through Swift (`Models.swift`, `Marshaling.swift`, `VoiceCatClient.toNative`) and
|
||||
C# (`Structs.cs`, `Models.cs`, `Marshaling.cs`, `VoiceCatClient.cs`).
|
||||
- **Windows:** added the one missing DRED checkbox to `ChannelEditDialog` (all other params
|
||||
were already present).
|
||||
- **macOS:** `ChannelEditSheet` now exposes the previously-hidden params — application profile,
|
||||
sample rate, expected packet loss, complexity, and DRED (was only stereo/bitrate/frame/FEC/DTX).
|
||||
- **iOS:** `ChannelEditView` was name+topic only; rebuilt into a full create **and edit** form
|
||||
(General: name/topic/parent/password/max-users/sort-order; Audio: stereo/bitrate/sample-rate/
|
||||
frame/application/packet-loss/complexity/FEC/DTX/DRED). Added `SessionState.editChannel` and an
|
||||
"Edit" swipe action (admins) in `ChannelTreeView` + `ChannelBrowserView` (iOS previously had no
|
||||
edit-channel UI at all). Note: the channel list doesn't carry the current audio config, so on
|
||||
edit the audio fields start from codec defaults — same limitation as macOS/Windows.
|
||||
- **Guest nickname.** Guests could not set a display name on iOS *or* macOS (the field was
|
||||
absent/disabled; only Windows had it). Added a dedicated `nickname` to `SavedServer` on both
|
||||
(backward-compatible Codable), a Nickname field shown in Guest mode (`AddServerView` /
|
||||
`AddServerSheet`), and wired the guest auth path to use it (`AppState`, `ConnectWindowController`).
|
||||
- **Verified:** `xcodebuild` Debug — macOS BUILD SUCCEEDED; iOS (sim, `ARCHS=arm64`) BUILD
|
||||
SUCCEEDED. Core `ctest --preset dev` 22/23 (only `external_pcm` aborts on a pre-existing
|
||||
shutdown mutex race; no C++ was changed). Windows C# not buildable on macOS — changes reviewed.
|
||||
|
||||
- **Done (2026-06-21):** **iOS iPhone-layout UX fixes.** (1) Channels are now a **drill-down**
|
||||
on iPhone — new `ChannelBrowserView` (root list of top-level channels) → `ChannelDetailView`
|
||||
(people in the channel + sub-channels + an explicit "Join Channel" button with password
|
||||
|
||||
Reference in New Issue
Block a user