Store MessageInfo in new message queue.

main
levlam 2 months ago
parent 3cb912b816
commit 8ccb42b795

@ -7806,9 +7806,9 @@ void Client::loop() {
void Client::on_get_reply_message(int64 chat_id, object_ptr<td_api::message> reply_to_message) { void Client::on_get_reply_message(int64 chat_id, object_ptr<td_api::message> reply_to_message) {
auto &queue = new_message_queues_[chat_id]; auto &queue = new_message_queues_[chat_id];
CHECK(!queue.queue_.empty()); CHECK(!queue.queue_.empty());
object_ptr<td_api::message> &message = queue.queue_.front().message; auto &message_info = queue.queue_.front().message_info_;
CHECK(chat_id == message->chat_id_); CHECK(chat_id == message_info->chat_id);
int64 reply_to_message_id = get_same_chat_reply_to_message_id(message); int64 reply_to_message_id = get_same_chat_reply_to_message_id(message_info.get());
CHECK(reply_to_message_id > 0); CHECK(reply_to_message_id > 0);
if (reply_to_message == nullptr) { if (reply_to_message == nullptr) {
LOG(INFO) << "Can't find message " << reply_to_message_id << " in chat " << chat_id LOG(INFO) << "Can't find message " << reply_to_message_id << " in chat " << chat_id
@ -16485,7 +16485,7 @@ void Client::add_new_message(object_ptr<td_api::message> &&message, bool is_edit
auto chat_id = message->chat_id_; auto chat_id = message->chat_id_;
CHECK(chat_id != 0); CHECK(chat_id != 0);
new_message_queues_[chat_id].queue_.emplace(std::move(message), is_edited); new_message_queues_[chat_id].queue_.emplace(create_message(std::move(message)), is_edited);
process_new_message_queue(chat_id, 0); process_new_message_queue(chat_id, 0);
} }
@ -17343,13 +17343,11 @@ void Client::process_new_message_queue(int64 chat_id, int state) {
return; return;
} }
while (!queue.queue_.empty()) { while (!queue.queue_.empty()) {
auto &message_ref = queue.queue_.front().message; auto &message_info_ref = queue.queue_.front().message_info_;
CHECK(chat_id == message_ref->chat_id_); CHECK(chat_id == message_info_ref->chat_id);
int64 message_id = message_ref->id_; int64 message_id = message_info_ref->id;
drop_internal_reply_to_message_in_another_chat(message_ref);
int64 reply_to_message_id = get_same_chat_reply_to_message_id(message_ref); int64 reply_to_message_id = get_same_chat_reply_to_message_id(message_info_ref.get());
if (state == 0) { if (state == 0) {
if (reply_to_message_id > 0 && get_message(chat_id, reply_to_message_id, false) == nullptr) { if (reply_to_message_id > 0 && get_message(chat_id, reply_to_message_id, false) == nullptr) {
queue.has_active_request_ = true; queue.has_active_request_ = true;
@ -17359,7 +17357,7 @@ void Client::process_new_message_queue(int64 chat_id, int state) {
state = 1; state = 1;
} }
if (state == 1) { if (state == 1) {
auto sticker_set_ids = get_message_sticker_set_ids(message_ref); auto sticker_set_ids = get_message_sticker_set_ids(message_info_ref.get());
td::combine(sticker_set_ids, get_message_sticker_set_ids(get_message(chat_id, reply_to_message_id, true))); td::combine(sticker_set_ids, get_message_sticker_set_ids(get_message(chat_id, reply_to_message_id, true)));
if (!sticker_set_ids.empty()) { if (!sticker_set_ids.empty()) {
queue.has_active_request_ = true; queue.has_active_request_ = true;
@ -17372,11 +17370,10 @@ void Client::process_new_message_queue(int64 chat_id, int state) {
} }
CHECK(state == 2); CHECK(state == 2);
auto message = std::move(message_ref); const auto *message_info = add_message(std::move(message_info_ref), false);
auto is_edited = queue.queue_.front().is_edited; auto is_edited = queue.queue_.front().is_edited_;
queue.queue_.pop(); queue.queue_.pop();
state = 0; state = 0;
const auto *message_info = add_message(std::move(message));
if (need_skip_update_message(chat_id, message_info, is_edited)) { if (need_skip_update_message(chat_id, message_info, is_edited)) {
continue; continue;
} }
@ -17519,7 +17516,11 @@ td::unique_ptr<Client::MessageInfo> Client::delete_message(int64 chat_id, int64
} }
const Client::MessageInfo *Client::add_message(object_ptr<td_api::message> &&message, bool force_update_content) { const Client::MessageInfo *Client::add_message(object_ptr<td_api::message> &&message, bool force_update_content) {
auto new_message_info = create_message(std::move(message)); return add_message(create_message(std::move(message)), force_update_content);
}
const Client::MessageInfo *Client::add_message(td::unique_ptr<MessageInfo> &&new_message_info,
bool force_update_content) {
LOG(DEBUG) << "Add message " << new_message_info->id << " to chat " << new_message_info->chat_id; LOG(DEBUG) << "Add message " << new_message_info->id << " to chat " << new_message_info->chat_id;
auto &message_info = messages_[{new_message_info->chat_id, new_message_info->id}]; auto &message_info = messages_[{new_message_info->chat_id, new_message_info->id}];
if (message_info != nullptr) { if (message_info != nullptr) {

@ -1254,6 +1254,8 @@ class Client final : public WebhookActor::Callback {
const MessageInfo *add_message(object_ptr<td_api::message> &&message, bool force_update_content = false); const MessageInfo *add_message(object_ptr<td_api::message> &&message, bool force_update_content = false);
const MessageInfo *add_message(td::unique_ptr<MessageInfo> &&new_message_info, bool force_update_content);
td::unique_ptr<MessageInfo> create_message(object_ptr<td_api::message> message); td::unique_ptr<MessageInfo> create_message(object_ptr<td_api::message> message);
const MessageInfo *get_message(int64 chat_id, int64 message_id, bool force_cache) const; const MessageInfo *get_message(int64 chat_id, int64 message_id, bool force_cache) const;
@ -1466,11 +1468,11 @@ class Client final : public WebhookActor::Callback {
int64 current_send_message_query_id_ = 1; int64 current_send_message_query_id_ = 1;
struct NewMessage { struct NewMessage {
object_ptr<td_api::message> message; td::unique_ptr<MessageInfo> message_info_;
bool is_edited = false; bool is_edited_ = false;
NewMessage(object_ptr<td_api::message> &&message, bool is_edited) NewMessage(td::unique_ptr<MessageInfo> &&message_info, bool is_edited)
: message(std::move(message)), is_edited(is_edited) { : message_info_(std::move(message_info)), is_edited_(is_edited) {
} }
}; };
struct NewMessageQueue { struct NewMessageQueue {

Loading…
Cancel
Save