Summary
The Flutter client has no DM voice/video call feature — no way to start a call from a DM, and no incoming-call (ring / accept / decline) UI. The underlying voice stack is channel-agnostic and could carry a DM call, but nothing is wired and the backend currently rejects it (see server issue, linked).
Current state
- Voice stack is channel-agnostic.
lib/features/voice/controllers/voice.dart join(channelId, spaceId) → client.voice.join(channelId) → LiveKit VoiceSession. spaceId is allowed to be null.
- No DM call UI. The DM conversation view (
lib/features/user/views/accord_direct_messages_conversations.dart) header has back / group-info / group-options (view members, add/rename/leave) + a message composer — but no call button.
- No incoming-call flow. No ring / accept / decline / missed-call UI; no call-request stream. Grep for
incoming / outgoing / ringing / accept / decline in the voice layer returns nothing.
- No call state model. No
AccordCall / call metadata; AccordVoiceServerUpdate carries only LiveKit creds + the user's voiceState.
Blocked on
Server support — DaccordProject/accordserver rejects voice/join on DM channels (channel_not_voice / channel_has_no_space) and has no call signaling. That work must land first. Linked: server issue.
What needs to happen (client)
Context
Voice transport is LiveKit (packages/livekit_client) via accordkit client.voice. The reference Godot client (../daccord) should be checked for whether it already implements DM calls as a UX reference.
Summary
The Flutter client has no DM voice/video call feature — no way to start a call from a DM, and no incoming-call (ring / accept / decline) UI. The underlying voice stack is channel-agnostic and could carry a DM call, but nothing is wired and the backend currently rejects it (see server issue, linked).
Current state
lib/features/voice/controllers/voice.dartjoin(channelId, spaceId)→client.voice.join(channelId)→ LiveKitVoiceSession.spaceIdis allowed to be null.lib/features/user/views/accord_direct_messages_conversations.dart) header has back / group-info / group-options (view members, add/rename/leave) + a message composer — but no call button.incoming/outgoing/ringing/accept/declinein the voice layer returns nothing.AccordCall/ call metadata;AccordVoiceServerUpdatecarries only LiveKit creds + the user'svoiceState.Blocked on
Server support — DaccordProject/accordserver rejects
voice/joinon DM channels (channel_not_voice/channel_has_no_space) and has no call signaling. That work must land first. Linked: server issue.What needs to happen (client)
VoiceChannelView/voice_view.dartfor a DM-call context (no space chrome).client.voice.join(dmChannelId)already exists for the media side).Context
Voice transport is LiveKit (
packages/livekit_client) via accordkitclient.voice. The reference Godot client (../daccord) should be checked for whether it already implements DM calls as a UX reference.