diff --git a/Telegram/SourceFiles/calls/calls_choose_join_as.cpp b/Telegram/SourceFiles/calls/calls_choose_join_as.cpp index 5a6db9d59..cc6227a03 100644 --- a/Telegram/SourceFiles/calls/calls_choose_join_as.cpp +++ b/Telegram/SourceFiles/calls/calls_choose_join_as.cpp @@ -172,7 +172,7 @@ void ChooseJoinAsProcess::start( Fn)> showBox, Fn showToast, Fn done, - PeerData *currentJoinAs) { + PeerData *changingJoinAsFrom) { Expects(done != nullptr); const auto session = &peer->session(); @@ -243,14 +243,14 @@ void ChooseJoinAsProcess::start( finish(info); return; } + const auto selectedId = peer->groupCallDefaultJoinAs(); info.joinAs = [&]() -> not_null { - const auto selectedId = peer->groupCallDefaultJoinAs(); - if (!selectedId) { - return self; - } - const auto loaded = session->data().peerLoaded(selectedId); - return (currentJoinAs && ranges::contains(list, not_null{ currentJoinAs })) - ? not_null(currentJoinAs) + const auto loaded = selectedId + ? session->data().peerLoaded(selectedId) + : nullptr; + return (changingJoinAsFrom + && ranges::contains(list, not_null{ changingJoinAsFrom })) + ? not_null(changingJoinAsFrom) : (loaded && ranges::contains(list, not_null{ loaded })) ? not_null(loaded) : ranges::contains(list, self) @@ -259,6 +259,13 @@ void ChooseJoinAsProcess::start( }(); info.possibleJoinAs = std::move(list); + if (!changingJoinAsFrom + && selectedId + && info.joinAs->id == selectedId) { + // We already joined this voice chat, just rejoin with the same. + finish(info); + return; + } auto box = Box( ChooseJoinAsBox, context, diff --git a/Telegram/SourceFiles/calls/calls_choose_join_as.h b/Telegram/SourceFiles/calls/calls_choose_join_as.h index 487ef2bc1..fe8010da6 100644 --- a/Telegram/SourceFiles/calls/calls_choose_join_as.h +++ b/Telegram/SourceFiles/calls/calls_choose_join_as.h @@ -37,7 +37,7 @@ public: Fn)> showBox, Fn showToast, Fn done, - PeerData *currentJoinAs = nullptr); + PeerData *changingJoinAsFrom = nullptr); private: struct ChannelsListRequest { diff --git a/Telegram/SourceFiles/calls/calls_group_call.cpp b/Telegram/SourceFiles/calls/calls_group_call.cpp index 8d39ec9a5..92274c78e 100644 --- a/Telegram/SourceFiles/calls/calls_group_call.cpp +++ b/Telegram/SourceFiles/calls/calls_group_call.cpp @@ -426,6 +426,11 @@ void GroupCall::rejoin(not_null as) { LOG(("Call Info: Requesting join payload.")); _joinAs = as; + if (const auto chat = _peer->asChat()) { + chat->setGroupCallDefaultJoinAs(_joinAs->id); + } else if (const auto channel = _peer->asChannel()) { + channel->setGroupCallDefaultJoinAs(_joinAs->id); + } const auto weak = base::make_weak(this); _instance->emitJoinPayload([=](tgcalls::GroupJoinPayload payload) {