Add RepliedMessageInfo::need_reply_changed_warning.
This commit is contained in:
parent
d63caeb8d0
commit
d839e5b68c
@ -110,6 +110,59 @@ RepliedMessageInfo::RepliedMessageInfo(Td *td, const MessageInputReplyTo &input_
|
|||||||
message_id_ = input_reply_to.message_id_;
|
message_id_ = input_reply_to.message_id_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RepliedMessageInfo::need_reply_changed_warning(
|
||||||
|
const RepliedMessageInfo &old_info, const RepliedMessageInfo &new_info, MessageId old_top_thread_message_id,
|
||||||
|
bool is_yet_unsent, std::function<bool(const RepliedMessageInfo &info)> is_reply_to_deleted_message) {
|
||||||
|
if (old_info.origin_date_ != new_info.origin_date_ && old_info.origin_date_ != 0 && new_info.origin_date_ != 0) {
|
||||||
|
// date of the original message can't change
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (old_info.origin_ != new_info.origin_ && !old_info.origin_.has_sender_signature() &&
|
||||||
|
!new_info.origin_.has_sender_signature() && !old_info.origin_.is_empty() && !new_info.origin_.is_empty()) {
|
||||||
|
// only signature can change in the message origin
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (old_info.dialog_id_ != new_info.dialog_id_ && old_info.dialog_id_ != DialogId() &&
|
||||||
|
new_info.dialog_id_ != DialogId()) {
|
||||||
|
// reply chat can't change
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (old_info.message_id_ == new_info.message_id_ && old_info.dialog_id_ == new_info.dialog_id_) {
|
||||||
|
if (old_info.message_id_ != MessageId()) {
|
||||||
|
if (old_info.origin_date_ != new_info.origin_date_) {
|
||||||
|
// date of the original message can't change
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (old_info.origin_ != new_info.origin_ && !old_info.origin_.has_sender_signature() &&
|
||||||
|
!new_info.origin_.has_sender_signature()) {
|
||||||
|
// only signature can change in the message origin
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (is_yet_unsent && is_reply_to_deleted_message(old_info) && new_info.message_id_ == MessageId()) {
|
||||||
|
// reply to a deleted message, which was available locally
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (is_yet_unsent && is_reply_to_deleted_message(new_info) && old_info.message_id_ == MessageId()) {
|
||||||
|
// reply to a locally deleted yet unsent message, which was available server-side
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (old_info.message_id_.is_valid_scheduled() && old_info.message_id_.is_scheduled_server() &&
|
||||||
|
new_info.message_id_.is_valid_scheduled() && new_info.message_id_.is_scheduled_server() &&
|
||||||
|
old_info.message_id_.get_scheduled_server_message_id() ==
|
||||||
|
new_info.message_id_.get_scheduled_server_message_id()) {
|
||||||
|
// schedule date change
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (is_yet_unsent && old_top_thread_message_id == new_info.message_id_ && new_info.dialog_id_ == DialogId()) {
|
||||||
|
// move of reply to the top thread message after deletion of the replied message
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void RepliedMessageInfo::add_dependencies(Dependencies &dependencies) const {
|
void RepliedMessageInfo::add_dependencies(Dependencies &dependencies) const {
|
||||||
dependencies.add_dialog_and_dependencies(dialog_id_);
|
dependencies.add_dialog_and_dependencies(dialog_id_);
|
||||||
origin_.add_dependencies(dependencies);
|
origin_.add_dependencies(dependencies);
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
|
|
||||||
#include "td/utils/common.h"
|
#include "td/utils/common.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
class Dependencies;
|
class Dependencies;
|
||||||
@ -56,6 +58,10 @@ class RepliedMessageInfo {
|
|||||||
return message_id_ != MessageId() && message_id_.is_yet_unsent();
|
return message_id_ != MessageId() && message_id_.is_yet_unsent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool need_reply_changed_warning(
|
||||||
|
const RepliedMessageInfo &old_info, const RepliedMessageInfo &new_info, MessageId old_top_thread_message_id,
|
||||||
|
bool is_yet_unsent, std::function<bool(const RepliedMessageInfo &info)> is_reply_to_deleted_message);
|
||||||
|
|
||||||
void add_dependencies(Dependencies &dependencies) const;
|
void add_dependencies(Dependencies &dependencies) const;
|
||||||
|
|
||||||
td_api::object_ptr<td_api::messageReplyToMessage> get_message_reply_to_message_object(Td *td,
|
td_api::object_ptr<td_api::messageReplyToMessage> get_message_reply_to_message_object(Td *td,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user