Stop loading notifications from database when possible.
GitOrigin-RevId: fc1ded7e69961988fcc51d855a7d6cc544befa2f
This commit is contained in:
parent
d772ab6de0
commit
b21a1abd7d
@ -17746,10 +17746,21 @@ vector<Notification> MessagesManager::get_message_notifications_from_database_fo
|
|||||||
vector<Notification> res;
|
vector<Notification> res;
|
||||||
res.reserve(messages.size());
|
res.reserve(messages.size());
|
||||||
bool is_found = false;
|
bool is_found = false;
|
||||||
|
VLOG(notifications) << "Loaded " << messages.size() << " messages with notifications from database";
|
||||||
for (auto &message : messages) {
|
for (auto &message : messages) {
|
||||||
auto m = on_get_message_from_database(d->dialog_id, d, std::move(message));
|
auto m = on_get_message_from_database(d->dialog_id, d, std::move(message));
|
||||||
if (is_message_has_active_notification(d, m)) {
|
if (is_message_has_active_notification(d, m)) {
|
||||||
res.emplace_back(m->notification_id, m->date, create_new_message_notification(m->message_id));
|
res.emplace_back(m->notification_id, m->date, create_new_message_notification(m->message_id));
|
||||||
|
} else if (m != nullptr && m->notification_id.is_valid() &&
|
||||||
|
(m->notification_id.get() <= d->max_removed_notification_id.get() ||
|
||||||
|
(m->message_id.get() <= d->last_read_inbox_message_id.get() && d->unread_mention_count == 0))) {
|
||||||
|
// if message still has notification_id, but it was removed via max_removed_notification_id
|
||||||
|
// or last_read_inbox_message_id, then there will be no more messages with active notifications
|
||||||
|
|
||||||
|
// TODO use unread_mention index to get active notifications if message_id <= d->last_read_inbox_message_id
|
||||||
|
// in all calls to get_messages_from_notification_id
|
||||||
|
is_found = false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (m != nullptr && m->notification_id.is_valid()) {
|
if (m != nullptr && m->notification_id.is_valid()) {
|
||||||
CHECK(m->notification_id.get() < from_notification_id.get());
|
CHECK(m->notification_id.get() < from_notification_id.get());
|
||||||
@ -17850,15 +17861,24 @@ void MessagesManager::on_get_message_notifications_from_database(DialogId dialog
|
|||||||
vector<Notification> res;
|
vector<Notification> res;
|
||||||
res.reserve(messages.size());
|
res.reserve(messages.size());
|
||||||
NotificationId from_notification_id;
|
NotificationId from_notification_id;
|
||||||
|
VLOG(notifications) << "Loaded " << messages.size() << " messages with notifications from database";
|
||||||
for (auto &message : messages) {
|
for (auto &message : messages) {
|
||||||
auto m = on_get_message_from_database(dialog_id, d, std::move(message));
|
auto m = on_get_message_from_database(dialog_id, d, std::move(message));
|
||||||
|
if (m == nullptr || !m->notification_id.is_valid()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (is_message_has_active_notification(d, m)) {
|
if (is_message_has_active_notification(d, m)) {
|
||||||
res.emplace_back(m->notification_id, m->date, create_new_message_notification(m->message_id));
|
res.emplace_back(m->notification_id, m->date, create_new_message_notification(m->message_id));
|
||||||
}
|
}
|
||||||
if (m != nullptr && m->notification_id.is_valid()) {
|
|
||||||
CHECK(!from_notification_id.is_valid() || m->notification_id.get() < from_notification_id.get());
|
if (m->notification_id.get() <= d->max_removed_notification_id.get() ||
|
||||||
from_notification_id = m->notification_id;
|
(m->message_id.get() <= d->last_read_inbox_message_id.get() && d->unread_mention_count == 0)) {
|
||||||
|
from_notification_id = NotificationId(); // stop requesting database
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK(!from_notification_id.is_valid() || m->notification_id.get() < from_notification_id.get());
|
||||||
|
from_notification_id = m->notification_id;
|
||||||
}
|
}
|
||||||
if (!res.empty() || !from_notification_id.is_valid() || static_cast<size_t>(limit) > messages.size()) {
|
if (!res.empty() || !from_notification_id.is_valid() || static_cast<size_t>(limit) > messages.size()) {
|
||||||
std::reverse(res.begin(), res.end());
|
std::reverse(res.begin(), res.end());
|
||||||
|
Reference in New Issue
Block a user