Add Message.saved_messages_dialog_id.
This commit is contained in:
parent
2ff04387b8
commit
09e0add01f
@ -3903,6 +3903,7 @@ void MessagesManager::Message::store(StorerT &storer) const {
|
||||
bool has_input_reply_to = !message_id.is_any_server() && input_reply_to.is_valid();
|
||||
bool has_replied_message_info = !replied_message_info.is_empty();
|
||||
bool has_forward_info = forward_info != nullptr;
|
||||
bool has_saved_messages_dialog_id = saved_messages_dialog_id.is_valid();
|
||||
BEGIN_STORE_FLAGS();
|
||||
STORE_FLAG(is_channel_post);
|
||||
STORE_FLAG(is_outgoing);
|
||||
@ -3984,6 +3985,7 @@ void MessagesManager::Message::store(StorerT &storer) const {
|
||||
STORE_FLAG(has_input_reply_to);
|
||||
STORE_FLAG(has_replied_message_info);
|
||||
STORE_FLAG(has_forward_info);
|
||||
STORE_FLAG(has_saved_messages_dialog_id);
|
||||
END_STORE_FLAGS();
|
||||
}
|
||||
|
||||
@ -4098,6 +4100,9 @@ void MessagesManager::Message::store(StorerT &storer) const {
|
||||
if (has_replied_message_info) {
|
||||
store(replied_message_info, storer);
|
||||
}
|
||||
if (has_saved_messages_dialog_id) {
|
||||
store(saved_messages_dialog_id, storer);
|
||||
}
|
||||
}
|
||||
|
||||
// do not forget to resolve message dependencies
|
||||
@ -4151,6 +4156,7 @@ void MessagesManager::Message::parse(ParserT &parser) {
|
||||
bool has_input_reply_to = false;
|
||||
bool has_replied_message_info = false;
|
||||
bool has_forward_info = false;
|
||||
bool has_saved_messages_dialog_id = false;
|
||||
BEGIN_PARSE_FLAGS();
|
||||
PARSE_FLAG(is_channel_post);
|
||||
PARSE_FLAG(is_outgoing);
|
||||
@ -4232,6 +4238,7 @@ void MessagesManager::Message::parse(ParserT &parser) {
|
||||
PARSE_FLAG(has_input_reply_to);
|
||||
PARSE_FLAG(has_replied_message_info);
|
||||
PARSE_FLAG(has_forward_info);
|
||||
PARSE_FLAG(has_saved_messages_dialog_id);
|
||||
END_PARSE_FLAGS();
|
||||
}
|
||||
|
||||
@ -4410,6 +4417,9 @@ void MessagesManager::Message::parse(ParserT &parser) {
|
||||
} else {
|
||||
replied_message_info = RepliedMessageInfo::legacy(legacy_reply_to_message_id, legacy_reply_in_dialog_id);
|
||||
}
|
||||
if (has_saved_messages_dialog_id) {
|
||||
parse(saved_messages_dialog_id, parser);
|
||||
}
|
||||
|
||||
CHECK(content != nullptr);
|
||||
is_content_secret |=
|
||||
@ -12735,6 +12745,23 @@ void MessagesManager::finish_add_secret_message(unique_ptr<PendingSecretMessage>
|
||||
pending_secret_message->success_promise.set_value(Unit()); // TODO: set after message is saved
|
||||
}
|
||||
|
||||
DialogId MessagesManager::get_saved_messages_dialog_id(DialogId my_dialog_id, const Message *m) {
|
||||
if (m->forward_info != nullptr) {
|
||||
auto last_dialog_id = m->forward_info->get_last_dialog_id();
|
||||
if (last_dialog_id.is_valid()) {
|
||||
return last_dialog_id;
|
||||
}
|
||||
auto from_dialog_id = m->forward_info->get_origin().get_sender();
|
||||
if (from_dialog_id.is_valid()) {
|
||||
return my_dialog_id;
|
||||
}
|
||||
if (m->forward_info->get_origin().is_sender_hidden()) {
|
||||
return DialogId(static_cast<int64>(2666000));
|
||||
}
|
||||
}
|
||||
return my_dialog_id;
|
||||
}
|
||||
|
||||
MessagesManager::MessageInfo MessagesManager::parse_telegram_api_message(
|
||||
tl_object_ptr<telegram_api::Message> message_ptr, bool is_scheduled, const char *source) const {
|
||||
LOG(DEBUG) << "Receive from " << source << " " << to_string(message_ptr);
|
||||
@ -12810,6 +12837,9 @@ MessagesManager::MessageInfo MessagesManager::parse_telegram_api_message(
|
||||
message_info.reply_markup = std::move(message->reply_markup_);
|
||||
message_info.restriction_reasons = get_restriction_reasons(std::move(message->restriction_reason_));
|
||||
message_info.author_signature = std::move(message->post_author_);
|
||||
if (message->saved_peer_id_ != nullptr) {
|
||||
message_info.saved_messages_dialog_id = DialogId(message->saved_peer_id_);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case telegram_api::messageService::ID: {
|
||||
@ -12838,6 +12868,9 @@ MessagesManager::MessageInfo MessagesManager::parse_telegram_api_message(
|
||||
message_info.reply_header.replied_message_info_);
|
||||
message_info.reply_header.replied_message_info_ = RepliedMessageInfo();
|
||||
message_info.reply_header.story_full_id_ = StoryFullId();
|
||||
if (message_info.dialog_id == td_->dialog_manager_->get_my_dialog_id()) {
|
||||
message_info.saved_messages_dialog_id = message_info.dialog_id;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -13090,6 +13123,7 @@ std::pair<DialogId, unique_ptr<MessagesManager::Message>> MessagesManager::creat
|
||||
message->reply_to_story_full_id = reply_to_story_full_id;
|
||||
message->restriction_reasons = std::move(message_info.restriction_reasons);
|
||||
message->author_signature = std::move(message_info.author_signature);
|
||||
message->saved_messages_dialog_id = message_info.saved_messages_dialog_id;
|
||||
message->is_outgoing = is_outgoing;
|
||||
message->is_channel_post = is_channel_post;
|
||||
message->contains_mention =
|
||||
@ -13139,6 +13173,19 @@ std::pair<DialogId, unique_ptr<MessagesManager::Message>> MessagesManager::creat
|
||||
message->had_forward_info = true;
|
||||
}
|
||||
|
||||
if (dialog_id == my_dialog_id) {
|
||||
if (!message->saved_messages_dialog_id.is_valid()) {
|
||||
LOG(ERROR) << "Receive no saved messages topic for " << message_id << " in " << dialog_id;
|
||||
message->saved_messages_dialog_id = get_saved_messages_dialog_id(dialog_id, message.get());
|
||||
}
|
||||
} else {
|
||||
if (message->saved_messages_dialog_id.is_valid()) {
|
||||
LOG(ERROR) << "Receive saved messages topic " << message_info.saved_messages_dialog_id << " for " << message_id
|
||||
<< " in " << dialog_id;
|
||||
message->saved_messages_dialog_id = DialogId();
|
||||
}
|
||||
}
|
||||
|
||||
Dependencies dependencies;
|
||||
add_message_dependencies(dependencies, message.get());
|
||||
for (auto dependent_dialog_id : dependencies.get_dialog_ids()) {
|
||||
@ -21352,6 +21399,9 @@ unique_ptr<MessagesManager::Message> MessagesManager::parse_message(Dialog *d, M
|
||||
if (m->is_pinned && is_scheduled) {
|
||||
m->is_pinned = false;
|
||||
}
|
||||
if (dialog_id == td_->dialog_manager_->get_my_dialog_id() && !m->saved_messages_dialog_id.is_valid()) {
|
||||
m->saved_messages_dialog_id = get_saved_messages_dialog_id(dialog_id, m);
|
||||
}
|
||||
|
||||
LOG(INFO) << "Loaded " << m->message_id << " in " << dialog_id << " of size " << value.size() << " from database";
|
||||
return message;
|
||||
@ -22535,6 +22585,9 @@ unique_ptr<MessagesManager::Message> MessagesManager::create_message_to_send(
|
||||
}
|
||||
m->is_content_secret = is_secret_message_content(m->ttl, m->content->get_type());
|
||||
}
|
||||
if (dialog_id == DialogId(my_id)) {
|
||||
m->saved_messages_dialog_id = get_saved_messages_dialog_id(dialog_id, m);
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
@ -22879,6 +22932,7 @@ void MessagesManager::add_message_dependencies(Dependencies &dependencies, const
|
||||
auto is_bot = td_->auth_manager_->is_bot();
|
||||
dependencies.add(m->sender_user_id);
|
||||
dependencies.add_dialog_and_dependencies(m->sender_dialog_id);
|
||||
dependencies.add_dialog_and_dependencies(m->saved_messages_dialog_id);
|
||||
m->replied_message_info.add_dependencies(dependencies, is_bot);
|
||||
dependencies.add_dialog_and_dependencies(m->reply_to_story_full_id.get_dialog_id());
|
||||
dependencies.add_dialog_and_dependencies(m->real_forward_from_dialog_id);
|
||||
@ -26620,6 +26674,9 @@ Result<MessageId> MessagesManager::add_local_message(
|
||||
}
|
||||
m->is_content_secret = is_secret_message_content(m->ttl, m->content->get_type());
|
||||
m->send_emoji = std::move(message_content.emoji);
|
||||
if (dialog_id == DialogId(my_id)) {
|
||||
m->saved_messages_dialog_id = get_saved_messages_dialog_id(dialog_id, m);
|
||||
}
|
||||
|
||||
bool need_update = true;
|
||||
bool need_update_dialog_pos = false;
|
||||
@ -33071,6 +33128,12 @@ bool MessagesManager::update_message(Dialog *d, Message *old_message, unique_ptr
|
||||
<< new_message->had_forward_info;
|
||||
old_message->had_forward_info = new_message->had_forward_info;
|
||||
}
|
||||
if (old_message->saved_messages_dialog_id != new_message->saved_messages_dialog_id) {
|
||||
LOG(ERROR) << "Saved messages topic for " << message_id << " in " << dialog_id << " changed from "
|
||||
<< old_message->saved_messages_dialog_id << " to " << new_message->saved_messages_dialog_id;
|
||||
old_message->saved_messages_dialog_id = new_message->saved_messages_dialog_id;
|
||||
need_send_update = true;
|
||||
}
|
||||
if (old_message->notification_id != new_message->notification_id) {
|
||||
CHECK(!is_scheduled);
|
||||
if (old_message->notification_id.is_valid()) {
|
||||
|
@ -948,6 +948,7 @@ class MessagesManager final : public Actor {
|
||||
MessageId message_id;
|
||||
UserId sender_user_id;
|
||||
DialogId sender_dialog_id;
|
||||
DialogId saved_messages_dialog_id;
|
||||
int32 date = 0;
|
||||
int32 ttl_period = 0;
|
||||
int32 ttl = 0;
|
||||
@ -985,6 +986,7 @@ class MessagesManager final : public Actor {
|
||||
MessageId message_id;
|
||||
UserId sender_user_id;
|
||||
DialogId sender_dialog_id;
|
||||
DialogId saved_messages_dialog_id;
|
||||
int32 date = 0;
|
||||
int32 edit_date = 0;
|
||||
int32 send_date = 0;
|
||||
@ -1609,6 +1611,8 @@ class MessagesManager final : public Actor {
|
||||
void finish_delete_secret_chat_history(DialogId dialog_id, bool remove_from_dialog_list, MessageId last_message_id,
|
||||
Promise<Unit> promise);
|
||||
|
||||
static DialogId get_saved_messages_dialog_id(DialogId my_dialog_id, const Message *m);
|
||||
|
||||
MessageInfo parse_telegram_api_message(tl_object_ptr<telegram_api::Message> message_ptr, bool is_scheduled,
|
||||
const char *source) const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user