Merge pull request #360 from vector-im/dbkr/consistent_sort
Sort call feeds consistently when choosing active speaker
This commit is contained in:
commit
1860eaae7a
1 changed files with 15 additions and 0 deletions
|
@ -30,6 +30,21 @@ function getActiveSpeakerFeed(
|
||||||
): CallFeed | null {
|
): CallFeed | null {
|
||||||
const activeSpeakerFeeds = feeds.filter((f) => !f.isAudioMuted());
|
const activeSpeakerFeeds = feeds.filter((f) => !f.isAudioMuted());
|
||||||
|
|
||||||
|
// make sure the feeds are in a deterministic order so every client picks
|
||||||
|
// the same one as the active speaker. The custom sort function sorts
|
||||||
|
// by user ID, so needs a collator of some kind to compare. We make a
|
||||||
|
// specific one to help ensure every client sorts the same way
|
||||||
|
// although of course user IDs shouldn't contain accented characters etc.
|
||||||
|
// anyway).
|
||||||
|
const collator = new Intl.Collator("en", {
|
||||||
|
sensitivity: "variant",
|
||||||
|
usage: "sort",
|
||||||
|
ignorePunctuation: false,
|
||||||
|
});
|
||||||
|
activeSpeakerFeeds.sort((a: CallFeed, b: CallFeed): number =>
|
||||||
|
collator.compare(a.userId, b.userId)
|
||||||
|
);
|
||||||
|
|
||||||
let activeSpeakerFeed = null;
|
let activeSpeakerFeed = null;
|
||||||
let highestPowerLevel = null;
|
let highestPowerLevel = null;
|
||||||
for (const feed of activeSpeakerFeeds) {
|
for (const feed of activeSpeakerFeeds) {
|
||||||
|
|
Loading…
Reference in a new issue