diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index a1c5da614..be7286ad2 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -9811,8 +9811,7 @@ void MessagesManager::on_get_messages(vector message_ids; - find_newer_messages(d->ordered_messages.messages_.get(), max_message_id, message_ids); + auto message_ids = d->ordered_messages.find_newer_messages(max_message_id); if (message_ids.empty()) { return false; } @@ -11625,21 +11624,6 @@ vector MessagesManager::find_dialog_messages(const Dialog *d, return message_ids; } -void MessagesManager::find_newer_messages(const OrderedMessage *ordered_message, MessageId min_message_id, - vector &message_ids) { - if (ordered_message == nullptr) { - return; - } - - if (ordered_message->message_id > min_message_id) { - find_newer_messages(ordered_message->left.get(), min_message_id, message_ids); - - message_ids.push_back(ordered_message->message_id); - } - - find_newer_messages(ordered_message->right.get(), min_message_id, message_ids); -} - void MessagesManager::find_unloadable_messages(const Dialog *d, int32 unload_before_date, const OrderedMessage *ordered_message, vector &message_ids, bool &has_left_to_unload_messages) const { @@ -15053,8 +15037,7 @@ void MessagesManager::remove_dialog_newer_messages(Dialog *d, MessageId from_mes } invalidate_message_indexes(d); - vector to_delete_message_ids; - find_newer_messages(d->ordered_messages.messages_.get(), from_message_id, to_delete_message_ids); + auto to_delete_message_ids = d->ordered_messages.find_newer_messages(from_message_id); td::remove_if(to_delete_message_ids, [](MessageId message_id) { return message_id.is_yet_unsent(); }); if (!to_delete_message_ids.empty()) { LOG(INFO) << "Delete " << format::as_array(to_delete_message_ids) << " newer than " << from_message_id << " in " diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 8603e212d..3bc7adfb6 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2185,9 +2185,6 @@ class MessagesManager final : public Actor { static void find_messages_by_date(const Dialog *d, const OrderedMessage *ordered_message, int32 min_date, int32 max_date, vector &message_ids); - static void find_newer_messages(const OrderedMessage *ordered_message, MessageId min_message_id, - vector &message_ids); - void find_unloadable_messages(const Dialog *d, int32 unload_before_date, const OrderedMessage *ordered_message, vector &message_ids, bool &has_left_to_unload_messages) const; diff --git a/td/telegram/OrderedMessage.cpp b/td/telegram/OrderedMessage.cpp index 55989087f..57e48dded 100644 --- a/td/telegram/OrderedMessage.cpp +++ b/td/telegram/OrderedMessage.cpp @@ -98,4 +98,25 @@ vector OrderedMessages::find_older_messages(MessageId max_message_id) return message_ids; } +static void do_find_newer_messages(const OrderedMessage *ordered_message, MessageId min_message_id, + vector &message_ids) { + if (ordered_message == nullptr) { + return; + } + + if (ordered_message->message_id > min_message_id) { + do_find_newer_messages(ordered_message->left.get(), min_message_id, message_ids); + + message_ids.push_back(ordered_message->message_id); + } + + do_find_newer_messages(ordered_message->right.get(), min_message_id, message_ids); +} + +vector OrderedMessages::find_newer_messages(MessageId min_message_id) const { + vector message_ids; + do_find_newer_messages(messages_.get(), min_message_id, message_ids); + return message_ids; +} + } // namespace td diff --git a/td/telegram/OrderedMessage.h b/td/telegram/OrderedMessage.h index 2af59cff5..87f87ff6a 100644 --- a/td/telegram/OrderedMessage.h +++ b/td/telegram/OrderedMessage.h @@ -32,6 +32,8 @@ struct OrderedMessages { void erase(MessageId message_id); vector find_older_messages(MessageId max_message_id) const; + + vector find_newer_messages(MessageId min_message_id) const; }; } // namespace td