From 54b7b0f6e30b8a87b1d2aa5a31f669e81f533ec1 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 9 Feb 2021 17:51:20 +0300 Subject: [PATCH] Return message ttl for ordinary self-destructing messages. --- td/telegram/MessagesManager.cpp | 14 +++++++++----- td/telegram/MessagesManager.h | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index ddd671017..16d24f309 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -11943,7 +11943,7 @@ void MessagesManager::ttl_register_message(DialogId dialog_id, const Message *m, ttl_update_timeout(now); } -void MessagesManager::ttl_period_register_message(DialogId dialog_id, const Message *m, int32 unix_time) { +void MessagesManager::ttl_period_register_message(DialogId dialog_id, const Message *m, double server_time) { CHECK(m != nullptr); CHECK(m->ttl_period != 0); CHECK(!m->message_id.is_scheduled()); @@ -11953,7 +11953,7 @@ void MessagesManager::ttl_period_register_message(DialogId dialog_id, const Mess auto it = it_flag.first; auto now = Time::now(); - ttl_heap_.insert(now + (m->date + m->ttl_period - unix_time), it->as_heap_node()); + ttl_heap_.insert(now + (m->date + m->ttl_period - server_time), it->as_heap_node()); ttl_update_timeout(now); } @@ -22613,6 +22613,10 @@ tl_object_ptr MessagesManager::get_message_object(DialogId dial } else { ttl_expires_in = m->ttl; } + if (ttl == 0 && m->ttl_period != 0) { + ttl = m->ttl_period; + ttl_expires_in = max(m->date + m->ttl_period - G()->server_time(), 1e-3); + } } else { ttl = 0; } @@ -31996,15 +32000,15 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq } if (message->ttl_period > 0) { CHECK(dialog_id.get_type() != DialogType::SecretChat); - auto unix_time = G()->unix_time(); - if (message->date + message->ttl_period <= unix_time) { + auto server_time = G()->server_time(); + if (message->date + message->ttl_period <= server_time) { LOG(INFO) << "Can't add " << message_id << " with expired TTL period to " << dialog_id << " from " << source; delete_message_from_database(d, message_id, message.get(), true); debug_add_message_to_dialog_fail_reason_ = "delete expired by TTL period message"; d->being_added_message_id = MessageId(); return nullptr; } else { - ttl_period_register_message(dialog_id, message.get(), unix_time); + ttl_period_register_message(dialog_id, message.get(), server_time); } } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 472a80f9d..647dd346b 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2600,7 +2600,7 @@ class MessagesManager : public Actor { bool ttl_on_open(Dialog *d, Message *m, double now, bool is_local_read); void ttl_register_message(DialogId dialog_id, const Message *m, double now); void ttl_unregister_message(DialogId dialog_id, const Message *m, const char *source); - void ttl_period_register_message(DialogId dialog_id, const Message *m, int32 unix_time); + void ttl_period_register_message(DialogId dialog_id, const Message *m, double server_time); void ttl_period_unregister_message(DialogId dialog_id, const Message *m); void ttl_loop(double now); void ttl_update_timeout(double now);