Use object_id instead of message_id in NotificationGroupInfo.
This commit is contained in:
parent
ce1fdf097c
commit
15c14e4983
@ -29198,12 +29198,12 @@ bool MessagesManager::is_message_notification_active(const Dialog *d, const Mess
|
|||||||
}
|
}
|
||||||
if (is_from_mention_notification_group(m)) {
|
if (is_from_mention_notification_group(m)) {
|
||||||
return !d->notification_info->mention_notification_group_.is_removed_notification(m->notification_id,
|
return !d->notification_info->mention_notification_group_.is_removed_notification(m->notification_id,
|
||||||
m->message_id) &&
|
m->message_id.get()) &&
|
||||||
(m->contains_unread_mention ||
|
(m->contains_unread_mention ||
|
||||||
m->message_id == d->notification_info->pinned_message_notification_message_id_);
|
m->message_id == d->notification_info->pinned_message_notification_message_id_);
|
||||||
} else {
|
} else {
|
||||||
return !d->notification_info->message_notification_group_.is_removed_notification(m->notification_id,
|
return !d->notification_info->message_notification_group_.is_removed_notification(m->notification_id,
|
||||||
m->message_id) &&
|
m->message_id.get()) &&
|
||||||
m->message_id > d->last_read_inbox_message_id;
|
m->message_id > d->last_read_inbox_message_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29222,7 +29222,8 @@ void MessagesManager::try_add_pinned_message_notification(Dialog *d, vector<Noti
|
|||||||
|
|
||||||
auto m = get_message_force(d, message_id, "try_add_pinned_message_notification");
|
auto m = get_message_force(d, message_id, "try_add_pinned_message_notification");
|
||||||
if (m != nullptr &&
|
if (m != nullptr &&
|
||||||
!d->notification_info->mention_notification_group_.is_removed_notification(m->notification_id, m->message_id) &&
|
!d->notification_info->mention_notification_group_.is_removed_notification(m->notification_id,
|
||||||
|
m->message_id.get()) &&
|
||||||
m->message_id > d->last_read_inbox_message_id && !is_dialog_pinned_message_notifications_disabled(d)) {
|
m->message_id > d->last_read_inbox_message_id && !is_dialog_pinned_message_notifications_disabled(d)) {
|
||||||
if (m->notification_id.get() < max_notification_id.get()) {
|
if (m->notification_id.get() < max_notification_id.get()) {
|
||||||
VLOG(notifications) << "Add " << m->notification_id << " about pinned " << message_id << " in " << d->dialog_id;
|
VLOG(notifications) << "Add " << m->notification_id << " about pinned " << message_id << " in " << d->dialog_id;
|
||||||
@ -29315,7 +29316,7 @@ vector<Notification> MessagesManager::get_message_notifications_from_database_fo
|
|||||||
is_found = true;
|
is_found = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (group_info.is_removed_notification(notification_id, m->message_id) ||
|
if (group_info.is_removed_notification(notification_id, m->message_id.get()) ||
|
||||||
(!from_mentions && m->message_id <= d->last_read_inbox_message_id)) {
|
(!from_mentions && m->message_id <= d->last_read_inbox_message_id)) {
|
||||||
// if message still has notification_id, but it was removed,
|
// if message still has notification_id, but it was removed,
|
||||||
// then there will be no more messages with active notifications
|
// then there will be no more messages with active notifications
|
||||||
@ -29473,7 +29474,7 @@ void MessagesManager::do_get_message_notifications_from_database(Dialog *d, bool
|
|||||||
CHECK(!from_message_id.is_scheduled());
|
CHECK(!from_message_id.is_scheduled());
|
||||||
|
|
||||||
auto &group_info = get_notification_group_info(d, from_mentions);
|
auto &group_info = get_notification_group_info(d, from_mentions);
|
||||||
if (!group_info.is_valid() || group_info.is_removed_notification(from_notification_id, from_message_id) ||
|
if (!group_info.is_valid() || group_info.is_removed_notification(from_notification_id, from_message_id.get()) ||
|
||||||
(!from_mentions && from_message_id <= d->last_read_inbox_message_id)) {
|
(!from_mentions && from_message_id <= d->last_read_inbox_message_id)) {
|
||||||
return promise.set_value(vector<Notification>());
|
return promise.set_value(vector<Notification>());
|
||||||
}
|
}
|
||||||
@ -29567,7 +29568,7 @@ void MessagesManager::on_get_message_notifications_from_database(DialogId dialog
|
|||||||
from_message_id = m->message_id;
|
from_message_id = m->message_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (group_info.is_removed_notification(notification_id, m->message_id) ||
|
if (group_info.is_removed_notification(notification_id, m->message_id.get()) ||
|
||||||
(!from_mentions && m->message_id <= d->last_read_inbox_message_id)) {
|
(!from_mentions && m->message_id <= d->last_read_inbox_message_id)) {
|
||||||
// if message still has notification_id, but it was removed via max_removed_notification_id,
|
// if message still has notification_id, but it was removed via max_removed_notification_id,
|
||||||
// or max_removed_message_id, or last_read_inbox_message_id,
|
// or max_removed_message_id, or last_read_inbox_message_id,
|
||||||
@ -29736,7 +29737,8 @@ void MessagesManager::remove_message_notifications(DialogId dialog_id, Notificat
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto &group_info = get_notification_group_info(d, from_mentions);
|
auto &group_info = get_notification_group_info(d, from_mentions);
|
||||||
if (group_info.set_max_removed_notification_id(max_notification_id, max_message_id, "remove_message_notifications")) {
|
if (group_info.set_max_removed_notification_id(max_notification_id, max_message_id.get_prev_server_message_id().get(),
|
||||||
|
"remove_message_notifications")) {
|
||||||
on_dialog_updated(dialog_id, "remove_message_notifications");
|
on_dialog_updated(dialog_id, "remove_message_notifications");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29898,7 +29900,7 @@ bool MessagesManager::add_new_message_notification(Dialog *d, Message *m, bool f
|
|||||||
from_mentions ? m->contains_unread_mention || is_pinned : m->message_id > d->last_read_inbox_message_id;
|
from_mentions ? m->contains_unread_mention || is_pinned : m->message_id > d->last_read_inbox_message_id;
|
||||||
if (is_active) {
|
if (is_active) {
|
||||||
auto &group_info = get_notification_group_info(d, from_mentions);
|
auto &group_info = get_notification_group_info(d, from_mentions);
|
||||||
if (group_info.is_removed_message_id(m->message_id)) {
|
if (group_info.is_removed_object_id(m->message_id.get())) {
|
||||||
is_active = false;
|
is_active = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -30089,7 +30091,8 @@ void MessagesManager::remove_all_dialog_notifications(Dialog *d, bool from_menti
|
|||||||
NotificationGroupInfo &group_info = get_notification_group_info(d, from_mentions);
|
NotificationGroupInfo &group_info = get_notification_group_info(d, from_mentions);
|
||||||
if (group_info.is_valid() && group_info.get_last_notification_id().is_valid()) {
|
if (group_info.is_valid() && group_info.get_last_notification_id().is_valid()) {
|
||||||
auto last_notification_id = group_info.get_last_notification_id();
|
auto last_notification_id = group_info.get_last_notification_id();
|
||||||
group_info.set_max_removed_notification_id(last_notification_id, d->notification_info->max_notification_message_id_,
|
group_info.set_max_removed_notification_id(
|
||||||
|
last_notification_id, d->notification_info->max_notification_message_id_.get_prev_server_message_id().get(),
|
||||||
source);
|
source);
|
||||||
on_dialog_updated(d->dialog_id, source);
|
on_dialog_updated(d->dialog_id, source);
|
||||||
|
|
||||||
@ -36686,7 +36689,7 @@ void MessagesManager::fix_new_dialog(Dialog *d, unique_ptr<Message> &&last_datab
|
|||||||
on_dialog_updated(dialog_id, "fix pinned message notification");
|
on_dialog_updated(dialog_id, "fix pinned message notification");
|
||||||
} else if (is_dialog_pinned_message_notifications_disabled(d) ||
|
} else if (is_dialog_pinned_message_notifications_disabled(d) ||
|
||||||
pinned_message_id <= d->last_read_inbox_message_id ||
|
pinned_message_id <= d->last_read_inbox_message_id ||
|
||||||
d->notification_info->mention_notification_group_.is_removed_message_id(pinned_message_id)) {
|
d->notification_info->mention_notification_group_.is_removed_object_id(pinned_message_id.get())) {
|
||||||
VLOG(notifications) << "Remove disabled pinned message notification in " << pinned_message_id << " in "
|
VLOG(notifications) << "Remove disabled pinned message notification in " << pinned_message_id << " in "
|
||||||
<< dialog_id;
|
<< dialog_id;
|
||||||
send_closure_later(G()->notification_manager(), &NotificationManager::remove_temporary_notification_by_message_id,
|
send_closure_later(G()->notification_manager(), &NotificationManager::remove_temporary_notification_by_message_id,
|
||||||
|
@ -32,14 +32,14 @@ bool NotificationGroupInfo::set_last_notification(int32 last_notification_date,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool NotificationGroupInfo::set_max_removed_notification_id(NotificationId max_removed_notification_id,
|
bool NotificationGroupInfo::set_max_removed_notification_id(NotificationId max_removed_notification_id,
|
||||||
MessageId max_removed_message_id, const char *source) {
|
int64 max_removed_object_id, const char *source) {
|
||||||
if (max_removed_notification_id.get() <= max_removed_notification_id_.get()) {
|
if (max_removed_notification_id.get() <= max_removed_notification_id_.get()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (max_removed_message_id > max_removed_message_id_) {
|
if (max_removed_object_id > max_removed_object_id_) {
|
||||||
VLOG(notifications) << "Set max_removed_message_id in " << group_id_ << " to " << max_removed_message_id << " from "
|
VLOG(notifications) << "Set max_removed_object_id in " << group_id_ << " to " << max_removed_object_id << " from "
|
||||||
<< source;
|
<< source;
|
||||||
max_removed_message_id_ = max_removed_message_id.get_prev_server_message_id();
|
max_removed_object_id_ = max_removed_object_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
VLOG(notifications) << "Set max_removed_notification_id in " << group_id_ << " to " << max_removed_notification_id
|
VLOG(notifications) << "Set max_removed_notification_id in " << group_id_ << " to " << max_removed_notification_id
|
||||||
@ -61,20 +61,20 @@ void NotificationGroupInfo::drop_max_removed_notification_id() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
VLOG(notifications) << "Drop max_removed_notification_id in " << group_id_;
|
VLOG(notifications) << "Drop max_removed_notification_id in " << group_id_;
|
||||||
max_removed_message_id_ = MessageId();
|
max_removed_object_id_ = 0;
|
||||||
max_removed_notification_id_ = NotificationId();
|
max_removed_notification_id_ = NotificationId();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NotificationGroupInfo::is_removed_notification(NotificationId notification_id, MessageId message_id) const {
|
bool NotificationGroupInfo::is_removed_notification(NotificationId notification_id, int64 object_id) const {
|
||||||
return is_removed_notification_id(notification_id) || is_removed_message_id(message_id);
|
return is_removed_notification_id(notification_id) || is_removed_object_id(object_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NotificationGroupInfo::is_removed_notification_id(NotificationId notification_id) const {
|
bool NotificationGroupInfo::is_removed_notification_id(NotificationId notification_id) const {
|
||||||
return notification_id.get() <= max_removed_notification_id_.get();
|
return notification_id.get() <= max_removed_notification_id_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NotificationGroupInfo::is_removed_message_id(MessageId message_id) const {
|
bool NotificationGroupInfo::is_removed_object_id(int64 object_id) const {
|
||||||
return message_id <= max_removed_message_id_;
|
return object_id <= max_removed_object_id_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NotificationGroupInfo::is_used_notification_id(NotificationId notification_id) const {
|
bool NotificationGroupInfo::is_used_notification_id(NotificationId notification_id) const {
|
||||||
@ -118,14 +118,14 @@ NotificationGroupId NotificationGroupInfo::get_reused_group_id() {
|
|||||||
auto result = group_id_;
|
auto result = group_id_;
|
||||||
group_id_ = NotificationGroupId();
|
group_id_ = NotificationGroupId();
|
||||||
max_removed_notification_id_ = NotificationId();
|
max_removed_notification_id_ = NotificationId();
|
||||||
max_removed_message_id_ = MessageId();
|
max_removed_object_id_ = 0;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder &operator<<(StringBuilder &string_builder, const NotificationGroupInfo &group_info) {
|
StringBuilder &operator<<(StringBuilder &string_builder, const NotificationGroupInfo &group_info) {
|
||||||
return string_builder << group_info.group_id_ << " with last " << group_info.last_notification_id_ << " sent at "
|
return string_builder << group_info.group_id_ << " with last " << group_info.last_notification_id_ << " sent at "
|
||||||
<< group_info.last_notification_date_ << ", max removed "
|
<< group_info.last_notification_date_ << ", max removed "
|
||||||
<< group_info.max_removed_notification_id_ << '/' << group_info.max_removed_message_id_;
|
<< group_info.max_removed_notification_id_ << '/' << group_info.max_removed_object_id_;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "td/telegram/DialogId.h"
|
#include "td/telegram/DialogId.h"
|
||||||
#include "td/telegram/MessageId.h"
|
|
||||||
#include "td/telegram/NotificationGroupId.h"
|
#include "td/telegram/NotificationGroupId.h"
|
||||||
#include "td/telegram/NotificationGroupKey.h"
|
#include "td/telegram/NotificationGroupKey.h"
|
||||||
#include "td/telegram/NotificationId.h"
|
#include "td/telegram/NotificationId.h"
|
||||||
@ -19,7 +18,7 @@ class NotificationGroupInfo {
|
|||||||
int32 last_notification_date_ = 0; // date of the last notification in the group
|
int32 last_notification_date_ = 0; // date of the last notification in the group
|
||||||
NotificationId last_notification_id_; // identifier of the last notification in the group
|
NotificationId last_notification_id_; // identifier of the last notification in the group
|
||||||
NotificationId max_removed_notification_id_; // notification identifier, up to which all notifications are removed
|
NotificationId max_removed_notification_id_; // notification identifier, up to which all notifications are removed
|
||||||
MessageId max_removed_message_id_; // message identifier, up to which all notifications are removed
|
int64 max_removed_object_id_; // object identifier, up to which all notifications are removed
|
||||||
bool is_key_changed_ = false; // true, if the group needs to be saved to database
|
bool is_key_changed_ = false; // true, if the group needs to be saved to database
|
||||||
bool try_reuse_ = false; // true, if the group needs to be deleted from database and tried to be reused
|
bool try_reuse_ = false; // true, if the group needs to be deleted from database and tried to be reused
|
||||||
|
|
||||||
@ -53,16 +52,16 @@ class NotificationGroupInfo {
|
|||||||
|
|
||||||
bool set_last_notification(int32 last_notification_date, NotificationId last_notification_id, const char *source);
|
bool set_last_notification(int32 last_notification_date, NotificationId last_notification_id, const char *source);
|
||||||
|
|
||||||
bool set_max_removed_notification_id(NotificationId max_removed_notification_id, MessageId max_removed_message_id,
|
bool set_max_removed_notification_id(NotificationId max_removed_notification_id, int64 max_removed_object_id,
|
||||||
const char *source);
|
const char *source);
|
||||||
|
|
||||||
void drop_max_removed_notification_id();
|
void drop_max_removed_notification_id();
|
||||||
|
|
||||||
bool is_removed_notification(NotificationId notification_id, MessageId message_id) const;
|
bool is_removed_notification(NotificationId notification_id, int64 object_id) const;
|
||||||
|
|
||||||
bool is_removed_notification_id(NotificationId notification_id) const;
|
bool is_removed_notification_id(NotificationId notification_id) const;
|
||||||
|
|
||||||
bool is_removed_message_id(MessageId message_id) const;
|
bool is_removed_object_id(int64 object_id) const;
|
||||||
|
|
||||||
bool is_used_notification_id(NotificationId notification_id) const;
|
bool is_used_notification_id(NotificationId notification_id) const;
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ void NotificationGroupInfo::store(StorerT &storer) const {
|
|||||||
store(last_notification_date_, storer);
|
store(last_notification_date_, storer);
|
||||||
store(last_notification_id_, storer);
|
store(last_notification_id_, storer);
|
||||||
store(max_removed_notification_id_, storer);
|
store(max_removed_notification_id_, storer);
|
||||||
store(max_removed_message_id_, storer);
|
store(max_removed_object_id_, storer);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class ParserT>
|
template <class ParserT>
|
||||||
@ -31,7 +31,7 @@ void NotificationGroupInfo::parse(ParserT &parser) {
|
|||||||
parse(last_notification_id_, parser);
|
parse(last_notification_id_, parser);
|
||||||
parse(max_removed_notification_id_, parser);
|
parse(max_removed_notification_id_, parser);
|
||||||
if (parser.version() >= static_cast<int32>(Version::AddNotificationGroupInfoMaxRemovedMessageId)) {
|
if (parser.version() >= static_cast<int32>(Version::AddNotificationGroupInfoMaxRemovedMessageId)) {
|
||||||
parse(max_removed_message_id_, parser);
|
parse(max_removed_object_id_, parser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user