Better support for GEO_LIVE_PENDING push notifications.

GitOrigin-RevId: 7fb392ec0e6471a09a3b325db48531700204c039
This commit is contained in:
levlam 2019-12-14 01:57:17 +03:00
parent 1dd4e1a767
commit fa04e668f6
3 changed files with 26 additions and 4 deletions

View File

@ -5701,15 +5701,34 @@ void MessagesManager::on_update_live_location_viewed(FullMessageId full_message_
return; return;
} }
auto active_live_locations = get_active_live_location_messages(Auto()); auto active_live_location_message_ids = get_active_live_location_messages(Auto());
if (!td::contains(active_live_locations, full_message_id)) { if (!td::contains(active_live_location_message_ids, full_message_id)) {
LOG(DEBUG) << "Can't find " << full_message_id << " in " << active_live_locations; LOG(DEBUG) << "Can't find " << full_message_id << " in " << active_live_location_message_ids;
return; return;
} }
send_update_message_live_location_viewed(full_message_id); send_update_message_live_location_viewed(full_message_id);
} }
void MessagesManager::on_update_some_live_location_viewed(Promise<Unit> &&promise) {
LOG(DEBUG) << "Some live location was viewed";
if (!are_active_live_location_messages_loaded_) {
get_active_live_location_messages(
PromiseCreator::lambda([actor_id = actor_id(this), promise = std::move(promise)](Unit result) mutable {
send_closure(actor_id, &MessagesManager::on_update_some_live_location_viewed, std::move(promise));
}));
return;
}
// update all live locations, because it is unknown, which exactly was viewed
auto active_live_location_message_ids = get_active_live_location_messages(Auto());
for (auto full_message_id : active_live_location_message_ids) {
send_update_message_live_location_viewed(full_message_id);
}
promise.set_value(Unit());
}
void MessagesManager::on_update_message_content(FullMessageId full_message_id) { void MessagesManager::on_update_message_content(FullMessageId full_message_id) {
const Dialog *d = get_dialog(full_message_id.get_dialog_id()); const Dialog *d = get_dialog(full_message_id.get_dialog_id());
CHECK(d != nullptr); CHECK(d != nullptr);

View File

@ -313,6 +313,8 @@ class MessagesManager : public Actor {
void on_update_live_location_viewed(FullMessageId full_message_id); void on_update_live_location_viewed(FullMessageId full_message_id);
void on_update_some_live_location_viewed(Promise<Unit> &&promise);
void on_update_message_content(FullMessageId full_message_id); void on_update_message_content(FullMessageId full_message_id);
void on_read_channel_inbox(ChannelId channel_id, MessageId max_message_id, int32 server_unread_count, int32 pts, void on_read_channel_inbox(ChannelId channel_id, MessageId max_message_id, int32 server_unread_count, int32 pts,

View File

@ -3017,7 +3017,8 @@ Status NotificationManager::process_push_notification_payload(string payload, bo
} }
if (loc_key == "GEO_LIVE_PENDING") { if (loc_key == "GEO_LIVE_PENDING") {
return Status::Error(406, "Need update live location"); td_->messages_manager_->on_update_some_live_location_viewed(std::move(promise));
return Status::OK();
} }
if (loc_key == "AUTH_REGION" || loc_key == "AUTH_UNKNOWN") { if (loc_key == "AUTH_REGION" || loc_key == "AUTH_UNKNOWN") {