Support joining group call as a stream listener.
This commit is contained in:
parent
a833d5e292
commit
9ac71272a3
@ -2138,8 +2138,15 @@ groupCallPayload ufrag:string pwd:string fingerprints:vector<groupCallPayloadFin
|
||||
//@ip Value of the field ip @type Value of the field type @tcp_type Value of the field tcp_type @rel_addr Value of the field rel_addr @rel_port Value of the field rel_port
|
||||
groupCallJoinResponseCandidate port:string protocol:string network:string generation:string id:string component:string foundation:string priority:string ip:string type:string tcp_type:string rel_addr:string rel_port:string = GroupCallJoinResponseCandidate;
|
||||
|
||||
//@description Describes a join response for interaction with tgcalls @payload Join response payload to pass to tgcalls @candidates Join response candidates to pass to tgcalls
|
||||
groupCallJoinResponse payload:groupCallPayload candidates:vector<groupCallJoinResponseCandidate> = GroupCallJoinResponse;
|
||||
|
||||
//@class GroupCallJoinResponse @description Describes a group call join response
|
||||
|
||||
//@description Contains data needed to join the group call with WebRTC @payload Group call payload to pass to tgcalls @candidates Join response candidates to pass to tgcalls
|
||||
groupCallJoinResponseWebrtc payload:groupCallPayload candidates:vector<groupCallJoinResponseCandidate> = GroupCallJoinResponse;
|
||||
|
||||
//@description Describes that group call needs to be joined as a stream
|
||||
groupCallJoinResponseStream = GroupCallJoinResponse;
|
||||
|
||||
|
||||
//@description Represents a group call participant
|
||||
//@participant Identifier of the group call participant
|
||||
|
@ -680,7 +680,7 @@ struct GroupCallManager::PendingJoinRequest {
|
||||
NetQueryRef query_ref;
|
||||
uint64 generation = 0;
|
||||
int32 audio_source = 0;
|
||||
Promise<td_api::object_ptr<td_api::groupCallJoinResponse>> promise;
|
||||
Promise<td_api::object_ptr<td_api::GroupCallJoinResponse>> promise;
|
||||
};
|
||||
|
||||
GroupCallManager::GroupCallManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
|
||||
@ -1801,7 +1801,7 @@ void GroupCallManager::get_group_call_stream_segment(GroupCallId group_call_id,
|
||||
void GroupCallManager::join_group_call(GroupCallId group_call_id, DialogId as_dialog_id,
|
||||
td_api::object_ptr<td_api::groupCallPayload> &&payload, int32 audio_source,
|
||||
bool is_muted, const string &invite_hash,
|
||||
Promise<td_api::object_ptr<td_api::groupCallJoinResponse>> &&promise) {
|
||||
Promise<td_api::object_ptr<td_api::GroupCallJoinResponse>> &&promise) {
|
||||
TRY_RESULT_PROMISE(promise, input_group_call_id, get_input_group_call_id(group_call_id));
|
||||
|
||||
auto *group_call = get_group_call(input_group_call_id);
|
||||
@ -2017,7 +2017,7 @@ void GroupCallManager::process_join_group_call_response(InputGroupCallId input_g
|
||||
}));
|
||||
}
|
||||
|
||||
Result<td_api::object_ptr<td_api::groupCallJoinResponse>> GroupCallManager::get_group_call_join_response_object(
|
||||
Result<td_api::object_ptr<td_api::GroupCallJoinResponse>> GroupCallManager::get_group_call_join_response_object(
|
||||
string json_response) {
|
||||
auto r_value = json_decode(json_response);
|
||||
if (r_value.is_error()) {
|
||||
@ -2030,6 +2030,11 @@ Result<td_api::object_ptr<td_api::groupCallJoinResponse>> GroupCallManager::get_
|
||||
}
|
||||
|
||||
auto &value_object = value.get_object();
|
||||
auto r_stream = get_json_object_bool_field(value_object, "stream");
|
||||
if (r_stream.is_ok() && r_stream.ok() == true) {
|
||||
return td_api::make_object<td_api::groupCallJoinResponseStream>();
|
||||
}
|
||||
|
||||
TRY_RESULT(transport, get_json_object_field(value_object, "transport", JsonValue::Type::Object, false));
|
||||
CHECK(transport.type() == JsonValue::Type::Object);
|
||||
auto &transport_object = transport.get_object();
|
||||
@ -2078,7 +2083,7 @@ Result<td_api::object_ptr<td_api::groupCallJoinResponse>> GroupCallManager::get_
|
||||
}
|
||||
|
||||
auto payload = td_api::make_object<td_api::groupCallPayload>(ufrag, pwd, std::move(fingerprints_object));
|
||||
return td_api::make_object<td_api::groupCallJoinResponse>(std::move(payload), std::move(candidates_object));
|
||||
return td_api::make_object<td_api::groupCallJoinResponseWebrtc>(std::move(payload), std::move(candidates_object));
|
||||
}
|
||||
|
||||
bool GroupCallManager::on_join_group_call_response(InputGroupCallId input_group_call_id, string json_response) {
|
||||
|
@ -61,7 +61,7 @@ class GroupCallManager : public Actor {
|
||||
|
||||
void join_group_call(GroupCallId group_call_id, DialogId as_dialog_id,
|
||||
td_api::object_ptr<td_api::groupCallPayload> &&payload, int32 audio_source, bool is_muted,
|
||||
const string &invite_hash, Promise<td_api::object_ptr<td_api::groupCallJoinResponse>> &&promise);
|
||||
const string &invite_hash, Promise<td_api::object_ptr<td_api::GroupCallJoinResponse>> &&promise);
|
||||
|
||||
void set_group_call_title(GroupCallId group_call_id, string title, Promise<Unit> &&promise);
|
||||
|
||||
@ -252,7 +252,7 @@ class GroupCallManager : public Actor {
|
||||
DialogId set_group_call_participant_is_speaking_by_source(InputGroupCallId input_group_call_id, int32 audio_source,
|
||||
bool is_speaking, int32 date);
|
||||
|
||||
static Result<td_api::object_ptr<td_api::groupCallJoinResponse>> get_group_call_join_response_object(
|
||||
static Result<td_api::object_ptr<td_api::GroupCallJoinResponse>> get_group_call_join_response_object(
|
||||
string json_response);
|
||||
|
||||
void try_clear_group_call_participants(InputGroupCallId input_group_call_id);
|
||||
|
Loading…
Reference in New Issue
Block a user