Improve get_dialog_notification_settings(td_api::object_ptr<td_api::chatNotificationSettings> &&notification_settings).

This commit is contained in:
levlam 2022-12-06 16:18:11 +03:00
parent 3c842f1ecb
commit 58d84a1c7e
4 changed files with 20 additions and 20 deletions

View File

@ -51,21 +51,28 @@ static int32 get_mute_until(int32 mute_for) {
}
Result<DialogNotificationSettings> get_dialog_notification_settings(
td_api::object_ptr<td_api::chatNotificationSettings> &&notification_settings, bool old_silent_send_message) {
td_api::object_ptr<td_api::chatNotificationSettings> &&notification_settings,
const DialogNotificationSettings *old_settings) {
if (notification_settings == nullptr) {
return Status::Error(400, "New notification settings must be non-empty");
}
CHECK(old_settings != nullptr);
int32 mute_until =
notification_settings->use_default_mute_for_ ? 0 : get_mute_until(notification_settings->mute_for_);
return DialogNotificationSettings(
notification_settings->use_default_mute_for_, mute_until,
get_notification_sound(notification_settings->use_default_sound_, notification_settings->sound_id_),
notification_settings->use_default_show_preview_, notification_settings->show_preview_, old_silent_send_message,
notification_settings->use_default_disable_pinned_message_notifications_,
notification_settings->disable_pinned_message_notifications_,
notification_settings->use_default_disable_mention_notifications_,
notification_settings->disable_mention_notifications_);
auto notification_sound =
get_notification_sound(notification_settings->use_default_sound_, notification_settings->sound_id_);
if (is_notification_sound_default(old_settings->sound) && is_notification_sound_default(notification_sound)) {
notification_sound = dup_notification_sound(old_settings->sound);
}
return DialogNotificationSettings(notification_settings->use_default_mute_for_, mute_until,
std::move(notification_sound), notification_settings->use_default_show_preview_,
notification_settings->show_preview_, old_settings->silent_send_message,
notification_settings->use_default_disable_pinned_message_notifications_,
notification_settings->disable_pinned_message_notifications_,
notification_settings->use_default_disable_mention_notifications_,
notification_settings->disable_mention_notifications_);
}
DialogNotificationSettings get_dialog_notification_settings(tl_object_ptr<telegram_api::peerNotifySettings> &&settings,

View File

@ -61,7 +61,8 @@ td_api::object_ptr<td_api::chatNotificationSettings> get_chat_notification_setti
const DialogNotificationSettings *notification_settings);
Result<DialogNotificationSettings> get_dialog_notification_settings(
td_api::object_ptr<td_api::chatNotificationSettings> &&notification_settings, bool old_silent_send_message);
td_api::object_ptr<td_api::chatNotificationSettings> &&notification_settings,
const DialogNotificationSettings *old_settings);
DialogNotificationSettings get_dialog_notification_settings(tl_object_ptr<telegram_api::peerNotifySettings> &&settings,
const DialogNotificationSettings *old_settings);

View File

@ -430,11 +430,7 @@ Status ForumTopicManager::set_forum_topic_notification_settings(
return Status::Error(400, "Unknown forum topic identifier specified");
}
TRY_RESULT(new_settings,
get_dialog_notification_settings(std::move(notification_settings), current_settings->silent_send_message));
if (is_notification_sound_default(current_settings->sound) && is_notification_sound_default(new_settings.sound)) {
new_settings.sound = dup_notification_sound(current_settings->sound);
}
TRY_RESULT(new_settings, get_dialog_notification_settings(std::move(notification_settings), current_settings));
if (update_forum_topic_notification_settings(dialog_id, top_thread_message_id, current_settings,
std::move(new_settings))) {
// TODO log event

View File

@ -22165,11 +22165,7 @@ Status MessagesManager::set_dialog_notification_settings(
return Status::Error(400, "Notification settings of the Saved Messages chat can't be changed");
}
TRY_RESULT(new_settings, ::td::get_dialog_notification_settings(std::move(notification_settings),
current_settings->silent_send_message));
if (is_notification_sound_default(current_settings->sound) && is_notification_sound_default(new_settings.sound)) {
new_settings.sound = dup_notification_sound(current_settings->sound);
}
TRY_RESULT(new_settings, ::td::get_dialog_notification_settings(std::move(notification_settings), current_settings));
if (update_dialog_notification_settings(dialog_id, current_settings, std::move(new_settings))) {
update_dialog_notification_settings_on_server(dialog_id, false);
}