Preserve remote_id in update_message_content.
GitOrigin-RevId: 136c7a391374a54d1e1c5afac5b68d986c9c7001
This commit is contained in:
parent
ab9ce52e5c
commit
76de8f374e
@ -14873,6 +14873,35 @@ FileId MessagesManager::get_message_content_file_id(const MessageContent *conten
|
|||||||
return FileId();
|
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<MessageAnimation *>(content)->file_id;
|
||||||
|
case MessageAudio::ID:
|
||||||
|
return &static_cast<MessageAudio *>(content)->file_id;
|
||||||
|
case MessageDocument::ID:
|
||||||
|
return &static_cast<MessageDocument *>(content)->file_id;
|
||||||
|
case MessageSticker::ID:
|
||||||
|
return &static_cast<MessageSticker *>(content)->file_id;
|
||||||
|
case MessageVideo::ID:
|
||||||
|
return &static_cast<MessageVideo *>(content)->file_id;
|
||||||
|
case MessageVideoNote::ID:
|
||||||
|
return &static_cast<MessageVideoNote *>(content)->file_id;
|
||||||
|
case MessageVoiceNote::ID:
|
||||||
|
return &static_cast<MessageVoiceNote *>(content)->file_id;
|
||||||
|
default:
|
||||||
|
return static_cast<FileId *>(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 {
|
FileId MessagesManager::get_message_content_thumbnail_file_id(const MessageContent *content) const {
|
||||||
switch (content->get_id()) {
|
switch (content->get_id()) {
|
||||||
case MessageAnimation::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 old_content_type = old_content->get_id();
|
||||||
int32 new_content_type = new_content->get_id();
|
int32 new_content_type = new_content->get_id();
|
||||||
bool can_delete_old_document = old_message->message_id.is_yet_unsent() && false;
|
bool can_delete_old_document = old_message->message_id.is_yet_unsent() && false;
|
||||||
|
|
||||||
if (old_content_type != new_content_type) {
|
if (old_content_type != new_content_type) {
|
||||||
need_update = true;
|
need_update = true;
|
||||||
LOG(INFO) << "Message content has changed its type from " << old_content_type << " to " << new_content_type;
|
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) {
|
if (is_content_changed || need_update) {
|
||||||
|
auto old_file_id = get_message_content_file_id(old_content.get());
|
||||||
old_content = std::move(new_content);
|
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) {
|
if (is_content_changed && !need_update) {
|
||||||
LOG(INFO) << "Content of " << old_message->message_id << " in " << dialog_id << " has changed";
|
LOG(INFO) << "Content of " << old_message->message_id << " in " << dialog_id << " has changed";
|
||||||
|
@ -2277,6 +2277,8 @@ class MessagesManager : public Actor {
|
|||||||
|
|
||||||
static FileId get_message_content_file_id(const MessageContent *content);
|
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;
|
FileId get_message_content_thumbnail_file_id(const MessageContent *content) const;
|
||||||
|
|
||||||
vector<FileId> get_message_file_ids(const Message *message) const;
|
vector<FileId> get_message_file_ids(const Message *message) const;
|
||||||
|
Reference in New Issue
Block a user