Optionally merge files in update_message_content.
GitOrigin-RevId: 785f1bca1360ab2330744ff55e93421eb7834801
This commit is contained in:
parent
5eea3d9c37
commit
d3b5029cba
@ -16966,7 +16966,7 @@ void MessagesManager::on_upload_message_media_success(DialogId dialog_id, Messag
|
|||||||
auto content = get_message_content(get_message_content_caption(m->content.get()), std::move(media), dialog_id, false,
|
auto content = get_message_content(get_message_content_caption(m->content.get()), std::move(media), dialog_id, false,
|
||||||
UserId(), nullptr);
|
UserId(), nullptr);
|
||||||
|
|
||||||
update_message_content(dialog_id, m, m->content, std::move(content), true);
|
update_message_content(dialog_id, m, m->content, std::move(content), true, true);
|
||||||
|
|
||||||
auto input_media = get_input_media(m->content.get(), nullptr, nullptr, m->ttl);
|
auto input_media = get_input_media(m->content.get(), nullptr, nullptr, m->ttl);
|
||||||
Status result;
|
Status result;
|
||||||
@ -23239,7 +23239,8 @@ void MessagesManager::update_message(Dialog *d, unique_ptr<Message> &old_message
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (update_message_content(dialog_id, old_message.get(), old_message->content, std::move(new_message->content),
|
if (update_message_content(dialog_id, old_message.get(), old_message->content, std::move(new_message->content),
|
||||||
need_send_update_message_content)) {
|
need_send_update_message_content,
|
||||||
|
message_id.is_yet_unsent() && new_message->edit_date == 0)) {
|
||||||
is_changed = true;
|
is_changed = true;
|
||||||
}
|
}
|
||||||
// TODO update can be send only if the message has already been returned to the user
|
// TODO update can be send only if the message has already been returned to the user
|
||||||
@ -23291,12 +23292,12 @@ bool MessagesManager::need_message_text_changed_warning(const Message *old_messa
|
|||||||
bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_message,
|
bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_message,
|
||||||
unique_ptr<MessageContent> &old_content,
|
unique_ptr<MessageContent> &old_content,
|
||||||
unique_ptr<MessageContent> new_content,
|
unique_ptr<MessageContent> new_content,
|
||||||
bool need_send_update_message_content) {
|
bool need_send_update_message_content, bool need_merge_files) {
|
||||||
bool is_content_changed = false;
|
bool is_content_changed = false;
|
||||||
bool need_update = false;
|
bool need_update = false;
|
||||||
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;
|
const 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;
|
||||||
@ -23382,7 +23383,9 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
|
|||||||
case MessageAnimation::ID: {
|
case MessageAnimation::ID: {
|
||||||
auto old_ = static_cast<const MessageAnimation *>(old_content.get());
|
auto old_ = static_cast<const MessageAnimation *>(old_content.get());
|
||||||
auto new_ = static_cast<const MessageAnimation *>(new_content.get());
|
auto new_ = static_cast<const MessageAnimation *>(new_content.get());
|
||||||
if (td_->animations_manager_->merge_animations(new_->file_id, old_->file_id, can_delete_old_document)) {
|
if (new_->file_id != old_->file_id &&
|
||||||
|
(!need_merge_files ||
|
||||||
|
td_->animations_manager_->merge_animations(new_->file_id, old_->file_id, can_delete_old_document))) {
|
||||||
need_update = true;
|
need_update = true;
|
||||||
}
|
}
|
||||||
if (old_->caption != new_->caption) {
|
if (old_->caption != new_->caption) {
|
||||||
@ -23393,7 +23396,9 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
|
|||||||
case MessageAudio::ID: {
|
case MessageAudio::ID: {
|
||||||
auto old_ = static_cast<const MessageAudio *>(old_content.get());
|
auto old_ = static_cast<const MessageAudio *>(old_content.get());
|
||||||
auto new_ = static_cast<const MessageAudio *>(new_content.get());
|
auto new_ = static_cast<const MessageAudio *>(new_content.get());
|
||||||
if (td_->audios_manager_->merge_audios(new_->file_id, old_->file_id, can_delete_old_document)) {
|
if (new_->file_id != old_->file_id &&
|
||||||
|
(!need_merge_files ||
|
||||||
|
td_->audios_manager_->merge_audios(new_->file_id, old_->file_id, can_delete_old_document))) {
|
||||||
need_update = true;
|
need_update = true;
|
||||||
}
|
}
|
||||||
if (old_->caption != new_->caption) {
|
if (old_->caption != new_->caption) {
|
||||||
@ -23412,7 +23417,9 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
|
|||||||
case MessageDocument::ID: {
|
case MessageDocument::ID: {
|
||||||
auto old_ = static_cast<const MessageDocument *>(old_content.get());
|
auto old_ = static_cast<const MessageDocument *>(old_content.get());
|
||||||
auto new_ = static_cast<const MessageDocument *>(new_content.get());
|
auto new_ = static_cast<const MessageDocument *>(new_content.get());
|
||||||
if (td_->documents_manager_->merge_documents(new_->file_id, old_->file_id, can_delete_old_document)) {
|
if (new_->file_id != old_->file_id &&
|
||||||
|
(!need_merge_files ||
|
||||||
|
td_->documents_manager_->merge_documents(new_->file_id, old_->file_id, can_delete_old_document))) {
|
||||||
need_update = true;
|
need_update = true;
|
||||||
}
|
}
|
||||||
if (old_->caption != new_->caption) {
|
if (old_->caption != new_->caption) {
|
||||||
@ -23480,6 +23487,8 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
|
|||||||
new_photo->photos.push_back(old_photo->photos[0]);
|
new_photo->photos.push_back(old_photo->photos[0]);
|
||||||
}
|
}
|
||||||
new_photo->photos.push_back(old_photo->photos.back());
|
new_photo->photos.push_back(old_photo->photos.back());
|
||||||
|
|
||||||
|
if (need_merge_files) {
|
||||||
FileId old_file_id = old_photo->photos.back().file_id;
|
FileId old_file_id = old_photo->photos.back().file_id;
|
||||||
FileView old_file_view = td_->file_manager_->get_file_view(old_file_id);
|
FileView old_file_view = td_->file_manager_->get_file_view(old_file_id);
|
||||||
FileId new_file_id = new_photo->photos[0].file_id;
|
FileId new_file_id = new_photo->photos[0].file_id;
|
||||||
@ -23494,6 +23503,7 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
|
|||||||
LOG_STATUS(td_->file_manager_->merge(file_id, old_file_id));
|
LOG_STATUS(td_->file_manager_->merge(file_id, old_file_id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ((old_photo->photos.size() == 1 + new_photo->photos.size() ||
|
if ((old_photo->photos.size() == 1 + new_photo->photos.size() ||
|
||||||
(old_photo->photos.size() == 2 + new_photo->photos.size() &&
|
(old_photo->photos.size() == 2 + new_photo->photos.size() &&
|
||||||
old_photo->photos[new_photo->photos.size()].type == 't')) &&
|
old_photo->photos[new_photo->photos.size()].type == 't')) &&
|
||||||
@ -23513,7 +23523,9 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
|
|||||||
case MessageSticker::ID: {
|
case MessageSticker::ID: {
|
||||||
auto old_ = static_cast<const MessageSticker *>(old_content.get());
|
auto old_ = static_cast<const MessageSticker *>(old_content.get());
|
||||||
auto new_ = static_cast<const MessageSticker *>(new_content.get());
|
auto new_ = static_cast<const MessageSticker *>(new_content.get());
|
||||||
if (td_->stickers_manager_->merge_stickers(new_->file_id, old_->file_id, can_delete_old_document)) {
|
if (new_->file_id != old_->file_id &&
|
||||||
|
(!need_merge_files ||
|
||||||
|
td_->stickers_manager_->merge_stickers(new_->file_id, old_->file_id, can_delete_old_document))) {
|
||||||
need_update = true;
|
need_update = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -23529,7 +23541,9 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
|
|||||||
case MessageVideo::ID: {
|
case MessageVideo::ID: {
|
||||||
auto old_ = static_cast<const MessageVideo *>(old_content.get());
|
auto old_ = static_cast<const MessageVideo *>(old_content.get());
|
||||||
auto new_ = static_cast<const MessageVideo *>(new_content.get());
|
auto new_ = static_cast<const MessageVideo *>(new_content.get());
|
||||||
if (td_->videos_manager_->merge_videos(new_->file_id, old_->file_id, can_delete_old_document)) {
|
if (new_->file_id != old_->file_id &&
|
||||||
|
(!need_merge_files ||
|
||||||
|
td_->videos_manager_->merge_videos(new_->file_id, old_->file_id, can_delete_old_document))) {
|
||||||
need_update = true;
|
need_update = true;
|
||||||
}
|
}
|
||||||
if (old_->caption != new_->caption) {
|
if (old_->caption != new_->caption) {
|
||||||
@ -23540,7 +23554,9 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
|
|||||||
case MessageVideoNote::ID: {
|
case MessageVideoNote::ID: {
|
||||||
auto old_ = static_cast<const MessageVideoNote *>(old_content.get());
|
auto old_ = static_cast<const MessageVideoNote *>(old_content.get());
|
||||||
auto new_ = static_cast<const MessageVideoNote *>(new_content.get());
|
auto new_ = static_cast<const MessageVideoNote *>(new_content.get());
|
||||||
if (td_->video_notes_manager_->merge_video_notes(new_->file_id, old_->file_id, can_delete_old_document)) {
|
if (new_->file_id != old_->file_id &&
|
||||||
|
(!need_merge_files ||
|
||||||
|
td_->video_notes_manager_->merge_video_notes(new_->file_id, old_->file_id, can_delete_old_document))) {
|
||||||
need_update = true;
|
need_update = true;
|
||||||
}
|
}
|
||||||
if (old_->is_viewed != new_->is_viewed) {
|
if (old_->is_viewed != new_->is_viewed) {
|
||||||
@ -23551,7 +23567,9 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
|
|||||||
case MessageVoiceNote::ID: {
|
case MessageVoiceNote::ID: {
|
||||||
auto old_ = static_cast<const MessageVoiceNote *>(old_content.get());
|
auto old_ = static_cast<const MessageVoiceNote *>(old_content.get());
|
||||||
auto new_ = static_cast<const MessageVoiceNote *>(new_content.get());
|
auto new_ = static_cast<const MessageVoiceNote *>(new_content.get());
|
||||||
if (td_->voice_notes_manager_->merge_voice_notes(new_->file_id, old_->file_id, can_delete_old_document)) {
|
if (new_->file_id != old_->file_id &&
|
||||||
|
(!need_merge_files ||
|
||||||
|
td_->voice_notes_manager_->merge_voice_notes(new_->file_id, old_->file_id, can_delete_old_document))) {
|
||||||
need_update = true;
|
need_update = true;
|
||||||
}
|
}
|
||||||
if (old_->caption != new_->caption) {
|
if (old_->caption != new_->caption) {
|
||||||
|
@ -2192,7 +2192,8 @@ class MessagesManager : public Actor {
|
|||||||
const MessageText *new_content);
|
const MessageText *new_content);
|
||||||
|
|
||||||
bool update_message_content(DialogId dialog_id, Message *old_message, unique_ptr<MessageContent> &old_content,
|
bool update_message_content(DialogId dialog_id, Message *old_message, unique_ptr<MessageContent> &old_content,
|
||||||
unique_ptr<MessageContent> new_content, bool need_send_update_message_content);
|
unique_ptr<MessageContent> new_content, bool need_send_update_message_content,
|
||||||
|
bool need_merge_files);
|
||||||
|
|
||||||
void send_update_new_message(Dialog *d, const Message *m, bool force = false);
|
void send_update_new_message(Dialog *d, const Message *m, bool force = false);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user