feat(call): keep call running while browsing other conversations (minimized call bar)#18444
feat(call): keep call running while browsing other conversations (minimized call bar)#18444Rikdekker wants to merge 1 commit into
Conversation
|
Thanks for the contribution! As it's a significant architectural change even in the current state (that is prone to errors as there is already a lot of things built on top of assumption HPB connection is present), we need more time to first discuss whether we'd want to continue with this approach before starting to review code changes. For the note: for this PR to work #16733 might be needed as a pre-requisite, to allow basic functionality without signaling (websocket) connection |
171c5af to
b2f31d9
Compare
|
Thanks for the quick feedback, and fully agree this needs an approach discussion before a line-by-line review. I dug into the On the HPB dependency The good news is that the two things the call relies on already survive without joining a signaling room for the browsed conversation:
So The actual problem (and fix) My first version enabled the browsed conversation's chat by calling I've replaced that with a dedicated, explicit concept instead of overloading "joined":
This keeps all existing HPB/signaling assumptions intact (nothing newly believes a non-joined room is joined), and it composes cleanly with I've pushed this refactor so the diff reflects the approach, but I'm very happy to adjust direction based on what you'd prefer — including waiting on |
499ece2 to
83ffd96
Compare
…imized call bar) Navigating to another conversation while in a call used to end the call, forcing users to leave the call to read other chats. Now the call keeps running and is shown as a minimized in-call bar (conversation name, timer, mute, return-to-call, leave), while the other conversation opens as chat-only. Talk shares a single signaling connection that can only be in one room at a time, so the browsed conversation is opened without joining its signaling room: its chat works over REST + polling (no typing/presence push, indicated by a subtle hint). The call's conversation keeps the signaling room and the active session, so audio/video/screenshare keep flowing. Starting a call in another conversation while one is already running asks for confirmation first (leave the current call and join here), matching the behavior of Teams/Zoom/Meet. Works on web and the desktop client; the in-call bar adapts to a full-width top bar on mobile-web. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Rikdekker <Rikdekker@users.noreply.github.com>
83ffd96 to
984dbf0
Compare
☑️ Resolves
Navigating to another conversation while in a call used to end the call, forcing users to leave the call to read or reply in other chats. This PR keeps the call running and shows it as a persistent minimized in-call bar while another conversation opens as chat-only — matching how Teams, Google Meet and Zoom keep a "return to call" banner while you browse.
How it works
Talk shares a single signaling connection that can only be in one room at a time, and a single active session per user. So the browsed conversation is opened without joining its signaling room or creating a second active session:
fetchConversation+fetchParticipants, noPOST participants/active). Sending, history, reactions and read markers all work; only typing/presence push is unavailable while the call runs — indicated by a subtle hint.The core invariant: while a call is active, no code path may create a second active session (a central guard in the
joinConversationVuex action forces chat-only for any other conversation; a real join only resumes after the call is left). This prevents the call's session from being superseded and dropped.pr.talk.mp4
AI (if applicable)
🖌️ UI Checklist
🖼️ Screenshots / Screencasts
🚧 Tasks
DELETE /call/{token}, nosignaling.joinRoomfor the browsed room)joinConversation🏁 Checklist
Notes for reviewers
NcNoteCardhint and is the intended behavior given the single signaling connection.session-statecapability and REST chat polling are reused. Minimum Nextcloud version is unchanged (NC 35 / Talk 25).$color-call-backgroundcall-chrome token with white-on-dark text (consistent withCallTime/VideoBottomBar).🛠️ API Checklist
No API changes — this is a frontend-only feature.
🏁 Checklist
docs/has been updated or is not required