Coffee Required Git
coffeerequired
Voicee / TODO.md
TODO.md

Voicee — TODO

Priorita 5 — Videohovor v samostatném okně (pop-out)

Stav: dočasně vypnuto (CALL_POPOUT_ENABLED = false v apps/desktop/src/lib/call-popout-config.ts)

Problém

Tlačítko „Otevřít v samostatném okně“ v UI videohovoru má otevřít druhé nativní Tauri okno s běžícím hovorem. Ve Windows dev prostředí (dev:all --all-native --windows) handoff mezi hlavním a pop-out oknem nefunguje spolehlivě:

  • pop-out okno problikne a hned se zavře,
  • hlavní okno přepne do režimu external (UI hovoru zmizí),
  • hovor dál běží na pozadí bez viditelného UI,
  • fullscreen přes celou obrazovku má podobné problémy s nativním oknem vs. CSS overlay.

Co už bylo zkoušeno

  • Handoff přes localStorage (webview okna mají oddělené úložiště),
  • Handoff přes Tauri eventy (call-popout-init / call-popout-handoff),
  • Handoff a koordinace přes Rust stav (call_popout_* příkazy v src-tauri/src/call_popout.rs),
  • Oprava React StrictMode / bootstrap race,
  • Odložené přepnutí na external až po waitForPopoutReady,
  • Obnova hovoru v hlavním okně po zavření pop-outu (call-popout-lifecycle.ts).

Co bude potřeba dořešit

  1. Spolehlivý handoff media + WebRTC mezi okny (ideálně jeden zdroj pravdy v Rustu nebo sdílený worker).
  2. Ověření na Windows produkčním buildu, ne jen dev + Vite HMR.
  3. Nativní fullscreen (setFullscreen) vs. režimy docked / window / external.
  4. Testy: start hovoru → pop-out → zavření pop-outu → návrat do hlavního okna bez výpadku audia/videa.
  5. Po fixu nastavit CALL_POPOUT_ENABLED = true a odstranit dočasné obcházení.

Související soubory

  • apps/desktop/src/lib/call-popout-config.ts — feature flag
  • apps/desktop/src/lib/call-popout-lifecycle.ts — orchestrace otevření / návratu
  • apps/desktop/src/lib/call-popout-bootstrap.ts — bootstrap pop-out okna
  • apps/desktop/src/lib/call-popout-coordination.ts — Rust invoke wrapper
  • apps/desktop/src-tauri/src/call_popout.rs — nativní okno + handoff stav
  • apps/desktop/src/features/call/call-popout-page.tsx — route /call-popout