From 9a5f6c5dd550d727bd8ed647f47e1f10c95b0b80 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 28 May 2020 03:08:00 +0300 Subject: [PATCH] Update dialog filter order after receiving them from server. GitOrigin-RevId: 9ef943eb5faaf36cfe960e91a6daba6d5804a57d --- td/telegram/MessagesManager.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 698919756..52d455785 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -14311,6 +14311,12 @@ void MessagesManager::on_get_dialog_filters(Result left_old_server_dialog_filter_ids; + for (auto &filter : server_dialog_filters_) { + if (old_server_dialog_filters.count(filter->dialog_filter_id) == 0) { + left_old_server_dialog_filter_ids.push_back(filter->dialog_filter_id); + } + } for (auto &old_server_filter : old_server_dialog_filters) { auto dialog_filter_id = old_server_filter.first; // deleted filter @@ -14323,8 +14329,23 @@ void MessagesManager::on_get_dialog_filters(Result new_server_dialog_filter_ids = + transform(new_server_dialog_filters, [](auto &filter) { return filter->dialog_filter_id; }); + CHECK(new_server_dialog_filter_ids.size() >= left_old_server_dialog_filter_ids.size()); + new_server_dialog_filter_ids.resize(left_old_server_dialog_filter_ids.size()); + return new_server_dialog_filter_ids != left_old_server_dialog_filter_ids; + }(); + if (is_order_changed) { // if order is changed from this and other clients, prefer order from another client + vector new_dialog_filter_order; + for (auto &new_server_filter : new_server_dialog_filters) { + auto dialog_filter_id = new_server_filter->dialog_filter_id; + if (get_dialog_filter(dialog_filter_id) != nullptr) { + new_dialog_filter_order.push_back(dialog_filter_id); + } + } + set_dialog_filters_order(new_dialog_filter_order); + } server_dialog_filters_ = std::move(new_server_dialog_filters); send_update_chat_filters();