Save voice chat channel_id.
This commit is contained in:
parent
49f7a56f11
commit
eb9abbb9ab
@ -5973,7 +5973,7 @@ void ContactsManager::on_create_channel_group_call(ChannelId channel_id, InputGr
|
||||
channel_full->is_changed = true;
|
||||
update_channel_full(channel_full, channel_id);
|
||||
}
|
||||
promise.set_value(td_->group_call_manager_->get_group_call_id(input_group_call_id));
|
||||
promise.set_value(td_->group_call_manager_->get_group_call_id(input_group_call_id, channel_id));
|
||||
}
|
||||
|
||||
void ContactsManager::get_channel_statistics_dc_id(DialogId dialog_id, bool for_full_statistics,
|
||||
@ -9218,7 +9218,7 @@ void ContactsManager::update_channel_full(ChannelFull *channel_full, ChannelId c
|
||||
send_closure(
|
||||
G()->td(), &Td::send_update,
|
||||
make_tl_object<td_api::updateSupergroupFullInfo>(get_supergroup_id_object(channel_id, "update_channel_full"),
|
||||
get_supergroup_full_info_object(channel_full)));
|
||||
get_supergroup_full_info_object(channel_full, channel_id)));
|
||||
channel_full->need_send_update = false;
|
||||
}
|
||||
if (channel_full->need_save_to_database) {
|
||||
@ -14384,11 +14384,11 @@ tl_object_ptr<td_api::supergroup> ContactsManager::get_supergroup_object(Channel
|
||||
}
|
||||
|
||||
tl_object_ptr<td_api::supergroupFullInfo> ContactsManager::get_supergroup_full_info_object(ChannelId channel_id) const {
|
||||
return get_supergroup_full_info_object(get_channel_full(channel_id));
|
||||
return get_supergroup_full_info_object(get_channel_full(channel_id), channel_id);
|
||||
}
|
||||
|
||||
tl_object_ptr<td_api::supergroupFullInfo> ContactsManager::get_supergroup_full_info_object(
|
||||
const ChannelFull *channel_full) const {
|
||||
const ChannelFull *channel_full, ChannelId channel_id) const {
|
||||
CHECK(channel_full != nullptr);
|
||||
double slow_mode_delay_expires_in = 0;
|
||||
if (channel_full->slow_mode_next_send_date != 0) {
|
||||
@ -14398,7 +14398,7 @@ tl_object_ptr<td_api::supergroupFullInfo> ContactsManager::get_supergroup_full_i
|
||||
get_chat_photo_object(td_->file_manager_.get(), channel_full->photo), channel_full->description,
|
||||
channel_full->participant_count, channel_full->administrator_count, channel_full->restricted_count,
|
||||
channel_full->banned_count, DialogId(channel_full->linked_channel_id).get(),
|
||||
td_->group_call_manager_->get_group_call_id(channel_full->active_group_call_id).get(),
|
||||
td_->group_call_manager_->get_group_call_id(channel_full->active_group_call_id, channel_id).get(),
|
||||
channel_full->slow_mode_delay, slow_mode_delay_expires_in, channel_full->can_get_participants,
|
||||
channel_full->can_set_username, channel_full->can_set_sticker_set, channel_full->can_set_location,
|
||||
channel_full->can_view_statistics, channel_full->is_all_history_available, channel_full->sticker_set_id.get(),
|
||||
@ -14622,7 +14622,7 @@ void ContactsManager::get_current_state(vector<td_api::object_ptr<td_api::Update
|
||||
}
|
||||
for (auto &it : channels_full_) {
|
||||
updates.push_back(td_api::make_object<td_api::updateSupergroupFullInfo>(
|
||||
it.first.get(), get_supergroup_full_info_object(it.second.get())));
|
||||
it.first.get(), get_supergroup_full_info_object(it.second.get(), it.first)));
|
||||
}
|
||||
for (auto &it : chats_full_) {
|
||||
updates.push_back(td_api::make_object<td_api::updateBasicGroupFullInfo>(
|
||||
|
@ -1411,7 +1411,8 @@ class ContactsManager : public Actor {
|
||||
|
||||
tl_object_ptr<td_api::supergroup> get_supergroup_object(ChannelId channel_id, const Channel *c) const;
|
||||
|
||||
tl_object_ptr<td_api::supergroupFullInfo> get_supergroup_full_info_object(const ChannelFull *channel_full) const;
|
||||
tl_object_ptr<td_api::supergroupFullInfo> get_supergroup_full_info_object(const ChannelFull *channel_full,
|
||||
ChannelId channel_id) const;
|
||||
|
||||
static tl_object_ptr<td_api::SecretChatState> get_secret_chat_state_object(SecretChatState state);
|
||||
|
||||
|
@ -6,8 +6,6 @@
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "td/telegram/td_api.h"
|
||||
|
||||
#include "td/utils/common.h"
|
||||
#include "td/utils/StringBuilder.h"
|
||||
|
||||
@ -34,10 +32,6 @@ class GroupCallId {
|
||||
return id;
|
||||
}
|
||||
|
||||
auto get_group_call_id_object() const {
|
||||
return td_api::make_object<td_api::groupCallId>(id);
|
||||
}
|
||||
|
||||
bool operator==(const GroupCallId &other) const {
|
||||
return id == other.id;
|
||||
}
|
||||
|
@ -331,6 +331,7 @@ class DiscardGroupCallQuery : public Td::ResultHandler {
|
||||
|
||||
struct GroupCallManager::GroupCall {
|
||||
GroupCallId group_call_id;
|
||||
ChannelId channel_id;
|
||||
bool is_inited = false;
|
||||
bool is_active = false;
|
||||
bool is_joined = false;
|
||||
@ -358,8 +359,8 @@ void GroupCallManager::tear_down() {
|
||||
parent_.reset();
|
||||
}
|
||||
|
||||
GroupCallId GroupCallManager::get_group_call_id(InputGroupCallId input_group_call_id) {
|
||||
return add_group_call(input_group_call_id)->group_call_id;
|
||||
GroupCallId GroupCallManager::get_group_call_id(InputGroupCallId input_group_call_id, ChannelId channel_id) {
|
||||
return add_group_call(input_group_call_id, channel_id)->group_call_id;
|
||||
}
|
||||
|
||||
Result<InputGroupCallId> GroupCallManager::get_input_group_call_id(GroupCallId group_call_id) {
|
||||
@ -379,12 +380,16 @@ GroupCallId GroupCallManager::get_next_group_call_id(InputGroupCallId input_grou
|
||||
return max_group_call_id_;
|
||||
}
|
||||
|
||||
GroupCallManager::GroupCall *GroupCallManager::add_group_call(InputGroupCallId input_group_call_id) {
|
||||
GroupCallManager::GroupCall *GroupCallManager::add_group_call(InputGroupCallId input_group_call_id,
|
||||
ChannelId channel_id) {
|
||||
auto &group_call = group_calls_[input_group_call_id];
|
||||
if (group_call == nullptr) {
|
||||
group_call = make_unique<GroupCall>();
|
||||
group_call->group_call_id = get_next_group_call_id(input_group_call_id);
|
||||
}
|
||||
if (!group_call->channel_id.is_valid()) {
|
||||
group_call->channel_id = channel_id;
|
||||
}
|
||||
return group_call.get();
|
||||
}
|
||||
|
||||
@ -446,7 +451,7 @@ void GroupCallManager::finish_get_group_call(InputGroupCallId input_group_call_i
|
||||
if (result.is_ok()) {
|
||||
td_->contacts_manager_->on_get_users(std::move(result.ok_ref()->users_), "finish_get_group_call");
|
||||
|
||||
auto call_id = update_group_call(result.ok()->call_);
|
||||
auto call_id = update_group_call(result.ok()->call_, ChannelId());
|
||||
if (call_id != input_group_call_id) {
|
||||
LOG(ERROR) << "Expected " << input_group_call_id << ", but received " << to_string(result.ok());
|
||||
result = Status::Error(500, "Receive another group call");
|
||||
@ -745,8 +750,13 @@ void GroupCallManager::discard_group_call(GroupCallId group_call_id, Promise<Uni
|
||||
td_->create_handler<DiscardGroupCallQuery>(std::move(promise))->send(input_group_call_id);
|
||||
}
|
||||
|
||||
void GroupCallManager::on_update_group_call(tl_object_ptr<telegram_api::GroupCall> group_call_ptr) {
|
||||
auto call_id = update_group_call(group_call_ptr);
|
||||
void GroupCallManager::on_update_group_call(tl_object_ptr<telegram_api::GroupCall> group_call_ptr,
|
||||
ChannelId channel_id) {
|
||||
if (!channel_id.is_valid()) {
|
||||
LOG(ERROR) << "Receive " << to_string(group_call_ptr) << " in invalid " << channel_id;
|
||||
channel_id = ChannelId();
|
||||
}
|
||||
auto call_id = update_group_call(group_call_ptr, channel_id);
|
||||
if (call_id.is_valid()) {
|
||||
LOG(INFO) << "Update " << call_id;
|
||||
} else {
|
||||
@ -754,12 +764,14 @@ void GroupCallManager::on_update_group_call(tl_object_ptr<telegram_api::GroupCal
|
||||
}
|
||||
}
|
||||
|
||||
InputGroupCallId GroupCallManager::update_group_call(const tl_object_ptr<telegram_api::GroupCall> &group_call_ptr) {
|
||||
InputGroupCallId GroupCallManager::update_group_call(const tl_object_ptr<telegram_api::GroupCall> &group_call_ptr,
|
||||
ChannelId channel_id) {
|
||||
CHECK(group_call_ptr != nullptr);
|
||||
|
||||
InputGroupCallId call_id;
|
||||
GroupCall call;
|
||||
call.is_inited = true;
|
||||
|
||||
string join_params;
|
||||
switch (group_call_ptr->get_id()) {
|
||||
case telegram_api::groupCall::ID: {
|
||||
@ -790,7 +802,8 @@ InputGroupCallId GroupCallManager::update_group_call(const tl_object_ptr<telegra
|
||||
}
|
||||
|
||||
bool need_update = false;
|
||||
auto *group_call = add_group_call(call_id);
|
||||
auto *group_call = add_group_call(call_id, channel_id);
|
||||
call.channel_id = channel_id.is_valid() ? channel_id : group_call->channel_id;
|
||||
if (!group_call->is_inited) {
|
||||
call.group_call_id = group_call->group_call_id;
|
||||
*group_call = std::move(call);
|
||||
@ -818,6 +831,9 @@ InputGroupCallId GroupCallManager::update_group_call(const tl_object_ptr<telegra
|
||||
}
|
||||
}
|
||||
|
||||
if (!group_call->channel_id.is_valid()) {
|
||||
group_call->channel_id = channel_id;
|
||||
}
|
||||
if (!join_params.empty()) {
|
||||
on_join_group_call_response(call_id, std::move(join_params));
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ class GroupCallManager : public Actor {
|
||||
GroupCallManager &operator=(GroupCallManager &&) = delete;
|
||||
~GroupCallManager() override;
|
||||
|
||||
GroupCallId get_group_call_id(InputGroupCallId input_group_call_id);
|
||||
GroupCallId get_group_call_id(InputGroupCallId input_group_call_id, ChannelId channel_id);
|
||||
|
||||
void create_voice_chat(ChannelId channel_id, Promise<InputGroupCallId> &&promise);
|
||||
|
||||
@ -55,7 +55,7 @@ class GroupCallManager : public Actor {
|
||||
|
||||
void discard_group_call(GroupCallId group_call_id, Promise<Unit> &&promise);
|
||||
|
||||
void on_update_group_call(tl_object_ptr<telegram_api::GroupCall> group_call_ptr);
|
||||
void on_update_group_call(tl_object_ptr<telegram_api::GroupCall> group_call_ptr, ChannelId channel_id);
|
||||
|
||||
void process_join_group_call_response(InputGroupCallId input_group_call_id, uint64 generation,
|
||||
tl_object_ptr<telegram_api::Updates> &&updates, Promise<Unit> &&promise);
|
||||
@ -70,7 +70,7 @@ class GroupCallManager : public Actor {
|
||||
|
||||
GroupCallId get_next_group_call_id(InputGroupCallId input_group_call_id);
|
||||
|
||||
GroupCall *add_group_call(InputGroupCallId input_group_call_id);
|
||||
GroupCall *add_group_call(InputGroupCallId input_group_call_id, ChannelId channel_id);
|
||||
|
||||
const GroupCall *get_group_call(InputGroupCallId input_group_call_id) const;
|
||||
GroupCall *get_group_call(InputGroupCallId input_group_call_id);
|
||||
@ -87,7 +87,8 @@ class GroupCallManager : public Actor {
|
||||
|
||||
void on_group_call_left(InputGroupCallId input_group_call_id, int32 source);
|
||||
|
||||
InputGroupCallId update_group_call(const tl_object_ptr<telegram_api::GroupCall> &group_call_ptr);
|
||||
InputGroupCallId update_group_call(const tl_object_ptr<telegram_api::GroupCall> &group_call_ptr,
|
||||
ChannelId channel_id);
|
||||
|
||||
static Result<td_api::object_ptr<td_api::groupCallJoinResponse>> get_group_call_join_response_object(
|
||||
string json_response);
|
||||
|
@ -4787,13 +4787,13 @@ tl_object_ptr<td_api::MessageContent> get_message_content_object(const MessageCo
|
||||
case MessageContentType::GroupCall: {
|
||||
auto *m = static_cast<const MessageGroupCall *>(content);
|
||||
return make_tl_object<td_api::messageGroupCall>(
|
||||
td->group_call_manager_->get_group_call_id(m->input_group_call_id).get(),
|
||||
td->group_call_manager_->get_group_call_id(m->input_group_call_id, ChannelId()).get(),
|
||||
m->duration >= 0 ? max(m->duration, 1) : 0);
|
||||
}
|
||||
case MessageContentType::InviteToGroupCall: {
|
||||
auto *m = static_cast<const MessageInviteToGroupCall *>(content);
|
||||
return make_tl_object<td_api::messageInviteGroupCallMembers>(
|
||||
td->group_call_manager_->get_group_call_id(m->input_group_call_id).get(),
|
||||
td->group_call_manager_->get_group_call_id(m->input_group_call_id, ChannelId()).get(),
|
||||
td->contacts_manager_->get_user_ids_object(m->user_ids, "MessageInviteToGroupCall"));
|
||||
}
|
||||
default:
|
||||
|
@ -2148,7 +2148,8 @@ void UpdatesManager::on_update(tl_object_ptr<telegram_api::updatePhoneCallSignal
|
||||
}
|
||||
|
||||
void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateGroupCall> update, bool /*force_apply*/) {
|
||||
send_closure(G()->group_call_manager(), &GroupCallManager::on_update_group_call, std::move(update->call_));
|
||||
send_closure(G()->group_call_manager(), &GroupCallManager::on_update_group_call, std::move(update->call_),
|
||||
ChannelId(update->channel_id_));
|
||||
}
|
||||
|
||||
void UpdatesManager::on_update(tl_object_ptr<telegram_api::updateContactsReset> update, bool /*force_apply*/) {
|
||||
|
Loading…
Reference in New Issue
Block a user