Improve get_dialog_notification_settings(tl_object_ptr<telegram_api::peerNotifySettings>).
This commit is contained in:
parent
ac9ee00a6b
commit
3c842f1ecb
|
@ -69,18 +69,32 @@ Result<DialogNotificationSettings> get_dialog_notification_settings(
|
||||||
}
|
}
|
||||||
|
|
||||||
DialogNotificationSettings get_dialog_notification_settings(tl_object_ptr<telegram_api::peerNotifySettings> &&settings,
|
DialogNotificationSettings get_dialog_notification_settings(tl_object_ptr<telegram_api::peerNotifySettings> &&settings,
|
||||||
bool old_use_default_disable_pinned_message_notifications,
|
const DialogNotificationSettings *old_settings) {
|
||||||
bool old_disable_pinned_message_notifications,
|
bool old_use_default_disable_pinned_message_notifications = true;
|
||||||
bool old_use_default_disable_mention_notifications,
|
bool old_disable_pinned_message_notifications = false;
|
||||||
bool old_disable_mention_notifications) {
|
bool old_use_default_disable_mention_notifications = true;
|
||||||
if (settings == nullptr) {
|
bool old_disable_mention_notifications = false;
|
||||||
return DialogNotificationSettings();
|
if (old_settings != nullptr) {
|
||||||
|
old_use_default_disable_pinned_message_notifications =
|
||||||
|
old_settings->use_default_disable_pinned_message_notifications;
|
||||||
|
old_disable_pinned_message_notifications = old_settings->disable_pinned_message_notifications;
|
||||||
|
old_use_default_disable_mention_notifications = old_settings->use_default_disable_mention_notifications;
|
||||||
|
old_disable_mention_notifications = old_settings->disable_mention_notifications;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings == nullptr) {
|
||||||
|
auto result = DialogNotificationSettings();
|
||||||
|
result.use_default_disable_pinned_message_notifications = old_use_default_disable_pinned_message_notifications;
|
||||||
|
result.disable_pinned_message_notifications = old_disable_pinned_message_notifications;
|
||||||
|
result.use_default_disable_mention_notifications = old_use_default_disable_mention_notifications;
|
||||||
|
result.disable_mention_notifications = old_disable_mention_notifications;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
bool use_default_mute_until = (settings->flags_ & telegram_api::peerNotifySettings::MUTE_UNTIL_MASK) == 0;
|
bool use_default_mute_until = (settings->flags_ & telegram_api::peerNotifySettings::MUTE_UNTIL_MASK) == 0;
|
||||||
bool use_default_show_preview = (settings->flags_ & telegram_api::peerNotifySettings::SHOW_PREVIEWS_MASK) == 0;
|
bool use_default_show_preview = (settings->flags_ & telegram_api::peerNotifySettings::SHOW_PREVIEWS_MASK) == 0;
|
||||||
auto mute_until = use_default_mute_until || settings->mute_until_ <= G()->unix_time() ? 0 : settings->mute_until_;
|
auto mute_until = use_default_mute_until || settings->mute_until_ <= G()->unix_time() ? 0 : settings->mute_until_;
|
||||||
bool silent_send_message =
|
bool silent_send_message = settings->silent_;
|
||||||
(settings->flags_ & telegram_api::peerNotifySettings::SILENT_MASK) == 0 ? false : settings->silent_;
|
|
||||||
return {use_default_mute_until,
|
return {use_default_mute_until,
|
||||||
mute_until,
|
mute_until,
|
||||||
get_notification_sound(settings.get()),
|
get_notification_sound(settings.get()),
|
||||||
|
|
|
@ -64,10 +64,7 @@ Result<DialogNotificationSettings> get_dialog_notification_settings(
|
||||||
td_api::object_ptr<td_api::chatNotificationSettings> &¬ification_settings, bool old_silent_send_message);
|
td_api::object_ptr<td_api::chatNotificationSettings> &¬ification_settings, bool old_silent_send_message);
|
||||||
|
|
||||||
DialogNotificationSettings get_dialog_notification_settings(tl_object_ptr<telegram_api::peerNotifySettings> &&settings,
|
DialogNotificationSettings get_dialog_notification_settings(tl_object_ptr<telegram_api::peerNotifySettings> &&settings,
|
||||||
bool old_use_default_disable_pinned_message_notifications,
|
const DialogNotificationSettings *old_settings);
|
||||||
bool old_disable_pinned_message_notifications,
|
|
||||||
bool old_use_default_disable_mention_notifications,
|
|
||||||
bool old_disable_mention_notifications);
|
|
||||||
|
|
||||||
bool are_default_dialog_notification_settings(const DialogNotificationSettings &settings, bool compare_sound);
|
bool are_default_dialog_notification_settings(const DialogNotificationSettings &settings, bool compare_sound);
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
ForumTopic::ForumTopic(Td *td, tl_object_ptr<telegram_api::ForumTopic> &&forum_topic_ptr) {
|
ForumTopic::ForumTopic(Td *td, tl_object_ptr<telegram_api::ForumTopic> &&forum_topic_ptr,
|
||||||
|
const DialogNotificationSettings *current_notification_settings) {
|
||||||
CHECK(forum_topic_ptr != nullptr);
|
CHECK(forum_topic_ptr != nullptr);
|
||||||
if (forum_topic_ptr->get_id() != telegram_api::forumTopic::ID) {
|
if (forum_topic_ptr->get_id() != telegram_api::forumTopic::ID) {
|
||||||
LOG(INFO) << "Receive " << to_string(forum_topic_ptr);
|
LOG(INFO) << "Receive " << to_string(forum_topic_ptr);
|
||||||
|
@ -27,7 +28,7 @@ ForumTopic::ForumTopic(Td *td, tl_object_ptr<telegram_api::ForumTopic> &&forum_t
|
||||||
is_short_ = forum_topic->short_;
|
is_short_ = forum_topic->short_;
|
||||||
is_pinned_ = forum_topic->pinned_;
|
is_pinned_ = forum_topic->pinned_;
|
||||||
notification_settings_ =
|
notification_settings_ =
|
||||||
get_dialog_notification_settings(std::move(forum_topic->notify_settings_), true, false, true, false);
|
get_dialog_notification_settings(std::move(forum_topic->notify_settings_), current_notification_settings);
|
||||||
draft_message_ = get_draft_message(td->contacts_manager_.get(), std::move(forum_topic->draft_));
|
draft_message_ = get_draft_message(td->contacts_manager_.get(), std::move(forum_topic->draft_));
|
||||||
|
|
||||||
if (is_short_) {
|
if (is_short_) {
|
||||||
|
@ -49,7 +50,8 @@ td_api::object_ptr<td_api::forumTopic> ForumTopic::get_forum_topic_object(Td *td
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO draft_message = can_send_message(dialog_id, info_.get_top_thread_message_id()).is_ok() ? ... : nullptr;
|
// TODO draft_message = can_send_message(dialog_id, info_.get_top_thread_message_id()).is_ok() ? ... : nullptr;
|
||||||
auto last_message = td->messages_manager_->get_message_object({dialog_id, last_message_id_}, "get_forum_topic_object");
|
auto last_message =
|
||||||
|
td->messages_manager_->get_message_object({dialog_id, last_message_id_}, "get_forum_topic_object");
|
||||||
auto draft_message = get_draft_message_object(draft_message_);
|
auto draft_message = get_draft_message_object(draft_message_);
|
||||||
return td_api::make_object<td_api::forumTopic>(
|
return td_api::make_object<td_api::forumTopic>(
|
||||||
info.get_forum_topic_info_object(td), std::move(last_message), is_pinned_, unread_count_,
|
info.get_forum_topic_info_object(td), std::move(last_message), is_pinned_, unread_count_,
|
||||||
|
|
|
@ -34,7 +34,8 @@ class ForumTopic {
|
||||||
public:
|
public:
|
||||||
ForumTopic() = default;
|
ForumTopic() = default;
|
||||||
|
|
||||||
ForumTopic(Td *td, tl_object_ptr<telegram_api::ForumTopic> &&forum_topic_ptr);
|
ForumTopic(Td *td, tl_object_ptr<telegram_api::ForumTopic> &&forum_topic_ptr,
|
||||||
|
const DialogNotificationSettings *current_notification_settings);
|
||||||
|
|
||||||
bool is_short() const {
|
bool is_short() const {
|
||||||
return is_short_;
|
return is_short_;
|
||||||
|
|
|
@ -410,10 +410,7 @@ void ForumTopicManager::on_update_forum_topic_notify_settings(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto notification_settings = get_dialog_notification_settings(
|
auto notification_settings = get_dialog_notification_settings(std::move(peer_notify_settings), current_settings);
|
||||||
std::move(peer_notify_settings), current_settings->use_default_disable_pinned_message_notifications,
|
|
||||||
current_settings->disable_pinned_message_notifications,
|
|
||||||
current_settings->use_default_disable_mention_notifications, current_settings->disable_mention_notifications);
|
|
||||||
if (!notification_settings.is_synchronized) {
|
if (!notification_settings.is_synchronized) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -658,13 +655,15 @@ MessageId ForumTopicManager::on_get_forum_topic(DialogId dialog_id,
|
||||||
}
|
}
|
||||||
case telegram_api::forumTopic::ID: {
|
case telegram_api::forumTopic::ID: {
|
||||||
auto forum_topic_info = td::make_unique<ForumTopicInfo>(forum_topic);
|
auto forum_topic_info = td::make_unique<ForumTopicInfo>(forum_topic);
|
||||||
auto forum_topic_full = td::make_unique<ForumTopic>(td_, std::move(forum_topic));
|
MessageId top_thread_message_id = forum_topic_info->get_top_thread_message_id();
|
||||||
|
Topic *topic = add_topic(dialog_id, top_thread_message_id);
|
||||||
|
auto current_notification_settings =
|
||||||
|
topic->topic_ == nullptr ? nullptr : topic->topic_->get_notification_settings();
|
||||||
|
auto forum_topic_full = td::make_unique<ForumTopic>(td_, std::move(forum_topic), current_notification_settings);
|
||||||
if (forum_topic_full->is_short()) {
|
if (forum_topic_full->is_short()) {
|
||||||
LOG(ERROR) << "Receive short " << to_string(forum_topic);
|
LOG(ERROR) << "Receive short " << to_string(forum_topic);
|
||||||
return MessageId();
|
return MessageId();
|
||||||
}
|
}
|
||||||
MessageId top_thread_message_id = forum_topic_info->get_top_thread_message_id();
|
|
||||||
Topic *topic = add_topic(dialog_id, top_thread_message_id);
|
|
||||||
if (topic->topic_ == nullptr || true) {
|
if (topic->topic_ == nullptr || true) {
|
||||||
topic->topic_ = std::move(forum_topic_full);
|
topic->topic_ = std::move(forum_topic_full);
|
||||||
topic->need_save_to_database_ = true; // temporary
|
topic->need_save_to_database_ = true; // temporary
|
||||||
|
|
|
@ -8445,10 +8445,8 @@ void MessagesManager::on_update_dialog_notify_settings(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DialogNotificationSettings notification_settings = ::td::get_dialog_notification_settings(
|
DialogNotificationSettings notification_settings =
|
||||||
std::move(peer_notify_settings), current_settings->use_default_disable_pinned_message_notifications,
|
::td::get_dialog_notification_settings(std::move(peer_notify_settings), current_settings);
|
||||||
current_settings->disable_pinned_message_notifications,
|
|
||||||
current_settings->use_default_disable_mention_notifications, current_settings->disable_mention_notifications);
|
|
||||||
if (!notification_settings.is_synchronized) {
|
if (!notification_settings.is_synchronized) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user