From e082b2ac490765a5c26ba2833d06fac46aa924df Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 14 Sep 2020 01:39:34 +0300 Subject: [PATCH] Store public message links separately for each dialog. GitOrigin-RevId: 2b227d07c8ec7c42cabd7af78ffde3ff07799f92 --- td/telegram/MessagesManager.cpp | 13 ++++++++----- td/telegram/MessagesManager.h | 5 ++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index ee8a9f413..8127db0f9 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -15652,8 +15652,9 @@ std::pair MessagesManager::get_public_message_link(FullMessageId return {}; } - auto it = public_message_links_[for_group].find({linked_dialog_id, linked_message_id}); - if (it == public_message_links_[for_group].end()) { + auto &links = public_message_links_[for_group][linked_dialog_id].links_; + auto it = links.find(linked_message_id); + if (it == links.end()) { td_->create_handler(std::move(promise)) ->send(linked_dialog_id.get_channel_id(), linked_message_id, for_group, false); return {}; @@ -15665,8 +15666,9 @@ std::pair MessagesManager::get_public_message_link(FullMessageId } } - auto it = public_message_links_[for_group].find(full_message_id); - if (it == public_message_links_[for_group].end()) { + auto &links = public_message_links_[for_group][dialog_id].links_; + auto it = links.find(m->message_id); + if (it == links.end()) { td_->create_handler(std::move(promise)) ->send(dialog_id.get_channel_id(), m->message_id, for_group, false); return {}; @@ -15683,7 +15685,8 @@ std::pair MessagesManager::get_public_message_link(FullMessageId void MessagesManager::on_get_public_message_link(FullMessageId full_message_id, bool for_group, string url, string html) { LOG_IF(ERROR, url.empty() && html.empty()) << "Receive empty public link for " << full_message_id; - public_message_links_[for_group][full_message_id] = {std::move(url), std::move(html)}; + public_message_links_[for_group][full_message_id.get_dialog_id()].links_[full_message_id.get_message_id()] = { + std::move(url), std::move(html)}; } string MessagesManager::get_message_link(FullMessageId full_message_id, Promise &&promise) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 1bf891e62..681f5fbdb 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2978,7 +2978,10 @@ class MessagesManager : public Actor { std::unordered_map found_fts_messages_; // random_id -> FoundMessages std::unordered_map found_message_public_forwards_; // random_id -> FoundMessages - std::unordered_map, FullMessageIdHash> public_message_links_[2]; + struct PublicMessageLinks { + std::unordered_map, MessageIdHash> links_; + }; + std::unordered_map public_message_links_[2]; std::unordered_map> chat_events_; // random_id -> chat events