From a3d00b1953fce0e678270d558fb10716364dfd24 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 26 Feb 2022 06:53:29 +0300 Subject: [PATCH] Replaced args for Calls::Instance::startOrJoinGroupCall with struct. --- Telegram/SourceFiles/calls/calls_instance.cpp | 8 +++---- Telegram/SourceFiles/calls/calls_instance.h | 15 +++++++++++-- .../SourceFiles/history/history_service.cpp | 2 +- .../SourceFiles/history/history_widget.cpp | 2 +- .../view/history_view_top_bar_widget.cpp | 2 +- .../window/window_session_controller.cpp | 22 +++++++++---------- .../window/window_session_controller.h | 12 +++++----- 7 files changed, 36 insertions(+), 27 deletions(-) diff --git a/Telegram/SourceFiles/calls/calls_instance.cpp b/Telegram/SourceFiles/calls/calls_instance.cpp index 73ad8edc9..c3d379476 100644 --- a/Telegram/SourceFiles/calls/calls_instance.cpp +++ b/Telegram/SourceFiles/calls/calls_instance.cpp @@ -200,9 +200,9 @@ void Instance::startOutgoingCall(not_null user, bool video) { void Instance::startOrJoinGroupCall( not_null 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(); } diff --git a/Telegram/SourceFiles/calls/calls_instance.h b/Telegram/SourceFiles/calls/calls_instance.h index c403ef4eb..bbfaf5bc3 100644 --- a/Telegram/SourceFiles/calls/calls_instance.h +++ b/Telegram/SourceFiles/calls/calls_instance.h @@ -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 user, bool video); void startOrJoinGroupCall( not_null peer, - const QString &joinHash = QString(), - bool confirmNeeded = false); + const StartGroupCallArgs &args); void handleUpdate( not_null session, const MTPUpdate &update); diff --git a/Telegram/SourceFiles/history/history_service.cpp b/Telegram/SourceFiles/history/history_service.cpp index e01370657..5f229ae4c 100644 --- a/Telegram/SourceFiles/history/history_service.cpp +++ b/Telegram/SourceFiles/history/history_service.cpp @@ -97,7 +97,7 @@ using ItemPreview = HistoryView::ItemPreview; return; } } - windows.front()->startOrJoinGroupCall(peer); + windows.front()->startOrJoinGroupCall(peer, {}); } }); } diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 9cd83916e..dbf13c51c 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -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()); diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp index 542f5b033..477b29e13 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp @@ -240,7 +240,7 @@ void TopBarWidget::call() { void TopBarWidget::groupCall() { if (const auto peer = _activeChat.key.peer()) { - _controller->startOrJoinGroupCall(peer); + _controller->startOrJoinGroupCall(peer, {}); } } diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index 9876178d4..f8502c9ed 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -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 peer, MsgId msgId) { void SessionController::startOrJoinGroupCall( not_null 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(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); } } diff --git a/Telegram/SourceFiles/window/window_session_controller.h b/Telegram/SourceFiles/window/window_session_controller.h index 05d144261..f368e28d5 100644 --- a/Telegram/SourceFiles/window/window_session_controller.h +++ b/Telegram/SourceFiles/window/window_session_controller.h @@ -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 peer, MsgId msgId = ShowAtUnreadMsgId); - enum class GroupCallJoinConfirm { - None, - IfNowInAnother, - Always, - }; void startOrJoinGroupCall( not_null peer, - QString joinHash = QString(), - GroupCallJoinConfirm confirm = GroupCallJoinConfirm::IfNowInAnother); + const Calls::StartGroupCallArgs &args); void showSection( std::shared_ptr memento,