From 58c99ed63a5a4b3a187da6d833c43faab5fc0f10 Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 19 Jul 2021 04:27:44 +0300 Subject: [PATCH] Don't ignore forcely loaded after close users and chats. --- td/telegram/ContactsManager.cpp | 36 ++++++++++++++++++--------------- td/telegram/ContactsManager.h | 8 ++++---- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 871dc1956..3f8a70988 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -8411,13 +8411,14 @@ void ContactsManager::load_user_from_database_impl(UserId user_id, Promise G()->td_db()->get_sqlite_pmc()->get(get_user_database_key(user_id), PromiseCreator::lambda([user_id](string value) { send_closure(G()->contacts_manager(), &ContactsManager::on_load_user_from_database, user_id, - std::move(value)); + std::move(value), false); })); } } -void ContactsManager::on_load_user_from_database(UserId user_id, string value) { - if (G()->close_flag()) { +void ContactsManager::on_load_user_from_database(UserId user_id, string value, bool force) { + if (G()->close_flag() && !force) { + // the user is in Binlog and will be saved after restart return; } @@ -8549,7 +8550,7 @@ ContactsManager::User *ContactsManager::get_user_force_impl(UserId user_id) { } LOG(INFO) << "Trying to load " << user_id << " from database"; - on_load_user_from_database(user_id, G()->td_db()->get_sqlite_sync_pmc()->get(get_user_database_key(user_id))); + on_load_user_from_database(user_id, G()->td_db()->get_sqlite_sync_pmc()->get(get_user_database_key(user_id)), true); return get_user(user_id); } @@ -8704,13 +8705,14 @@ void ContactsManager::load_chat_from_database_impl(ChatId chat_id, Promise G()->td_db()->get_sqlite_pmc()->get(get_chat_database_key(chat_id), PromiseCreator::lambda([chat_id](string value) { send_closure(G()->contacts_manager(), &ContactsManager::on_load_chat_from_database, chat_id, - std::move(value)); + std::move(value), false); })); } } -void ContactsManager::on_load_chat_from_database(ChatId chat_id, string value) { - if (G()->close_flag()) { +void ContactsManager::on_load_chat_from_database(ChatId chat_id, string value, bool force) { + if (G()->close_flag() && !force) { + // the chat is in Binlog and will be saved after restart return; } @@ -8786,7 +8788,7 @@ ContactsManager::Chat *ContactsManager::get_chat_force(ChatId chat_id) { } LOG(INFO) << "Trying to load " << chat_id << " from database"; - on_load_chat_from_database(chat_id, G()->td_db()->get_sqlite_sync_pmc()->get(get_chat_database_key(chat_id))); + on_load_chat_from_database(chat_id, G()->td_db()->get_sqlite_sync_pmc()->get(get_chat_database_key(chat_id)), true); return get_chat(chat_id); } @@ -8942,13 +8944,14 @@ void ContactsManager::load_channel_from_database_impl(ChannelId channel_id, Prom G()->td_db()->get_sqlite_pmc()->get( get_channel_database_key(channel_id), PromiseCreator::lambda([channel_id](string value) { send_closure(G()->contacts_manager(), &ContactsManager::on_load_channel_from_database, channel_id, - std::move(value)); + std::move(value), false); })); } } -void ContactsManager::on_load_channel_from_database(ChannelId channel_id, string value) { - if (G()->close_flag()) { +void ContactsManager::on_load_channel_from_database(ChannelId channel_id, string value, bool force) { + if (G()->close_flag() && !force) { + // the channel is in Binlog and will be saved after restart return; } @@ -9039,7 +9042,7 @@ ContactsManager::Channel *ContactsManager::get_channel_force(ChannelId channel_i LOG(INFO) << "Trying to load " << channel_id << " from database"; on_load_channel_from_database(channel_id, - G()->td_db()->get_sqlite_sync_pmc()->get(get_channel_database_key(channel_id))); + G()->td_db()->get_sqlite_sync_pmc()->get(get_channel_database_key(channel_id)), true); return get_channel(channel_id); } @@ -9197,13 +9200,14 @@ void ContactsManager::load_secret_chat_from_database_impl(SecretChatId secret_ch G()->td_db()->get_sqlite_pmc()->get( get_secret_chat_database_key(secret_chat_id), PromiseCreator::lambda([secret_chat_id](string value) { send_closure(G()->contacts_manager(), &ContactsManager::on_load_secret_chat_from_database, secret_chat_id, - std::move(value)); + std::move(value), false); })); } } -void ContactsManager::on_load_secret_chat_from_database(SecretChatId secret_chat_id, string value) { - if (G()->close_flag()) { +void ContactsManager::on_load_secret_chat_from_database(SecretChatId secret_chat_id, string value, bool force) { + if (G()->close_flag() && !force) { + // the secret chat is in Binlog and will be saved after restart return; } @@ -9280,7 +9284,7 @@ ContactsManager::SecretChat *ContactsManager::get_secret_chat_force(SecretChatId LOG(INFO) << "Trying to load " << secret_chat_id << " from database"; on_load_secret_chat_from_database( - secret_chat_id, G()->td_db()->get_sqlite_sync_pmc()->get(get_secret_chat_database_key(secret_chat_id))); + secret_chat_id, G()->td_db()->get_sqlite_sync_pmc()->get(get_secret_chat_database_key(secret_chat_id)), true); return get_secret_chat(secret_chat_id); } diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 9a6ad61b4..f455d8e8c 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -1268,7 +1268,7 @@ class ContactsManager final : public Actor { void on_save_user_to_database(UserId user_id, bool success); void load_user_from_database(User *u, UserId user_id, Promise promise); void load_user_from_database_impl(UserId user_id, Promise promise); - void on_load_user_from_database(UserId user_id, string value); + void on_load_user_from_database(UserId user_id, string value, bool force); void save_chat(Chat *c, ChatId chat_id, bool from_binlog); static string get_chat_database_key(ChatId chat_id); @@ -1278,7 +1278,7 @@ class ContactsManager final : public Actor { void on_save_chat_to_database(ChatId chat_id, bool success); void load_chat_from_database(Chat *c, ChatId chat_id, Promise promise); void load_chat_from_database_impl(ChatId chat_id, Promise promise); - void on_load_chat_from_database(ChatId chat_id, string value); + void on_load_chat_from_database(ChatId chat_id, string value, bool force); void save_channel(Channel *c, ChannelId channel_id, bool from_binlog); static string get_channel_database_key(ChannelId channel_id); @@ -1288,7 +1288,7 @@ class ContactsManager final : public Actor { void on_save_channel_to_database(ChannelId channel_id, bool success); void load_channel_from_database(Channel *c, ChannelId channel_id, Promise promise); void load_channel_from_database_impl(ChannelId channel_id, Promise promise); - void on_load_channel_from_database(ChannelId channel_id, string value); + void on_load_channel_from_database(ChannelId channel_id, string value, bool force); void save_secret_chat(SecretChat *c, SecretChatId secret_chat_id, bool from_binlog); static string get_secret_chat_database_key(SecretChatId secret_chat_id); @@ -1298,7 +1298,7 @@ class ContactsManager final : public Actor { void on_save_secret_chat_to_database(SecretChatId secret_chat_id, bool success); void load_secret_chat_from_database(SecretChat *c, SecretChatId secret_chat_id, Promise promise); void load_secret_chat_from_database_impl(SecretChatId secret_chat_id, Promise promise); - void on_load_secret_chat_from_database(SecretChatId secret_chat_id, string value); + void on_load_secret_chat_from_database(SecretChatId secret_chat_id, string value, bool force); void save_user_full(const UserFull *user_full, UserId user_id); static string get_user_full_database_key(UserId user_id);