Implement updateNotification.
GitOrigin-RevId: 804e527cc2819e8fa6420d8a7ceea4ad6688a641
This commit is contained in:
parent
64c7362fd8
commit
c5c3b8c95a
@ -2613,8 +2613,8 @@ getChatMessageByDate chat_id:int53 date:int32 = Message;
|
|||||||
getChatMessageCount chat_id:int53 filter:SearchMessagesFilter return_local:Bool = Count;
|
getChatMessageCount chat_id:int53 filter:SearchMessagesFilter return_local:Bool = Count;
|
||||||
|
|
||||||
|
|
||||||
//@description Removes an active notification from notification list @notification_id Identifier of removed notification
|
//@description Removes an active notification from notification list @notification_group_id Identifier of notification group to which the notification belongs @notification_id Identifier of removed notification
|
||||||
removeNotification notification_id:int32 = Ok;
|
removeNotification notification_group_id:int32 notification_id:int32 = Ok;
|
||||||
|
|
||||||
//@description Removes group of active notifications @notification_group_id Notification group identifier @max_notification_id Maximum identifier of removed notifications
|
//@description Removes group of active notifications @notification_group_id Notification group identifier @max_notification_id Maximum identifier of removed notifications
|
||||||
removeNotificationGroup notification_group_id:int32 max_notification_id:int32 = Ok;
|
removeNotificationGroup notification_group_id:int32 max_notification_id:int32 = Ok;
|
||||||
|
Binary file not shown.
@ -5577,7 +5577,8 @@ void MessagesManager::on_message_edited(FullMessageId full_message_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto dialog_id = full_message_id.get_dialog_id();
|
auto dialog_id = full_message_id.get_dialog_id();
|
||||||
Message *m = get_message(full_message_id);
|
Dialog *d = get_dialog(dialog_id);
|
||||||
|
const Message *m = get_message(d, full_message_id.get_message_id());
|
||||||
CHECK(m != nullptr);
|
CHECK(m != nullptr);
|
||||||
if (td_->auth_manager_->is_bot()) {
|
if (td_->auth_manager_->is_bot()) {
|
||||||
send_update_message_edited(dialog_id, m);
|
send_update_message_edited(dialog_id, m);
|
||||||
@ -5587,7 +5588,8 @@ void MessagesManager::on_message_edited(FullMessageId full_message_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (m->notification_id.is_valid()) {
|
if (m->notification_id.is_valid()) {
|
||||||
send_closure_later(G()->notification_manager(), &NotificationManager::edit_notification, m->notification_id,
|
send_closure_later(G()->notification_manager(), &NotificationManager::edit_notification,
|
||||||
|
get_dialog_message_notification_group_id(d), m->notification_id,
|
||||||
create_new_message_notification(m->message_id));
|
create_new_message_notification(m->message_id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -201,6 +201,20 @@ void NotificationManager::send_update_notification_group(td_api::object_ptr<td_a
|
|||||||
send_closure(G()->td(), &Td::send_update, std::move(update));
|
send_closure(G()->td(), &Td::send_update, std::move(update));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NotificationManager::send_update_notification(NotificationGroupId notification_group_id, DialogId dialog_id,
|
||||||
|
const Notification ¬ification) {
|
||||||
|
auto notification_object = get_notification_object(dialog_id, notification);
|
||||||
|
if (notification_object->type_ == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO delay and combine updates while getDifference is running
|
||||||
|
auto update =
|
||||||
|
td_api::make_object<td_api::updateNotification>(notification_group_id.get(), std::move(notification_object));
|
||||||
|
VLOG(notifications) << "Send " << to_string(update);
|
||||||
|
send_closure(G()->td(), &Td::send_update, std::move(update));
|
||||||
|
}
|
||||||
|
|
||||||
void NotificationManager::flush_pending_notifications(NotificationGroupKey &group_key, NotificationGroup &group,
|
void NotificationManager::flush_pending_notifications(NotificationGroupKey &group_key, NotificationGroup &group,
|
||||||
vector<PendingNotification> &pending_notifications) {
|
vector<PendingNotification> &pending_notifications) {
|
||||||
if (pending_notifications.empty()) {
|
if (pending_notifications.empty()) {
|
||||||
@ -363,7 +377,8 @@ void NotificationManager::flush_pending_notifications(NotificationGroupId group_
|
|||||||
groups_.emplace(std::move(final_group_key), std::move(group));
|
groups_.emplace(std::move(final_group_key), std::move(group));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotificationManager::edit_notification(NotificationId notification_id, unique_ptr<NotificationType> type) {
|
void NotificationManager::edit_notification(NotificationGroupId group_id, NotificationId notification_id,
|
||||||
|
unique_ptr<NotificationType> type) {
|
||||||
if (is_disabled()) {
|
if (is_disabled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -371,17 +386,28 @@ void NotificationManager::edit_notification(NotificationId notification_id, uniq
|
|||||||
CHECK(notification_id.is_valid());
|
CHECK(notification_id.is_valid());
|
||||||
CHECK(type != nullptr);
|
CHECK(type != nullptr);
|
||||||
VLOG(notifications) << "Edit " << notification_id << ": " << *type;
|
VLOG(notifications) << "Edit " << notification_id << ": " << *type;
|
||||||
}
|
|
||||||
|
|
||||||
void NotificationManager::delete_notification(NotificationId notification_id) {
|
auto group_it = get_group(group_id);
|
||||||
if (is_disabled()) {
|
auto &group = group_it->second;
|
||||||
return;
|
for (size_t i = 0; i < group.notifications.size(); i++) {
|
||||||
|
auto ¬ification = group.notifications[i];
|
||||||
|
if (notification.notification_id == notification_id) {
|
||||||
|
notification.type = std::move(type);
|
||||||
|
if (i + max_notification_group_size_ >= group.notifications.size()) {
|
||||||
|
send_update_notification(group_it->first.group_id, group_it->first.dialog_id, notification);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto ¬ification : group.pending_notifications) {
|
||||||
|
if (notification.notification_id == notification_id) {
|
||||||
|
notification.type = std::move(type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK(notification_id.is_valid());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotificationManager::remove_notification(NotificationId notification_id, Promise<Unit> &&promise) {
|
void NotificationManager::remove_notification(NotificationGroupId group_id, NotificationId notification_id,
|
||||||
|
Promise<Unit> &&promise) {
|
||||||
if (!notification_id.is_valid()) {
|
if (!notification_id.is_valid()) {
|
||||||
return promise.set_error(Status::Error(400, "Notification identifier is invalid"));
|
return promise.set_error(Status::Error(400, "Notification identifier is invalid"));
|
||||||
}
|
}
|
||||||
@ -390,6 +416,10 @@ void NotificationManager::remove_notification(NotificationId notification_id, Pr
|
|||||||
return promise.set_value(Unit());
|
return promise.set_value(Unit());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VLOG(notifications) << "Remove " << notification_id;
|
||||||
|
|
||||||
|
// TODO remove notification from database by notification_id
|
||||||
|
|
||||||
// TODO update total_count
|
// TODO update total_count
|
||||||
promise.set_value(Unit());
|
promise.set_value(Unit());
|
||||||
}
|
}
|
||||||
@ -407,6 +437,8 @@ void NotificationManager::remove_notification_group(NotificationGroupId group_id
|
|||||||
return promise.set_value(Unit());
|
return promise.set_value(Unit());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VLOG(notifications) << "Remove " << group_id << " up to " << max_notification_id;
|
||||||
|
|
||||||
// TODO update total_count
|
// TODO update total_count
|
||||||
promise.set_value(Unit());
|
promise.set_value(Unit());
|
||||||
}
|
}
|
||||||
|
@ -44,11 +44,10 @@ class NotificationManager : public Actor {
|
|||||||
DialogId notification_settings_dialog_id, bool is_silent, NotificationId notification_id,
|
DialogId notification_settings_dialog_id, bool is_silent, NotificationId notification_id,
|
||||||
unique_ptr<NotificationType> type);
|
unique_ptr<NotificationType> type);
|
||||||
|
|
||||||
void edit_notification(NotificationId notification_id, unique_ptr<NotificationType> type);
|
void edit_notification(NotificationGroupId group_id, NotificationId notification_id,
|
||||||
|
unique_ptr<NotificationType> type);
|
||||||
|
|
||||||
void delete_notification(NotificationId notification_id);
|
void remove_notification(NotificationGroupId group_id, NotificationId notification_id, Promise<Unit> &&promise);
|
||||||
|
|
||||||
void remove_notification(NotificationId notification_id, Promise<Unit> &&promise);
|
|
||||||
|
|
||||||
void remove_notification_group(NotificationGroupId group_id, NotificationId max_notification_id,
|
void remove_notification_group(NotificationGroupId group_id, NotificationId max_notification_id,
|
||||||
Promise<Unit> &&promise);
|
Promise<Unit> &&promise);
|
||||||
@ -134,6 +133,9 @@ class NotificationManager : public Actor {
|
|||||||
|
|
||||||
void send_update_notification_group(td_api::object_ptr<td_api::updateNotificationGroup> update);
|
void send_update_notification_group(td_api::object_ptr<td_api::updateNotificationGroup> update);
|
||||||
|
|
||||||
|
void send_update_notification(NotificationGroupId notification_group_id, DialogId dialog_id,
|
||||||
|
const Notification ¬ification);
|
||||||
|
|
||||||
NotificationGroups::iterator get_group(NotificationGroupId group_id);
|
NotificationGroups::iterator get_group(NotificationGroupId group_id);
|
||||||
|
|
||||||
NotificationGroupKey get_last_updated_group_key() const;
|
NotificationGroupKey get_last_updated_group_key() const;
|
||||||
|
@ -5085,7 +5085,8 @@ void Td::on_request(uint64 id, td_api::getChatMessageCount &request) {
|
|||||||
void Td::on_request(uint64 id, const td_api::removeNotification &request) {
|
void Td::on_request(uint64 id, const td_api::removeNotification &request) {
|
||||||
CHECK_IS_USER();
|
CHECK_IS_USER();
|
||||||
CREATE_OK_REQUEST_PROMISE();
|
CREATE_OK_REQUEST_PROMISE();
|
||||||
notification_manager_->remove_notification(NotificationId(request.notification_id_), std::move(promise));
|
notification_manager_->remove_notification(NotificationGroupId(request.notification_group_id_),
|
||||||
|
NotificationId(request.notification_id_), std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, const td_api::removeNotificationGroup &request) {
|
void Td::on_request(uint64 id, const td_api::removeNotificationGroup &request) {
|
||||||
|
@ -3293,8 +3293,11 @@ class CliClient final : public Actor {
|
|||||||
} else if (op == "rans") {
|
} else if (op == "rans") {
|
||||||
send_request(make_tl_object<td_api::resetAllNotificationSettings>());
|
send_request(make_tl_object<td_api::resetAllNotificationSettings>());
|
||||||
} else if (op == "rn") {
|
} else if (op == "rn") {
|
||||||
string notification_id = args;
|
string group_id;
|
||||||
send_request(make_tl_object<td_api::removeNotification>(to_integer<int32>(notification_id)));
|
string notification_id;
|
||||||
|
std::tie(group_id, notification_id) = split(args);
|
||||||
|
send_request(
|
||||||
|
make_tl_object<td_api::removeNotification>(to_integer<int32>(group_id), to_integer<int32>(notification_id)));
|
||||||
} else if (op == "rng") {
|
} else if (op == "rng") {
|
||||||
string group_id;
|
string group_id;
|
||||||
string max_notification_id;
|
string max_notification_id;
|
||||||
|
Reference in New Issue
Block a user