From f92d108319951a29869f1397331d3078a488f383 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 2 May 2023 18:40:22 +0300 Subject: [PATCH] Add OrderedMessages::find_messages_by_date. --- td/telegram/MessagesManager.cpp | 30 +++++++++--------------------- td/telegram/MessagesManager.h | 5 ++--- td/telegram/OrderedMessage.cpp | 24 ++++++++++++++++++++++++ td/telegram/OrderedMessage.h | 5 +++++ 4 files changed, 40 insertions(+), 24 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index be7286ad2..3c18f469f 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -11823,8 +11823,7 @@ void MessagesManager::delete_dialog_messages_by_date(DialogId dialog_id, int32 m // TODO delete in database by dates - vector message_ids; - find_messages_by_date(d, d->ordered_messages.messages_.get(), min_date, max_date, message_ids); + auto message_ids = d->ordered_messages.find_messages_by_date(min_date, max_date, get_get_message_date(d)); delete_dialog_messages(d, message_ids, false, DELETE_MESSAGE_USER_REQUEST_SOURCE); @@ -22867,6 +22866,14 @@ void MessagesManager::on_get_affected_history(DialogId dialog_id, AffectedHistor } } +std::function MessagesManager::get_get_message_date(const Dialog *d) const { + return [this, d](MessageId message_id) { + auto *m = get_message(d, message_id); + CHECK(m != nullptr); + return m->date; + }; +} + MessageId MessagesManager::find_message_by_date(const Dialog *d, const OrderedMessage *ordered_message, int32 date) { if (ordered_message == nullptr) { return MessageId(); @@ -22886,25 +22893,6 @@ MessageId MessagesManager::find_message_by_date(const Dialog *d, const OrderedMe return ordered_message->message_id; } -void MessagesManager::find_messages_by_date(const Dialog *d, const OrderedMessage *ordered_message, int32 min_date, - int32 max_date, vector &message_ids) { - if (ordered_message == nullptr) { - return; - } - - const Message *m = get_message(d, ordered_message->message_id); - CHECK(m != nullptr); - if (m->date >= min_date) { - find_messages_by_date(d, ordered_message->left.get(), min_date, max_date, message_ids); - if (m->date <= max_date) { - message_ids.push_back(m->message_id); - } - } - if (m->date <= max_date) { - find_messages_by_date(d, ordered_message->right.get(), min_date, max_date, message_ids); - } -} - void MessagesManager::on_get_dialog_message_by_date_from_database(DialogId dialog_id, int32 date, int64 random_id, Result result, Promise promise) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 3bc7adfb6..2444779b8 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2180,10 +2180,9 @@ class MessagesManager final : public Actor { static vector find_dialog_messages(const Dialog *d, const std::function &condition); - static MessageId find_message_by_date(const Dialog *d, const OrderedMessage *ordered_message, int32 date); + std::function get_get_message_date(const Dialog *d) const; - static void find_messages_by_date(const Dialog *d, const OrderedMessage *ordered_message, int32 min_date, - int32 max_date, vector &message_ids); + static MessageId find_message_by_date(const Dialog *d, const OrderedMessage *ordered_message, int32 date); 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 57e48dded..560c27a02 100644 --- a/td/telegram/OrderedMessage.cpp +++ b/td/telegram/OrderedMessage.cpp @@ -119,4 +119,28 @@ vector OrderedMessages::find_newer_messages(MessageId min_message_id) return message_ids; } +void do_find_messages_by_date(const OrderedMessage *ordered_message, int32 min_date, int32 max_date, + const std::function &get_date, vector &message_ids) { + if (ordered_message == nullptr) { + return; + } + + auto date = get_date(ordered_message->message_id); + if (date >= min_date) { + do_find_messages_by_date(ordered_message->left.get(), min_date, max_date, get_date, message_ids); + if (date <= max_date) { + message_ids.push_back(ordered_message->message_id); + } + } + if (date <= max_date) { + do_find_messages_by_date(ordered_message->right.get(), min_date, max_date, get_date, message_ids); + } +} + +vector OrderedMessages::find_messages_by_date(int32 min_date, int32 max_date, + const std::function &get_date) const { + vector message_ids; + do_find_messages_by_date(messages_.get(), min_date, max_date, get_date, message_ids); + return message_ids; +} } // namespace td diff --git a/td/telegram/OrderedMessage.h b/td/telegram/OrderedMessage.h index 87f87ff6a..77f7d640b 100644 --- a/td/telegram/OrderedMessage.h +++ b/td/telegram/OrderedMessage.h @@ -10,6 +10,8 @@ #include "td/utils/common.h" +#include + namespace td { struct OrderedMessage { @@ -34,6 +36,9 @@ struct OrderedMessages { vector find_older_messages(MessageId max_message_id) const; vector find_newer_messages(MessageId min_message_id) const; + + vector find_messages_by_date(int32 min_date, int32 max_date, + const std::function &get_date) const; }; } // namespace td