Postpone authorizationStateReady if my_id isn't known.
GitOrigin-RevId: afa8d365f527672dc53424b03fff775a28569189
This commit is contained in:
parent
9fb92d8293
commit
9633b50112
@ -317,11 +317,13 @@ AuthManager::AuthManager(int32 api_id, const string &api_hash, ActorShared<> par
|
|||||||
if (my_id.is_valid()) {
|
if (my_id.is_valid()) {
|
||||||
// just in case
|
// just in case
|
||||||
G()->shared_config().set_option_integer("my_id", my_id.get());
|
G()->shared_config().set_option_integer("my_id", my_id.get());
|
||||||
|
update_state(State::Ok);
|
||||||
} else {
|
} else {
|
||||||
LOG(ERROR) << "Restore unknown my_id";
|
LOG(ERROR) << "Restore unknown my_id";
|
||||||
ContactsManager::send_get_me_query(G()->td().get_actor_unsafe(), Auto());
|
ContactsManager::send_get_me_query(
|
||||||
|
G()->td().get_actor_unsafe(),
|
||||||
|
PromiseCreator::lambda([this](Result<Unit> result) { update_state(State::Ok); }));
|
||||||
}
|
}
|
||||||
update_state(State::Ok);
|
|
||||||
} else if (auth_str == "logout") {
|
} else if (auth_str == "logout") {
|
||||||
update_state(State::LoggingOut);
|
update_state(State::LoggingOut);
|
||||||
} else {
|
} else {
|
||||||
@ -376,8 +378,12 @@ tl_object_ptr<td_api::AuthorizationState> AuthManager::get_authorization_state_o
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AuthManager::get_state(uint64 query_id) {
|
void AuthManager::get_state(uint64 query_id) {
|
||||||
|
if (state_ == State::None) {
|
||||||
|
pending_get_authorization_state_requests_.push_back(query_id);
|
||||||
|
} else {
|
||||||
send_closure(G()->td(), &Td::send_result, query_id, get_authorization_state_object(state_));
|
send_closure(G()->td(), &Td::send_result, query_id, get_authorization_state_object(state_));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AuthManager::check_bot_token(uint64 query_id, string bot_token) {
|
void AuthManager::check_bot_token(uint64 query_id, string bot_token) {
|
||||||
if (state_ != State::WaitPhoneNumber && state_ != State::Ok) {
|
if (state_ != State::WaitPhoneNumber && state_ != State::Ok) {
|
||||||
@ -817,6 +823,13 @@ void AuthManager::update_state(State new_state, bool force) {
|
|||||||
state_ = new_state;
|
state_ = new_state;
|
||||||
send_closure(G()->td(), &Td::send_update,
|
send_closure(G()->td(), &Td::send_update,
|
||||||
make_tl_object<td_api::updateAuthorizationState>(get_authorization_state_object(state_)));
|
make_tl_object<td_api::updateAuthorizationState>(get_authorization_state_object(state_)));
|
||||||
|
|
||||||
|
if (!pending_get_authorization_state_requests_.empty()) {
|
||||||
|
auto query_ids = std::move(pending_get_authorization_state_requests_);
|
||||||
|
for (auto query_id : query_ids) {
|
||||||
|
send_closure(G()->td(), &Td::send_result, query_id, get_authorization_state_object(state_));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -168,6 +168,8 @@ class AuthManager : public NetActor {
|
|||||||
uint64 net_query_id_ = 0;
|
uint64 net_query_id_ = 0;
|
||||||
NetQueryType net_query_type_;
|
NetQueryType net_query_type_;
|
||||||
|
|
||||||
|
vector<uint64> pending_get_authorization_state_requests_;
|
||||||
|
|
||||||
void on_new_query(uint64 query_id);
|
void on_new_query(uint64 query_id);
|
||||||
void on_query_error(Status status);
|
void on_query_error(Status status);
|
||||||
void on_query_error(uint64 id, Status status);
|
void on_query_error(uint64 id, Status status);
|
||||||
|
@ -752,8 +752,7 @@ class GetMeRequest : public RequestActor<> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GetMeRequest(ActorShared<Td> td, uint64 request_id)
|
GetMeRequest(ActorShared<Td> td, uint64 request_id) : RequestActor(std::move(td), request_id) {
|
||||||
: RequestActor(std::move(td), request_id) {
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -4421,7 +4420,8 @@ Status Td::init(DbKey key) {
|
|||||||
send_closure(G()->td(), &Td::on_config_option_updated, name);
|
send_closure(G()->td(), &Td::on_config_option_updated, name);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
send_closure(actor_id(this), &Td::send_update,
|
send_closure(
|
||||||
|
actor_id(this), &Td::send_update,
|
||||||
make_tl_object<td_api::updateOption>("version", make_tl_object<td_api::optionValueString>(tdlib_version)));
|
make_tl_object<td_api::updateOption>("version", make_tl_object<td_api::optionValueString>(tdlib_version)));
|
||||||
|
|
||||||
G()->set_shared_config(
|
G()->set_shared_config(
|
||||||
|
Reference in New Issue
Block a user