From 76de8f374ebf1486fb93f51b45442df78166e4ab Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 8 Mar 2018 22:01:24 +0300 Subject: [PATCH] Preserve remote_id in update_message_content. GitOrigin-RevId: 136c7a391374a54d1e1c5afac5b68d986c9c7001 --- td/telegram/MessagesManager.cpp | 34 +++++++++++++++++++++++++++++++++ td/telegram/MessagesManager.h | 2 ++ 2 files changed, 36 insertions(+) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 0eb5ba6f..20972add 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -14873,6 +14873,35 @@ FileId MessagesManager::get_message_content_file_id(const MessageContent *conten return FileId(); } +void MessagesManager::update_message_content_file_id_remote(MessageContent *content, FileId file_id) { + if (file_id.get_remote() == 0) { + return; + } + FileId *old_file_id = [&]() { + switch (content->get_id()) { + case MessageAnimation::ID: + return &static_cast(content)->file_id; + case MessageAudio::ID: + return &static_cast(content)->file_id; + case MessageDocument::ID: + return &static_cast(content)->file_id; + case MessageSticker::ID: + return &static_cast(content)->file_id; + case MessageVideo::ID: + return &static_cast(content)->file_id; + case MessageVideoNote::ID: + return &static_cast(content)->file_id; + case MessageVoiceNote::ID: + return &static_cast(content)->file_id; + default: + return static_cast(nullptr); + } + }(); + if (old_file_id != nullptr && *old_file_id == file_id && old_file_id->get_remote() == 0) { + *old_file_id = file_id; + } +} + FileId MessagesManager::get_message_content_thumbnail_file_id(const MessageContent *content) const { switch (content->get_id()) { case MessageAnimation::ID: @@ -22085,6 +22114,7 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me int32 old_content_type = old_content->get_id(); int32 new_content_type = new_content->get_id(); bool can_delete_old_document = old_message->message_id.is_yet_unsent() && false; + if (old_content_type != new_content_type) { need_update = true; LOG(INFO) << "Message content has changed its type from " << old_content_type << " to " << new_content_type; @@ -22503,7 +22533,11 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me } if (is_content_changed || need_update) { + auto old_file_id = get_message_content_file_id(old_content.get()); old_content = std::move(new_content); + update_message_content_file_id_remote(old_content.get(), old_file_id); + } else { + update_message_content_file_id_remote(old_content.get(), get_message_content_file_id(new_content.get())); } if (is_content_changed && !need_update) { LOG(INFO) << "Content of " << old_message->message_id << " in " << dialog_id << " has changed"; diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 8bfa82b7..1cc96946 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2277,6 +2277,8 @@ class MessagesManager : public Actor { static FileId get_message_content_file_id(const MessageContent *content); + static void update_message_content_file_id_remote(MessageContent *content, FileId file_id); + FileId get_message_content_thumbnail_file_id(const MessageContent *content) const; vector get_message_file_ids(const Message *message) const;