Better fix for updateChatIsPinned.

GitOrigin-RevId: 5ac58bf88cc61daada427f137335e4d14b4c33f9
This commit is contained in:
levlam 2019-02-22 03:29:21 +03:00
parent 559aca6cec
commit 64150108b8

View File

@ -9943,19 +9943,19 @@ void MessagesManager::set_dialog_is_pinned(DialogId dialog_id, bool is_pinned) {
void MessagesManager::set_dialog_is_pinned(Dialog *d, bool is_pinned) { void MessagesManager::set_dialog_is_pinned(Dialog *d, bool is_pinned) {
CHECK(d != nullptr); CHECK(d != nullptr);
bool was_pinned = d->pinned_order != DEFAULT_ORDER; bool was_pinned = d->pinned_order != DEFAULT_ORDER;
auto old_order = DialogDate(d->order, d->dialog_id) <= last_dialog_date_ ? d->order : 0;
d->pinned_order = is_pinned ? get_next_pinned_dialog_order() : DEFAULT_ORDER; d->pinned_order = is_pinned ? get_next_pinned_dialog_order() : DEFAULT_ORDER;
update_dialog_pos(d, false, "set_dialog_is_pinned", false);
auto new_order = DialogDate(d->order, d->dialog_id) <= last_dialog_date_ ? d->order : 0;
on_dialog_updated(d->dialog_id, "set_dialog_is_pinned"); on_dialog_updated(d->dialog_id, "set_dialog_is_pinned");
if (is_pinned != was_pinned) { if (is_pinned != was_pinned) {
LOG(INFO) << "Set " << d->dialog_id << " is pinned to " << is_pinned; LOG(INFO) << "Set " << d->dialog_id << " is pinned to " << is_pinned;
}
if (old_order != new_order) {
LOG_CHECK(d->is_update_new_chat_sent) << "Wrong " << d->dialog_id << " in set_dialog_is_pinned"; LOG_CHECK(d->is_update_new_chat_sent) << "Wrong " << d->dialog_id << " in set_dialog_is_pinned";
update_dialog_pos(d, false, "set_dialog_is_pinned", false);
DialogDate dialog_date(d->order, d->dialog_id);
send_closure(G()->td(), &Td::send_update, send_closure(G()->td(), &Td::send_update,
make_tl_object<td_api::updateChatIsPinned>(d->dialog_id.get(), is_pinned, new_order)); make_tl_object<td_api::updateChatIsPinned>(d->dialog_id.get(), is_pinned,
dialog_date <= last_dialog_date_ ? d->order : 0));
} else {
update_dialog_pos(d, false, "set_dialog_is_pinned 2");
} }
} }