Remove notifications when dialog history is read.

GitOrigin-RevId: 014c6aae7a0f741882c785db2cefe440b9c8c676
This commit is contained in:
levlam 2018-11-20 18:03:49 +03:00
parent cb1d429eb2
commit 53b02b38aa
2 changed files with 20 additions and 0 deletions

View File

@ -8217,6 +8217,12 @@ void MessagesManager::set_dialog_last_read_inbox_message_id(Dialog *d, MessageId
if (message_id != MessageId::min()) {
d->last_read_inbox_message_id = message_id;
d->is_last_read_inbox_message_id_inited = true;
if (d->last_read_inbox_message_id.is_valid() && d->message_notification_group_id.is_valid()) {
send_closure_later(G()->notification_manager(), &NotificationManager::remove_notification_group,
d->message_notification_group_id, NotificationId(), d->last_read_inbox_message_id,
get_dialog_pending_notification_count(d), Promise<Unit>());
}
}
int32 old_unread_count = d->server_unread_count + d->local_unread_count;
d->server_unread_count = server_unread_count;
@ -17387,6 +17393,7 @@ void MessagesManager::send_update_new_message(const Dialog *d, const Message *m)
}
NotificationGroupId MessagesManager::get_dialog_message_notification_group_id(Dialog *d) {
CHECK(d != nullptr);
if (!d->message_notification_group_id.is_valid()) {
d->message_notification_group_id = td_->notification_manager_->get_next_notification_group_id();
VLOG(notifications) << "Assign " << d->message_notification_group_id << " to " << d->dialog_id;
@ -17397,6 +17404,17 @@ NotificationGroupId MessagesManager::get_dialog_message_notification_group_id(Di
return d->message_notification_group_id;
}
int32 MessagesManager::get_dialog_pending_notification_count(Dialog *d) {
CHECK(d != nullptr);
if (is_dialog_muted(d)) {
// TODO pinned message?
// TODO hidden notifications?
return d->unread_mention_count;
}
return d->server_unread_count + d->local_unread_count; // TODO remove/add some messages with unread mentions
}
void MessagesManager::add_new_message_notification(Dialog *d, Message *m, bool force) {
CHECK(d != nullptr);
CHECK(m != nullptr);

View File

@ -1455,6 +1455,8 @@ class MessagesManager : public Actor {
NotificationGroupId get_dialog_message_notification_group_id(Dialog *d);
int32 get_dialog_pending_notification_count(Dialog *d);
void add_new_message_notification(Dialog *d, Message *m, bool force);
void flush_pending_new_message_notifications(DialogId dialog_id);