Add and use need_update_draft_message.

This commit is contained in:
levlam 2023-05-31 15:29:37 +03:00
parent 0ebc404ec5
commit ec4d9836ee
3 changed files with 29 additions and 35 deletions

View File

@ -15,6 +15,23 @@
namespace td { namespace td {
bool need_update_draft_message(const unique_ptr<DraftMessage> &old_draft_message,
const unique_ptr<DraftMessage> &new_draft_message, bool from_update) {
if (new_draft_message == nullptr) {
return old_draft_message != nullptr;
} else {
if (old_draft_message == nullptr) {
return true;
}
if (old_draft_message->reply_to_message_id == new_draft_message->reply_to_message_id &&
old_draft_message->input_message_text == new_draft_message->input_message_text) {
return old_draft_message->date < new_draft_message->date;
} else {
return !from_update || old_draft_message->date <= new_draft_message->date;
}
}
}
td_api::object_ptr<td_api::draftMessage> get_draft_message_object(const unique_ptr<DraftMessage> &draft_message) { td_api::object_ptr<td_api::draftMessage> get_draft_message_object(const unique_ptr<DraftMessage> &draft_message) {
if (draft_message == nullptr) { if (draft_message == nullptr) {
return nullptr; return nullptr;

View File

@ -27,6 +27,9 @@ class DraftMessage {
InputMessageText input_message_text; InputMessageText input_message_text;
}; };
bool need_update_draft_message(const unique_ptr<DraftMessage> &old_draft_message,
const unique_ptr<DraftMessage> &new_draft_message, bool from_update);
td_api::object_ptr<td_api::draftMessage> get_draft_message_object(const unique_ptr<DraftMessage> &draft_message); td_api::object_ptr<td_api::draftMessage> get_draft_message_object(const unique_ptr<DraftMessage> &draft_message);
unique_ptr<DraftMessage> get_draft_message(ContactsManager *contacts_manager, unique_ptr<DraftMessage> get_draft_message(ContactsManager *contacts_manager,

View File

@ -19070,14 +19070,11 @@ Status MessagesManager::set_dialog_draft_message(DialogId dialog_id, MessageId t
return Status::OK(); return Status::OK();
} }
auto &old_draft_message = m->thread_draft_message; if (need_update_draft_message(m->thread_draft_message, new_draft_message, false)) {
if (((new_draft_message == nullptr) != (old_draft_message == nullptr)) || m->thread_draft_message = std::move(new_draft_message);
(new_draft_message != nullptr &&
(old_draft_message->reply_to_message_id != new_draft_message->reply_to_message_id ||
old_draft_message->input_message_text != new_draft_message->input_message_text))) {
old_draft_message = std::move(new_draft_message);
on_message_changed(d, m, false, "set_dialog_draft_message"); on_message_changed(d, m, false, "set_dialog_draft_message");
} }
return Status::OK(); return Status::OK();
} }
@ -31406,37 +31403,14 @@ void MessagesManager::on_update_dialog_draft_message(DialogId dialog_id, Message
bool MessagesManager::update_dialog_draft_message(Dialog *d, unique_ptr<DraftMessage> &&draft_message, bool from_update, bool MessagesManager::update_dialog_draft_message(Dialog *d, unique_ptr<DraftMessage> &&draft_message, bool from_update,
bool need_update_dialog_pos) { bool need_update_dialog_pos) {
CHECK(d != nullptr); CHECK(d != nullptr);
if (draft_message == nullptr) { if (need_update_draft_message(d->draft_message, draft_message, from_update)) {
if (d->draft_message != nullptr) { d->draft_message = std::move(draft_message);
d->draft_message = nullptr;
if (need_update_dialog_pos) { if (need_update_dialog_pos) {
update_dialog_pos(d, "update_dialog_draft_message", false); update_dialog_pos(d, "update_dialog_draft_message", false);
} }
send_update_chat_draft_message(d); send_update_chat_draft_message(d);
return true; return true;
} }
} else {
if (d->draft_message != nullptr && d->draft_message->reply_to_message_id == draft_message->reply_to_message_id &&
d->draft_message->input_message_text == draft_message->input_message_text) {
if (d->draft_message->date < draft_message->date) {
d->draft_message->date = draft_message->date;
if (need_update_dialog_pos) {
update_dialog_pos(d, "update_dialog_draft_message 2", false);
}
send_update_chat_draft_message(d);
return true;
}
} else {
if (!from_update || d->draft_message == nullptr || d->draft_message->date <= draft_message->date) {
d->draft_message = std::move(draft_message);
if (need_update_dialog_pos) {
update_dialog_pos(d, "update_dialog_draft_message 3", false);
}
send_update_chat_draft_message(d);
return true;
}
}
}
return false; return false;
} }