Better support for GEO_LIVE_PENDING push notifications.
GitOrigin-RevId: 7fb392ec0e6471a09a3b325db48531700204c039
This commit is contained in:
parent
1dd4e1a767
commit
fa04e668f6
@ -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);
|
||||||
|
@ -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,
|
||||||
|
@ -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") {
|
||||||
|
Reference in New Issue
Block a user