Room list: listen to call event to check number of participants#32677
Room list: listen to call event to check number of participants#32677florianduros merged 13 commits intodevelopfrom
Conversation
The room list needs to listen to `CallEvent.Participants` to be able to display the Call icon. This was working before #32663 due to an excessive re-renders or relying on the notification events.
b11e98a to
4455182
Compare
toger5
left a comment
There was a problem hiding this comment.
This looks sensible.
Thanks.
robintown
left a comment
There was a problem hiding this comment.
I would like the CallStore to keep its pretty limited responsibilities — it should track which calls are in which rooms, and not a whole lot else. Adding more events kind of obscures its purpose.
Therefore if a consumer is interested in a call's metadata, they should subscribe to events directly on the relevant Call object as needed. This keeps the reactivity fine-grained and explicit. Does that make sense to you?
I can relate to this take. We will end up with a very large amount of subscriptions however. Overall I am wondering if we can simplify the EW code a lot by moving to js-sdk primitives like the matrixRtcSessionManger directly. (and also expose RTCSession instead of the wrapped Call model) I do expect us to look into this eventually (probably when we consider changing the jitsi impl to also just be matrixRTC or when dropping legacy calls or making them matrixRTC complient as well) and then I would like to give this a very thorough evaluation how we want the call api to look like. TLDR: I am okay with how it is done to reduce friction but robins approach is also the one I would like a little bit more. (A "little" because I am seeing a risk of misusing the api and ending up with a lot of subscriptions accidently) |
|
I did wonder about this as it seemed a bit redundant for it to just pass the messages straight through, I concluded that maybe consistency is best if it's listening for some events from here, but I do still think it's a bit unnecessary. |
…listening to `CallStore`
7148dc7 to
e03b718
Compare
e03b718 to
91cfdac
Compare
5d06dea to
2fd3b81
Compare
|
|
||
| // Remove listener from previous call (if any) and add to new call to track participant changes | ||
| if (call !== this.currentCall) { | ||
| this.currentCall?.off(CallEvent.Participants, this.onCallParticipantsChanged); |
There was a problem hiding this comment.
Is this really what we do when using trackListener?
Will the tracker be automatically be cleaned up? Or will we end up checking if for all manually off emitters if they are still connected and only call off in the dispose step on the ones still connected?
There was a problem hiding this comment.
The tracker cleans up the listeners when the view model is disposed. It's not tied to the lifecycle of the Call object
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [vectorim/element-web](https://github.com/element-hq/element-web) | patch | `v1.12.11` → `v1.12.12` | --- ### Release Notes <details> <summary>element-hq/element-web (vectorim/element-web)</summary> ### [`v1.12.12`](https://github.com/element-hq/element-web/releases/tag/v1.12.12) [Compare Source](element-hq/element-web@v1.12.11...v1.12.12) #### ✨ Features - Add stable support for MSC4380 invite blocking ([#​31966](element-hq/element-web#31966)). Contributed by [@​richvdh](https://github.com/richvdh). - Hide the names of banned users behind a spoiler tag ([#​32424](element-hq/element-web#32424)). Contributed by [@​andybalaam](https://github.com/andybalaam). - Room list: remove bold effect on selected room ([#​32593](element-hq/element-web#32593)). Contributed by [@​florianduros](https://github.com/florianduros). - Use Compound buttons in auth screens ([#​32562](element-hq/element-web#32562)). Contributed by [@​t3chguy](https://github.com/t3chguy). - Track room list sorting algorithm changes ([#​32556](element-hq/element-web#32556)). Contributed by [@​MidhunSureshR](https://github.com/MidhunSureshR). - Update `sso_redirect_options` to work for Native OIDC ([#​32537](element-hq/element-web#32537)). Contributed by [@​t3chguy](https://github.com/t3chguy). #### 🐛 Bug Fixes - Room list: avoid excessive re-renders on room list store update or filter change ([#​32663](element-hq/element-web#32663)). Contributed by [@​florianduros](https://github.com/florianduros). - Room list: listen to call event to check number of participants ([#​32677](element-hq/element-web#32677)). Contributed by [@​florianduros](https://github.com/florianduros). - Fix invite-specific join errors not being shown ([#​32621](element-hq/element-web#32621)). Contributed by [@​Half-Shot](https://github.com/Half-Shot). - Prevent logging lots of "Browser unsupported" lines ([#​32647](element-hq/element-web#32647)). Contributed by [@​Half-Shot](https://github.com/Half-Shot). - Update critical gradient for room status bar ([#​32575](element-hq/element-web#32575)). Contributed by [@​Half-Shot](https://github.com/Half-Shot). - Room list: avoid header overflowing when too long ([#​32645](element-hq/element-web#32645)). Contributed by [@​florianduros](https://github.com/florianduros). - Room list: center focus outline of room list item ([#​32637](element-hq/element-web#32637)). Contributed by [@​florianduros](https://github.com/florianduros). - Fix misaligned cross in complete security dialog ([#​32614](element-hq/element-web#32614)). Contributed by [@​dbkr](https://github.com/dbkr). - Room list: fix keyboard navigation ([#​32585](element-hq/element-web#32585)). Contributed by [@​florianduros](https://github.com/florianduros). - Don't show empty privacy section ([#​32582](element-hq/element-web#32582)). Contributed by [@​dbkr](https://github.com/dbkr). - Disable room list image dragging ([#​32590](element-hq/element-web#32590)). Contributed by [@​florianduros](https://github.com/florianduros). - Update UserMenu theme toggle to use IconButton ([#​32591](element-hq/element-web#32591)). Contributed by [@​t3chguy](https://github.com/t3chguy). - Room list: make room list item scales with large font size ([#​32523](element-hq/element-web#32523)). Contributed by [@​florianduros](https://github.com/florianduros). </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OS4yIiwidXBkYXRlZEluVmVyIjoiNDMuNTkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYXV0b21lcmdlIiwiaW1hZ2UiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4596 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
This PR makes the room list item to listen to
CallEvent#Participantsevent to check the number of the participants and display the video icon if necessary.Why is it needed?
In #32663, the EC tests are failing: https://e2e-32663--matrix-react-sdk.netlify.app/#?q=s%3Afailed:
When testing manually, the video icon is displayed however only because it's relying on the notification events. Notifications triggers a re-render, check the number of participants in the call and displays the icon.
Clearing the excessive re-renders makes the e2e failed because they don't fire a notification. The call state event is fired (0 participants in the room) and ... nothing, no event that a new participant has joined the call.