Replaced args for Calls::Instance::startOrJoinGroupCall with struct.
This commit is contained in:
		
							parent
							
								
									f2f4f9b24b
								
							
						
					
					
						commit
						a3d00b1953
					
				
					 7 changed files with 36 additions and 27 deletions
				
			
		| 
						 | 
				
			
			@ -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();
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ using ItemPreview = HistoryView::ItemPreview;
 | 
			
		|||
					return;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			windows.front()->startOrJoinGroupCall(peer);
 | 
			
		||||
			windows.front()->startOrJoinGroupCall(peer, {});
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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());
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -240,7 +240,7 @@ void TopBarWidget::call() {
 | 
			
		|||
 | 
			
		||||
void TopBarWidget::groupCall() {
 | 
			
		||||
	if (const auto peer = _activeChat.key.peer()) {
 | 
			
		||||
		_controller->startOrJoinGroupCall(peer);
 | 
			
		||||
		_controller->startOrJoinGroupCall(peer, {});
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue