{"record":{"id":"792f47f87ceefc28","repo":"tonhowtf/omniget","slug":"err-voice-disconnected","errorCode":"ERR_VOICE_DISCONNECTED","errorMessage":"ERR_VOICE_DISCONNECTED","messagePattern":"ERR_VOICE_DISCONNECTED","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omnidisc-media/src/livekit_backend.rs","lineNumber":762,"sourceCode":"            }\n            RoomEvent::ConnectionQualityChanged {\n                quality,\n                participant,\n            } => {\n                shared.emit(EngineNotification::Quality {\n                    user_id: participant.identity().0,\n                    quality: quality_of(quality),\n                });\n            }\n            RoomEvent::Reconnecting => {\n                shared.transport(VoiceEvent::Disconnected { recoverable: true })\n            }\n            RoomEvent::Reconnected => shared.transport(VoiceEvent::Reconnected),\n            RoomEvent::Disconnected { reason } => {\n                if reason != DisconnectReason::ClientInitiated {\n                    tracing::warn!(\"[omnidisc-media] room disconnected: {:?}\", reason);\n                    shared.emit(EngineNotification::Error {\n                        code: \"ERR_VOICE_DISCONNECTED\".into(),\n                        message: format!(\"{reason:?}\"),\n                    });\n                    shared.transport(VoiceEvent::Disconnected { recoverable: false });\n                }\n                break;\n            }\n            _ => {}\n        }\n    }\n    for (_, h) in feeders.drain() {\n        h.abort();\n    }\n}\n\nasync fn teardown(shared: &Arc<Shared>) {\n    let session = shared.session.lock().await.take();\n    shared.feeder.send(FeederMsg::Source(None));\n    if let Ok(mut id) = shared.local_identity.lock() {","sourceCodeStart":744,"sourceCodeEnd":780,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omnidisc-media/src/livekit_backend.rs#L744-L780","documentation":"Voice-engine notification emitted through EngineNotification::Error when the LiveKit room disconnects (RoomEvent::Disconnected) — the transport layer maps it to ERR_VOICE_DISCONNECTED, distinguishing recoverable reconnects (Reconnecting sets recoverable=true) from terminal drops.","triggerScenarios":"Thrown at src-tauri/omnidisc-media/src/livekit_backend.rs:762 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check network connectivity and let the client attempt automatic reconnection","Verify the LiveKit token is still valid and re-authenticate if expired","Rejoin the voice channel manually if reconnection window is exceeded"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}