diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index ebbffbef4..1e0e78af2 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -11761,6 +11761,34 @@ void ContactsManager::register_user_photo(User *u, UserId user_id, const Photo & } } +void ContactsManager::on_update_user_emoji_status(UserId user_id, + tl_object_ptr &&emoji_status_ptr) { + if (!user_id.is_valid()) { + LOG(ERROR) << "Receive invalid " << user_id; + return; + } + + User *u = get_user_force(user_id); + if (u != nullptr) { + int64 emoji_status = 0; + if (emoji_status_ptr != nullptr && emoji_status_ptr->get_id() == telegram_api::emojiStatus::ID) { + emoji_status = static_cast(emoji_status_ptr.get())->document_id_; + } + on_update_user_emoji_status(u, user_id, emoji_status); + update_user(u, user_id); + } else { + LOG(INFO) << "Ignore update user emoji status about unknown " << user_id; + } +} + +void ContactsManager::on_update_user_emoji_status(User *u, UserId user_id, int64 emoji_status) { + if (u->emoji_status != emoji_status) { + u->emoji_status = emoji_status; + LOG(DEBUG) << "Emoji status has changed for " << user_id; + u->is_changed = true; + } +} + void ContactsManager::on_update_user_is_contact(User *u, UserId user_id, bool is_contact, bool is_mutual_contact) { UserId my_id = get_my_id(); if (user_id == my_id) { diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 16b2b98ca..cc1d9cd81 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -178,6 +178,7 @@ class ContactsManager final : public Actor { void on_update_user_name(UserId user_id, string &&first_name, string &&last_name, string &&username); void on_update_user_phone_number(UserId user_id, string &&phone_number); void on_update_user_photo(UserId user_id, tl_object_ptr &&photo_ptr); + void on_update_user_emoji_status(UserId user_id, tl_object_ptr &&emoji_status_ptr); void on_update_user_online(UserId user_id, tl_object_ptr &&status); void on_update_user_local_was_online(UserId user_id, int32 local_was_online); void on_update_user_is_blocked(UserId user_id, bool is_blocked); @@ -1256,6 +1257,7 @@ class ContactsManager final : public Actor { void on_update_user_phone_number(User *u, UserId user_id, string &&phone_number); void on_update_user_photo(User *u, UserId user_id, tl_object_ptr &&photo, const char *source); + void on_update_user_emoji_status(User *u, UserId user_id, int64 emoji_status); void on_update_user_is_contact(User *u, UserId user_id, bool is_contact, bool is_mutual_contact); void on_update_user_online(User *u, UserId user_id, tl_object_ptr &&status); void on_update_user_local_was_online(User *u, UserId user_id, int32 local_was_online); diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index d4326002b..b6ab0a2cc 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -3165,11 +3165,15 @@ void UpdatesManager::on_update(tl_object_ptr upda } void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { - // TODO update->previous_, update->date_ td_->contacts_manager_->on_update_user_photo(UserId(update->user_id_), std::move(update->photo_)); promise.set_value(Unit()); } +void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { + td_->contacts_manager_->on_update_user_emoji_status(UserId(update->user_id_), std::move(update->emoji_status_)); + promise.set_value(Unit()); +} + void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { td_->messages_manager_->on_update_dialog_is_blocked(DialogId(update->peer_id_), update->blocked_); promise.set_value(Unit()); @@ -3578,10 +3582,6 @@ void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { - promise.set_value(Unit()); -} - void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { promise.set_value(Unit()); } diff --git a/td/telegram/UpdatesManager.h b/td/telegram/UpdatesManager.h index 17f97560e..2e50c771a 100644 --- a/td/telegram/UpdatesManager.h +++ b/td/telegram/UpdatesManager.h @@ -420,6 +420,7 @@ class UpdatesManager final : public Actor { void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); + void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); @@ -540,8 +541,6 @@ class UpdatesManager final : public Actor { void on_update(tl_object_ptr update, Promise &&promise); - void on_update(tl_object_ptr update, Promise &&promise); - void on_update(tl_object_ptr update, Promise &&promise); };