diff --git a/td/telegram/AuthManager.cpp b/td/telegram/AuthManager.cpp index 13a925e96..e506e691d 100644 --- a/td/telegram/AuthManager.cpp +++ b/td/telegram/AuthManager.cpp @@ -311,6 +311,11 @@ AuthManager::AuthManager(int32 api_id, const string &api_hash, ActorShared<> par if (is_bot_str == "true") { is_bot_ = true; } + auto my_id = ContactsManager::load_my_id(); + if (my_id.is_valid()) { + // just in case + G()->shared_config().set_option_integer("my_id", my_id.get()); + } update_state(State::Ok); } else if (auth_str == "logout") { update_state(State::LoggingOut); @@ -716,8 +721,9 @@ void AuthManager::on_authorization(tl_object_ptrtd_db()->get_binlog_pmc()->set("auth_is_bot", "true"); } G()->td_db()->get_binlog_pmc()->set("auth", "ok"); - update_state(State::Ok); + state_ = State::Ok; td->contacts_manager_->on_get_user(std::move(auth->user_), true); + update_state(State::Ok, true); if (!td->contacts_manager_->get_my_id("on_authorization").is_valid()) { LOG(ERROR) << "Server doesn't send proper authorization"; if (query_id_ != 0) { diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index d084c4cd3..a71a74287 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -2322,23 +2322,8 @@ const CSlice ContactsManager::INVITE_LINK_URLS[3] = {"t.me/joinchat/", "telegram ContactsManager::ContactsManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) { upload_profile_photo_callback_ = std::make_shared(); - auto id_string = G()->td_db()->get_binlog_pmc()->get("my_id"); - if (!id_string.empty()) { - UserId new_my_id(to_integer(id_string)); - if (new_my_id.is_valid()) { - my_id_ = new_my_id; - G()->shared_config().set_option_integer("my_id", my_id_.get()); - } else { - new_my_id = UserId(to_integer(Slice(id_string).substr(5))); - if (new_my_id.is_valid()) { - my_id_ = new_my_id; - G()->td_db()->get_binlog_pmc()->set("my_id", to_string(my_id_.get())); - G()->shared_config().set_option_integer("my_id", my_id_.get()); - } else { - LOG(ERROR) << "Wrong my id = \"" << id_string << "\" stored in database"; - } - } - } + my_id_ = load_my_id(); + if (G()->parameters().use_chat_info_db) { auto next_contacts_sync_date_string = G()->td_db()->get_binlog_pmc()->get("next_contacts_sync_date"); if (!next_contacts_sync_date_string.empty()) { @@ -2365,6 +2350,25 @@ void ContactsManager::tear_down() { parent_.reset(); } +UserId ContactsManager::load_my_id() { + auto id_string = G()->td_db()->get_binlog_pmc()->get("my_id"); + if (!id_string.empty()) { + UserId my_id(to_integer(id_string)); + if (my_id.is_valid()) { + return my_id; + } + + my_id = UserId(to_integer(Slice(id_string).substr(5))); + if (my_id.is_valid()) { + G()->td_db()->get_binlog_pmc()->set("my_id", to_string(my_id.get())); + return my_id; + } + + LOG(ERROR) << "Wrong my id = \"" << id_string << "\" stored in database"; + } + return UserId(); +} + void ContactsManager::on_user_online_timeout_callback(void *contacts_manager_ptr, int64 user_id_long) { auto contacts_manager = static_cast(contacts_manager_ptr); UserId user_id(narrow_cast(user_id_long)); diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index ab05b479a..51b8a2c68 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -59,6 +59,8 @@ class ContactsManager : public Actor { public: ContactsManager(Td *td, ActorShared<> parent); + static UserId load_my_id(); + static UserId get_user_id(const tl_object_ptr &user); static ChatId get_chat_id(const tl_object_ptr &chat); static ChannelId get_channel_id(const tl_object_ptr &chat); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 4108f54a7..059e33b68 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -4004,8 +4004,8 @@ void Td::on_config_option_updated(const string &name) { } else if (is_internal_config_option(name)) { return; } - send_closure(actor_id(this), &Td::send_update, - make_tl_object(name, G()->shared_config().get_option_value(name))); + // send_closure was already used in the callback + send_update(make_tl_object(name, G()->shared_config().get_option_value(name))); } tl_object_ptr Td::get_connection_state_object(StateManager::State state) { @@ -4404,7 +4404,7 @@ Status Td::init(DbKey key) { send_closure(G()->td(), &Td::on_config_option_updated, name); } }; - send_update( + send_closure(actor_id(this), &Td::send_update, make_tl_object("version", make_tl_object(tdlib_version))); G()->set_shared_config(