Fix remove_temporary_notifications.
GitOrigin-RevId: 4ab864b9da37b513d2e1e811653bdb7a1afab999
This commit is contained in:
parent
8a597f77e4
commit
fd5c47a831
@ -1966,16 +1966,19 @@ void NotificationManager::remove_temporary_notifications(NotificationGroupId gro
|
|||||||
notification_pos = pos;
|
notification_pos = pos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (notification_pos == old_group_size) {
|
auto removed_notification_count = narrow_cast<int32>(old_group_size - notification_pos);
|
||||||
|
if (removed_notification_count == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_total_count_changed = false;
|
bool is_total_count_changed = false;
|
||||||
if (group.total_count == 0) {
|
if (group.total_count < removed_notification_count) {
|
||||||
LOG(ERROR) << "Total notification count became negative in " << group_id << " after removing "
|
LOG(ERROR) << "Total notification count became negative in " << group_id << " after removing "
|
||||||
<< old_group_size - notification_pos << " temporary notificaitions";
|
<< removed_notification_count << " temporary notificaitions";
|
||||||
|
is_total_count_changed = group.total_count != 0;
|
||||||
|
group.total_count = 0;
|
||||||
} else {
|
} else {
|
||||||
group.total_count -= narrow_cast<int32>(old_group_size - notification_pos);
|
group.total_count -= removed_notification_count;
|
||||||
is_total_count_changed = true;
|
is_total_count_changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1994,7 +1997,7 @@ void NotificationManager::remove_temporary_notifications(NotificationGroupId gro
|
|||||||
|
|
||||||
vector<td_api::object_ptr<td_api::notification>> added_notifications;
|
vector<td_api::object_ptr<td_api::notification>> added_notifications;
|
||||||
if (old_group_size >= max_notification_group_size_) {
|
if (old_group_size >= max_notification_group_size_) {
|
||||||
for (size_t i = old_group_size - max_notification_group_size_;
|
for (size_t i = min(old_group_size - max_notification_group_size_, notification_pos);
|
||||||
i-- > 0 && added_notifications.size() < removed_notification_ids.size();) {
|
i-- > 0 && added_notifications.size() < removed_notification_ids.size();) {
|
||||||
added_notifications.push_back(get_notification_object(group_it->first.dialog_id, group.notifications[i]));
|
added_notifications.push_back(get_notification_object(group_it->first.dialog_id, group.notifications[i]));
|
||||||
if (added_notifications.back()->type_ == nullptr) {
|
if (added_notifications.back()->type_ == nullptr) {
|
||||||
@ -2004,6 +2007,7 @@ void NotificationManager::remove_temporary_notifications(NotificationGroupId gro
|
|||||||
if (added_notifications.size() < removed_notification_ids.size()) {
|
if (added_notifications.size() < removed_notification_ids.size()) {
|
||||||
load_message_notifications_from_database(group_it->first, group, keep_notification_group_size_);
|
load_message_notifications_from_database(group_it->first, group, keep_notification_group_size_);
|
||||||
}
|
}
|
||||||
|
std::reverse(added_notifications.begin(), added_notifications.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
on_notifications_removed(std::move(group_it), std::move(added_notifications), std::move(removed_notification_ids),
|
on_notifications_removed(std::move(group_it), std::move(added_notifications), std::move(removed_notification_ids),
|
||||||
|
Reference in New Issue
Block a user