Keep chat position if failed to add last message to it.
This commit is contained in:
parent
1c2ff4fd5a
commit
bcea804864
@ -36326,19 +36326,24 @@ void MessagesManager::fix_new_dialog(Dialog *d, unique_ptr<Message> &&last_datab
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto last_message_date = last_database_message->date;
|
||||||
if (dependent_dialog_count == 0) {
|
if (dependent_dialog_count == 0) {
|
||||||
add_dialog_last_database_message(d, std::move(last_database_message));
|
if (!add_dialog_last_database_message(d, std::move(last_database_message))) {
|
||||||
|
// failed to add last message; keep the current position and get history from the database
|
||||||
|
d->pending_last_message_date = last_message_date;
|
||||||
|
d->pending_last_message_id = last_message_id;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// can't add message immediately, because need to notify first about adding of dependent dialogs
|
// can't add message immediately, because need to notify first about adding of dependent dialogs
|
||||||
d->pending_last_message_date = last_database_message->date;
|
d->pending_last_message_date = last_message_date;
|
||||||
d->pending_last_message_id = last_database_message->message_id;
|
d->pending_last_message_id = last_message_id;
|
||||||
pending_add_dialog_last_database_message_[dialog_id] = {dependent_dialog_count, std::move(last_database_message)};
|
pending_add_dialog_last_database_message_[dialog_id] = {dependent_dialog_count, std::move(last_database_message)};
|
||||||
}
|
}
|
||||||
} else if (last_database_message_id.is_valid()) {
|
} else if (last_database_message_id.is_valid()) {
|
||||||
auto date = DialogDate(order, dialog_id).get_date();
|
auto date = DialogDate(order, dialog_id).get_date();
|
||||||
if (date < MIN_PINNED_DIALOG_DATE) {
|
if (date < MIN_PINNED_DIALOG_DATE) {
|
||||||
d->pending_last_message_date = date;
|
d->pending_last_message_date = date;
|
||||||
d->pending_last_message_id = last_database_message_id;
|
d->pending_last_message_id = last_message_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36477,7 +36482,7 @@ void MessagesManager::fix_new_dialog(Dialog *d, unique_ptr<Message> &&last_datab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::add_dialog_last_database_message(Dialog *d, unique_ptr<Message> &&last_database_message) {
|
bool MessagesManager::add_dialog_last_database_message(Dialog *d, unique_ptr<Message> &&last_database_message) {
|
||||||
CHECK(d != nullptr);
|
CHECK(d != nullptr);
|
||||||
CHECK(last_database_message != nullptr);
|
CHECK(last_database_message != nullptr);
|
||||||
CHECK(last_database_message->left == nullptr);
|
CHECK(last_database_message->left == nullptr);
|
||||||
@ -36523,6 +36528,7 @@ void MessagesManager::add_dialog_last_database_message(Dialog *d, unique_ptr<Mes
|
|||||||
if (need_update_dialog_pos) {
|
if (need_update_dialog_pos) {
|
||||||
update_dialog_pos(d, "add_dialog_last_database_message 5");
|
update_dialog_pos(d, "add_dialog_last_database_message 5");
|
||||||
}
|
}
|
||||||
|
return m != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::update_dialogs_hints(const Dialog *d) {
|
void MessagesManager::update_dialogs_hints(const Dialog *d) {
|
||||||
|
@ -2692,7 +2692,7 @@ class MessagesManager final : public Actor {
|
|||||||
DialogId default_join_group_call_as_dialog_id, DialogId default_send_message_as_dialog_id,
|
DialogId default_join_group_call_as_dialog_id, DialogId default_send_message_as_dialog_id,
|
||||||
bool need_drop_default_send_message_as_dialog_id, bool is_loaded_from_database);
|
bool need_drop_default_send_message_as_dialog_id, bool is_loaded_from_database);
|
||||||
|
|
||||||
void add_dialog_last_database_message(Dialog *d, unique_ptr<Message> &&last_database_message);
|
bool add_dialog_last_database_message(Dialog *d, unique_ptr<Message> &&last_database_message);
|
||||||
|
|
||||||
void fix_dialog_action_bar(const Dialog *d, DialogActionBar *action_bar);
|
void fix_dialog_action_bar(const Dialog *d, DialogActionBar *action_bar);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user