fix: Force grid layout in recording mode#18208
Conversation
|
@Antreesy Updated: reverted the isGrid hardcode in CallView.vue and instead set grid mode via callViewStore.setCallViewMode() from RecordingApp. |
Better, but it is still executed for every RecordingApp. What can be done to improve it:
There you go, a configurable layout (without UI option, but we have some of those already). That's a rough description, I omitted some details, but we can polish it after changes, of course |
|
I will assumed that grid is the default desired value, (since it thes the standard in calls and recordings), but I (my AI) left it speaker as default. Can you check it is ok? |
|
Works in manual tests, let's fix CI and then double-check with backend maintainer:
|
1d68a71 to
da87714
Compare
da87714 to
887d755
Compare
| * grid-limit: int, | ||
| * // Whether the grid limit is enforced by the server | ||
| * grid-limit-enforced: bool, | ||
| * // Recording layout ('grid' or 'speaker') |
There was a problem hiding this comment.
This line should appear in openapi files. I'm afraid your agent might rewrite it?
| "operationId": "federation-accept-share", | ||
| "summary": "Accept a federation invites", | ||
| "description": "🚧 Draft: Still work in progress", | ||
| "description": "\ud83d\udea7 Draft: Still work in progress", |
There was a problem hiding this comment.
Same here, but maybe something on unicode side is unsupported on your machine 🤷🏽
…yout Add configurable recording layout setting (occ config:app:set spreed recording_layout --value=grid) to control the call layout used during recording. Defaults to 'speaker' (existing behavior). - Config.php: add getRecordingLayout() method with validation - Capabilities.php: expose 'recording-layout' in call config - ResponseDefinitions.php: document recording-layout type - CapabilitiesTest.php: add recording-layout to test expectations - docs/capabilities.md: document the new capability under section 24 Co-authored-by: opencode <opencode@opencode.ai> Signed-off-by: Benjamin Fernandez <fernandobenjamin.fernandezguzman@agcocorp.com>
Co-authored-by: opencode <opencode@opencode.ai> Signed-off-by: Benjamin Fernandez <fernandobenjamin.fernandezguzman@agcocorp.com>
RecordingApp.vue reads 'recording-layout' from server capabilities and sets the call view mode accordingly (grid or speaker). VideosGrid.vue uses full slot count in recording mode since local video is hidden. Co-authored-by: opencode <opencode@opencode.ai> Signed-off-by: Benjamin Fernandez <fernandobenjamin.fernandezguzman@agcocorp.com>
Add missing Config mock return value for recording-layout in CapabilitiesTest and mark recording-layout as local in mocked capabilities. Co-authored-by: opencode <opencode@opencode.ai> Signed-off-by: Benjamin Fernandez <fernandobenjamin.fernandezguzman@agcocorp.com>
887d755 to
aff5dfd
Compare
|
@Antreesy @nickvergessen All requested changes are now addressed and CI is fully green, including OpenAPI and PHPUnit. Could you please take a final look when you have a moment? |
Problem
When recording a Talk call, the recording browser session uses promoted/speaker view by default. This means only the active speaker is shown prominently, with other participants in a thin stripe at the bottom. For recorded videos that will be published (e.g., podcasts, social media), a grid layout showing all participants equally is far more useful.
Issue #10060 requested a configurable grid mode for the recording backend, but was closed as "not planned" and redirected to #8768 (Recording UI customization), which remains in the backlog with no timeline.
Current workaround
The maintainer suggested modifying
Participant.pyon the recording server to runstore.commit("isGrid", true). However, this hack has known problems:slots()andshrinkGrid()) subtracts one slot for the local video, which is hidden in recording mode, causing poor layout with empty areasgrid-wrapperheight does not fill the recording viewport properlyProposed fix
Instead of modifying the recording server, fix the recording frontend (
RecordingApp.vue→CallView.vue→VideosGrid.vue) to properly support grid mode during recording:CallView.vue: WhenisRecordingis true, forceisGridto true so the recording always uses grid layout instead of promoted view.VideosGrid.vue:slots(): When recording, count all slots (do not subtract 1 for local video, since local video is hidden in recording mode).shrinkGrid(): Use the same full slot count in recording mode so grid sizing does not leave empty space.These changes only affect the recording view and do not change behavior for regular call participants.
Testing
Tested on a production Nextcloud Talk setup with a dedicated recording VPS. The recording layout correctly:
Related issues