diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 18b276c12..db048aaa9 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -13694,11 +13694,10 @@ std::pair> MessagesManager::search_dialogs(const string vector MessagesManager::sort_dialogs_by_order(const vector &dialog_ids, int32 limit) const { CHECK(!td_->auth_manager_->is_bot()); int64 fake_order = static_cast(dialog_ids.size()) + 1; - auto *list = get_dialog_list(FolderId::main()); - auto dialog_dates = transform(dialog_ids, [this, &fake_order, list](DialogId dialog_id) { + auto dialog_dates = transform(dialog_ids, [this, &fake_order](DialogId dialog_id) { const Dialog *d = get_dialog(dialog_id); CHECK(d != nullptr); - auto order = get_dialog_private_order(list, d); + auto order = get_dialog_base_order(d); if (is_dialog_inited(d) || order != DEFAULT_ORDER) { return DialogDate(order, dialog_id); } @@ -15917,7 +15916,7 @@ vector MessagesManager::get_dialog_notification_settings_exceptions(No if (is_dialog_message_notification_disabled(dialog_id, std::numeric_limits::max())) { continue; } - ordered_dialogs.push_back(DialogDate(get_dialog_private_order(&list.second, d), dialog_id)); + ordered_dialogs.push_back(DialogDate(get_dialog_base_order(d), dialog_id)); } } std::sort(ordered_dialogs.begin(), ordered_dialogs.end()); @@ -28584,7 +28583,7 @@ void MessagesManager::update_dialogs_hints_rating(const Dialog *d) { dialogs_hints_.remove(-d->dialog_id.get()); } else { LOG(INFO) << "Change position of " << d->dialog_id << " in chats search"; - dialogs_hints_.set_rating(-d->dialog_id.get(), -get_dialog_private_order(FolderId::main(), d)); + dialogs_hints_.set_rating(-d->dialog_id.get(), -get_dialog_base_order(d)); } } @@ -28598,11 +28597,21 @@ bool MessagesManager::is_dialog_sponsored(const Dialog *d) const { return d->order == DEFAULT_ORDER && d->dialog_id == sponsored_dialog_id_; } -int64 MessagesManager::get_dialog_private_order(FolderId folder_id, const Dialog *d) const { +int64 MessagesManager::get_dialog_base_order(const Dialog *d) const { if (td_->auth_manager_->is_bot()) { return 0; // to not call get_dialog_list } - return get_dialog_private_order(get_dialog_list(folder_id), d); + if (is_dialog_sponsored(d)) { + return SPONSORED_DIALOG_ORDER; + } + if (d->order == DEFAULT_ORDER) { + return 0; + } + auto pinned_order = get_dialog_pinned_order(FolderId::main(), d->dialog_id); + if (pinned_order != DEFAULT_ORDER) { + return pinned_order; + } + return d->order; } int64 MessagesManager::get_dialog_private_order(const DialogList *list, const Dialog *d) const { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index f296c7d34..4166257a1 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2333,7 +2333,7 @@ class MessagesManager : public Actor { bool is_dialog_sponsored(const Dialog *d) const; - int64 get_dialog_private_order(FolderId folder_id, const Dialog *d) const; + int64 get_dialog_base_order(const Dialog *d) const; int64 get_dialog_private_order(const DialogList *list, const Dialog *d) const;