mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-08-31 22:46:10 +00:00
Correctly handle 'min' group call participant updates.
This commit is contained in:
@@ -276,17 +276,25 @@ void GroupCall::applyParticipantsSlice(
|
||||
&& ((was ? was->speaking : false)
|
||||
|| (!amInCall
|
||||
&& (lastActive + speakingAfterActive > now)));
|
||||
const auto defaultVolume = Calls::Group::kDefaultVolume;
|
||||
const auto volume = (was && data.is_min())
|
||||
? was->volume
|
||||
: data.vvolume().value_or(Calls::Group::kDefaultVolume);
|
||||
const auto mutedByMe = (was && data.is_min())
|
||||
? was->mutedByMe
|
||||
: data.is_muted_by_you();
|
||||
const auto onlyMinLoaded = data.is_min()
|
||||
&& (!was || was->onlyMinLoaded);
|
||||
const auto value = Participant{
|
||||
.user = user,
|
||||
.date = data.vdate().v,
|
||||
.lastActive = lastActive,
|
||||
.ssrc = uint32(data.vsource().v),
|
||||
.volume = data.vvolume().value_or(defaultVolume),
|
||||
.volume = volume,
|
||||
.speaking = canSelfUnmute && (was ? was->speaking : false),
|
||||
.muted = data.is_muted(),
|
||||
.mutedByMe = data.is_muted_by_you(),
|
||||
.mutedByMe = mutedByMe,
|
||||
.canSelfUnmute = canSelfUnmute,
|
||||
.onlyMinLoaded = onlyMinLoaded,
|
||||
};
|
||||
if (i == end(_participants)) {
|
||||
_userBySsrc.emplace(value.ssrc, user);
|
||||
@@ -358,11 +366,13 @@ void GroupCall::applyActiveUpdate(
|
||||
not_null{ userLoaded },
|
||||
&Participant::user)
|
||||
: _participants.end();
|
||||
if (i == end(_participants)) {
|
||||
const auto notFound = (i == end(_participants));
|
||||
const auto loadByUserId = notFound || i->onlyMinLoaded;
|
||||
if (loadByUserId) {
|
||||
_unknownSpokenUids[userId] = when;
|
||||
requestUnknownParticipants();
|
||||
return;
|
||||
} else if (!i->canSelfUnmute) {
|
||||
}
|
||||
if (notFound || !i->canSelfUnmute) {
|
||||
return;
|
||||
}
|
||||
const auto was = std::make_optional(*i);
|
||||
|
Reference in New Issue
Block a user