diff --git a/td/telegram/CallActor.cpp b/td/telegram/CallActor.cpp index a54ec915f..e0a247aa7 100644 --- a/td/telegram/CallActor.cpp +++ b/td/telegram/CallActor.cpp @@ -924,12 +924,16 @@ void CallActor::flush_call_state() { } call_state_need_flush_ = false; - // TODO can't call const function - // send_closure(G()->user_manager(), &UserManager::get_user_id_object, user_id_, "flush_call_state"); - send_closure(G()->td(), &Td::send_update, - make_tl_object(make_tl_object( - local_call_id_.get(), is_outgoing_ ? user_id_.get() : call_admin_user_id_.get(), is_outgoing_, - is_video_, call_state_.get_call_state_object()))); + auto peer_id = is_outgoing_ ? user_id_ : call_admin_user_id_; + auto update = td_api::make_object(td_api::make_object( + local_call_id_.get(), 0, is_outgoing_, is_video_, call_state_.get_call_state_object())); + send_closure(G()->user_manager(), &UserManager::get_user_id_object_async, peer_id, + [td_actor = G()->td(), update = std::move(update)](Result r_user_id) mutable { + if (r_user_id.is_ok()) { + update->call_->user_id_ = r_user_id.ok(); + send_closure(td_actor, &Td::send_update, std::move(update)); + } + }); } } diff --git a/td/telegram/UserManager.cpp b/td/telegram/UserManager.cpp index 273148508..c9d03f137 100644 --- a/td/telegram/UserManager.cpp +++ b/td/telegram/UserManager.cpp @@ -7844,6 +7844,10 @@ int64 UserManager::get_user_id_object(UserId user_id, const char *source) const return user_id.get(); } +void UserManager::get_user_id_object_async(UserId user_id, Promise &&promise) { + promise.set_value(get_user_id_object(user_id, "get_user_id_object_async")); +} + td_api::object_ptr UserManager::get_user_object(UserId user_id) const { return get_user_object(user_id, get_user(user_id)); } diff --git a/td/telegram/UserManager.h b/td/telegram/UserManager.h index 0e2489668..261540874 100644 --- a/td/telegram/UserManager.h +++ b/td/telegram/UserManager.h @@ -451,6 +451,8 @@ class UserManager final : public Actor { int64 get_user_id_object(UserId user_id, const char *source) const; + void get_user_id_object_async(UserId user_id, Promise &&promise); + td_api::object_ptr get_user_object(UserId user_id) const; vector get_user_ids_object(const vector &user_ids, const char *source) const;