Use service messages to synchronize active group call state.
This commit is contained in:
parent
4b212b0728
commit
47a7bc05e2
@ -2593,6 +2593,12 @@ FullMessageId get_message_content_replied_message_id(DialogId dialog_id, const M
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::pair<InputGroupCallId, bool> get_message_content_group_call_info(const MessageContent *content) {
|
||||||
|
CHECK(content->get_type() == MessageContentType::GroupCall);
|
||||||
|
auto message_group_call = static_cast<const MessageGroupCall *>(content);
|
||||||
|
return {message_group_call->input_group_call_id, message_group_call->duration >= 0};
|
||||||
|
}
|
||||||
|
|
||||||
vector<UserId> get_message_content_added_user_ids(const MessageContent *content) {
|
vector<UserId> get_message_content_added_user_ids(const MessageContent *content) {
|
||||||
CHECK(content->get_type() == MessageContentType::ChatAddUsers);
|
CHECK(content->get_type() == MessageContentType::ChatAddUsers);
|
||||||
return static_cast<const MessageChatAddUsers *>(content)->user_ids;
|
return static_cast<const MessageChatAddUsers *>(content)->user_ids;
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include "td/telegram/DialogId.h"
|
#include "td/telegram/DialogId.h"
|
||||||
#include "td/telegram/files/FileId.h"
|
#include "td/telegram/files/FileId.h"
|
||||||
#include "td/telegram/FullMessageId.h"
|
#include "td/telegram/FullMessageId.h"
|
||||||
|
#include "td/telegram/InputGroupCallId.h"
|
||||||
#include "td/telegram/logevent/LogEvent.h"
|
#include "td/telegram/logevent/LogEvent.h"
|
||||||
#include "td/telegram/MessageContentType.h"
|
#include "td/telegram/MessageContentType.h"
|
||||||
#include "td/telegram/MessageCopyOptions.h"
|
#include "td/telegram/MessageCopyOptions.h"
|
||||||
@ -132,6 +133,8 @@ MessageId get_message_content_pinned_message_id(const MessageContent *content);
|
|||||||
|
|
||||||
FullMessageId get_message_content_replied_message_id(DialogId dialog_id, const MessageContent *content);
|
FullMessageId get_message_content_replied_message_id(DialogId dialog_id, const MessageContent *content);
|
||||||
|
|
||||||
|
std::pair<InputGroupCallId, bool> get_message_content_group_call_info(const MessageContent *content);
|
||||||
|
|
||||||
vector<UserId> get_message_content_added_user_ids(const MessageContent *content);
|
vector<UserId> get_message_content_added_user_ids(const MessageContent *content);
|
||||||
|
|
||||||
UserId get_message_content_deleted_user_id(const MessageContent *content);
|
UserId get_message_content_deleted_user_id(const MessageContent *content);
|
||||||
|
@ -29861,11 +29861,10 @@ void MessagesManager::on_update_dialog_group_call_id(DialogId dialog_id, InputGr
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (d->active_group_call_id != input_group_call_id) {
|
if (d->active_group_call_id != input_group_call_id) {
|
||||||
|
LOG(INFO) << "Update active group call in " << dialog_id << " to " << input_group_call_id;
|
||||||
d->active_group_call_id = input_group_call_id;
|
d->active_group_call_id = input_group_call_id;
|
||||||
bool has_active_group_call = input_group_call_id.is_valid();
|
bool has_active_group_call = input_group_call_id.is_valid();
|
||||||
if (has_active_group_call != d->has_active_group_call) {
|
if (has_active_group_call != d->has_active_group_call) {
|
||||||
LOG(ERROR) << "Receive invalid has_active_group_call flag " << d->has_active_group_call << ", but have "
|
|
||||||
<< input_group_call_id << " in " << dialog_id;
|
|
||||||
d->has_active_group_call = has_active_group_call;
|
d->has_active_group_call = has_active_group_call;
|
||||||
if (!has_active_group_call) {
|
if (!has_active_group_call) {
|
||||||
d->is_group_call_empty = false;
|
d->is_group_call_empty = false;
|
||||||
@ -32607,6 +32606,7 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (from_update) {
|
if (from_update) {
|
||||||
|
speculatively_update_active_group_call_id(d, m);
|
||||||
speculatively_update_channel_participants(dialog_id, m);
|
speculatively_update_channel_participants(dialog_id, m);
|
||||||
update_sent_message_contents(dialog_id, m);
|
update_sent_message_contents(dialog_id, m);
|
||||||
update_used_hashtags(dialog_id, m);
|
update_used_hashtags(dialog_id, m);
|
||||||
@ -36055,6 +36055,26 @@ void MessagesManager::reget_message_from_server_if_needed(DialogId dialog_id, co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessagesManager::speculatively_update_active_group_call_id(Dialog *d, const Message *m) {
|
||||||
|
CHECK(m != nullptr);
|
||||||
|
if (!m->message_id.is_any_server() || m->content->get_type() != MessageContentType::GroupCall) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
InputGroupCallId input_group_call_id;
|
||||||
|
bool is_ended;
|
||||||
|
std::tie(input_group_call_id, is_ended) = get_message_content_group_call_info(m->content.get());
|
||||||
|
if (is_ended) {
|
||||||
|
if (d->active_group_call_id == input_group_call_id) {
|
||||||
|
on_update_dialog_group_call_id(d->dialog_id, InputGroupCallId());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (d->active_group_call_id != input_group_call_id) {
|
||||||
|
repair_dialog_active_group_call_id(d->dialog_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MessagesManager::speculatively_update_channel_participants(DialogId dialog_id, const Message *m) {
|
void MessagesManager::speculatively_update_channel_participants(DialogId dialog_id, const Message *m) {
|
||||||
CHECK(m != nullptr);
|
CHECK(m != nullptr);
|
||||||
if (!m->message_id.is_any_server() || dialog_id.get_type() != DialogType::Channel || !m->sender_user_id.is_valid()) {
|
if (!m->message_id.is_any_server() || dialog_id.get_type() != DialogType::Channel || !m->sender_user_id.is_valid()) {
|
||||||
|
@ -2881,6 +2881,8 @@ class MessagesManager : public Actor {
|
|||||||
|
|
||||||
void reget_message_from_server_if_needed(DialogId dialog_id, const Message *m);
|
void reget_message_from_server_if_needed(DialogId dialog_id, const Message *m);
|
||||||
|
|
||||||
|
void speculatively_update_active_group_call_id(Dialog *d, const Message *m);
|
||||||
|
|
||||||
void speculatively_update_channel_participants(DialogId dialog_id, const Message *m);
|
void speculatively_update_channel_participants(DialogId dialog_id, const Message *m);
|
||||||
|
|
||||||
void update_sent_message_contents(DialogId dialog_id, const Message *m);
|
void update_sent_message_contents(DialogId dialog_id, const Message *m);
|
||||||
|
Loading…
Reference in New Issue
Block a user