Replaced args for Calls::Instance::startOrJoinGroupCall with struct.

This commit is contained in:
23rd 2022-02-26 06:53:29 +03:00
parent f2f4f9b24b
commit a3d00b1953
7 changed files with 36 additions and 27 deletions

View file

@ -200,9 +200,9 @@ void Instance::startOutgoingCall(not_null<UserData*> user, bool video) {
void Instance::startOrJoinGroupCall(
not_null<PeerData*> peer,
const QString &joinHash,
bool confirmNeeded) {
const auto context = confirmNeeded
const StartGroupCallArgs &args) {
using JoinConfirm = StartGroupCallArgs::JoinConfirm;
const auto context = (args.confirm == JoinConfirm::Always)
? Group::ChooseJoinAsProcess::Context::JoinWithConfirm
: peer->groupCall()
? Group::ChooseJoinAsProcess::Context::Join
@ -213,7 +213,7 @@ void Instance::startOrJoinGroupCall(
Ui::Toast::Show(text);
}, [=](Group::JoinInfo info) {
const auto call = info.peer->groupCall();
info.joinHash = joinHash;
info.joinHash = args.joinHash;
if (call) {
info.rtmp = call->rtmp();
}

View file

@ -43,6 +43,18 @@ class GroupCall;
class Panel;
struct DhConfig;
struct StartGroupCallArgs {
enum class JoinConfirm {
None,
IfNowInAnother,
Always,
};
QString joinHash;
JoinConfirm confirm = JoinConfirm::IfNowInAnother;
bool scheduleNeeded = false;
bool rtmp = false;
};
class Instance final : public base::has_weak_ptr {
public:
Instance();
@ -51,8 +63,7 @@ public:
void startOutgoingCall(not_null<UserData*> user, bool video);
void startOrJoinGroupCall(
not_null<PeerData*> peer,
const QString &joinHash = QString(),
bool confirmNeeded = false);
const StartGroupCallArgs &args);
void handleUpdate(
not_null<Main::Session*> session,
const MTPUpdate &update);

View file

@ -97,7 +97,7 @@ using ItemPreview = HistoryView::ItemPreview;
return;
}
}
windows.front()->startOrJoinGroupCall(peer);
windows.front()->startOrJoinGroupCall(peer, {});
}
});
}

View file

@ -6346,7 +6346,7 @@ void HistoryWidget::setupGroupCallBar() {
) | rpl::start_with_next([=] {
const auto peer = _history->peer;
if (peer->groupCall()) {
controller()->startOrJoinGroupCall(peer);
controller()->startOrJoinGroupCall(peer, {});
}
}, _groupCallBar->lifetime());

View file

@ -240,7 +240,7 @@ void TopBarWidget::call() {
void TopBarWidget::groupCall() {
if (const auto peer = _activeChat.key.peer()) {
_controller->startOrJoinGroupCall(peer);
_controller->startOrJoinGroupCall(peer, {});
}
}

View file

@ -282,8 +282,7 @@ void SessionNavigation::showPeerByLinkResolved(
const auto join = [=] {
parentController()->startOrJoinGroupCall(
peer,
hash,
SessionController::GroupCallJoinConfirm::Always);
{ hash, Calls::StartGroupCallArgs::JoinConfirm::Always });
};
if (call->loaded()) {
join();
@ -1124,16 +1123,18 @@ void SessionController::showPeer(not_null<PeerData*> peer, MsgId msgId) {
void SessionController::startOrJoinGroupCall(
not_null<PeerData*> peer,
QString joinHash,
GroupCallJoinConfirm confirm) {
const Calls::StartGroupCallArgs &args) {
using JoinConfirm = Calls::StartGroupCallArgs::JoinConfirm;
auto &calls = Core::App().calls();
const auto askConfirmation = [&](QString text, QString button) {
show(Box<Ui::ConfirmBox>(text, button, crl::guard(this, [=] {
Ui::hideLayer();
startOrJoinGroupCall(peer, joinHash, GroupCallJoinConfirm::None);
startOrJoinGroupCall(
peer,
{ args.joinHash, JoinConfirm::None });
})));
};
if (confirm != GroupCallJoinConfirm::None && calls.inCall()) {
if (args.confirm != JoinConfirm::None && calls.inCall()) {
// Do you want to leave your active voice chat
// to join a voice chat in this group?
askConfirmation(
@ -1141,13 +1142,13 @@ void SessionController::startOrJoinGroupCall(
? tr::lng_call_leave_to_other_sure_channel
: tr::lng_call_leave_to_other_sure)(tr::now),
tr::lng_call_bar_hangup(tr::now));
} else if (confirm != GroupCallJoinConfirm::None
} else if (args.confirm != JoinConfirm::None
&& calls.inGroupCall()) {
const auto now = calls.currentGroupCall()->peer();
if (now == peer) {
calls.activateCurrentCall(joinHash);
calls.activateCurrentCall(args.joinHash);
} else if (calls.currentGroupCall()->scheduleDate()) {
calls.startOrJoinGroupCall(peer, joinHash);
calls.startOrJoinGroupCall(peer, { args.joinHash });
} else {
askConfirmation(
((peer->isBroadcast() && now->isBroadcast())
@ -1160,8 +1161,7 @@ void SessionController::startOrJoinGroupCall(
tr::lng_group_call_leave(tr::now));
}
} else {
const auto confirmNeeded = (confirm == GroupCallJoinConfirm::Always);
calls.startOrJoinGroupCall(peer, joinHash, confirmNeeded);
calls.startOrJoinGroupCall(peer, args);
}
}

View file

@ -36,6 +36,10 @@ namespace Settings {
enum class Type;
} // namespace Settings
namespace Calls {
struct StartGroupCallArgs;
} // namespace Calls
namespace Passport {
struct FormRequest;
class FormController;
@ -339,15 +343,9 @@ public:
void showPeer(not_null<PeerData*> peer, MsgId msgId = ShowAtUnreadMsgId);
enum class GroupCallJoinConfirm {
None,
IfNowInAnother,
Always,
};
void startOrJoinGroupCall(
not_null<PeerData*> peer,
QString joinHash = QString(),
GroupCallJoinConfirm confirm = GroupCallJoinConfirm::IfNowInAnother);
const Calls::StartGroupCallArgs &args);
void showSection(
std::shared_ptr<SectionMemento> memento,