From 0618005a95930dc5f41fe3806ce3a19ae9bfcc76 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 26 Nov 2019 19:53:10 +0300 Subject: [PATCH] Add FullMessageId.h. GitOrigin-RevId: 758133149ff3317b3d9d3f86b1a841e8f34ca35a --- CMakeLists.txt | 1 + td/telegram/CallbackQueriesManager.h | 1 + td/telegram/FileReferenceManager.h | 2 +- td/telegram/FullMessageId.h | 70 ++++++++++++++++++++++++++++ td/telegram/MessageContent.h | 1 + td/telegram/MessageId.cpp | 5 ++ td/telegram/MessageId.h | 60 +----------------------- td/telegram/MessagesDb.h | 1 + td/telegram/MessagesManager.cpp | 4 +- td/telegram/MessagesManager.h | 1 + td/telegram/NotificationManager.h | 1 + td/telegram/PollManager.h | 2 +- td/telegram/Td.cpp | 1 + td/telegram/WebPagesManager.cpp | 6 +-- td/telegram/WebPagesManager.h | 4 +- 15 files changed, 92 insertions(+), 68 deletions(-) create mode 100644 td/telegram/FullMessageId.h diff --git a/CMakeLists.txt b/CMakeLists.txt index be7f0ab46..9ff1dab79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -558,6 +558,7 @@ set(TDLIB_SOURCE td/telegram/files/ResourceManager.h td/telegram/files/ResourceState.h td/telegram/FolderId.h + td/telegram/FullMessageId.h td/telegram/Game.h td/telegram/Global.h td/telegram/HashtagHints.h diff --git a/td/telegram/CallbackQueriesManager.h b/td/telegram/CallbackQueriesManager.h index 7835bef17..a5a2709c7 100644 --- a/td/telegram/CallbackQueriesManager.h +++ b/td/telegram/CallbackQueriesManager.h @@ -10,6 +10,7 @@ #include "td/telegram/telegram_api.h" #include "td/telegram/DialogId.h" +#include "td/telegram/FullMessageId.h" #include "td/telegram/MessageId.h" #include "td/telegram/UserId.h" diff --git a/td/telegram/FileReferenceManager.h b/td/telegram/FileReferenceManager.h index 94cbd3e30..1758d68f0 100644 --- a/td/telegram/FileReferenceManager.h +++ b/td/telegram/FileReferenceManager.h @@ -14,7 +14,7 @@ #include "td/telegram/ChatId.h" #include "td/telegram/files/FileId.h" #include "td/telegram/files/FileSourceId.h" -#include "td/telegram/MessageId.h" +#include "td/telegram/FullMessageId.h" #include "td/telegram/PhotoSizeSource.h" #include "td/telegram/SetWithPosition.h" #include "td/telegram/UserId.h" diff --git a/td/telegram/FullMessageId.h b/td/telegram/FullMessageId.h new file mode 100644 index 000000000..0dc695918 --- /dev/null +++ b/td/telegram/FullMessageId.h @@ -0,0 +1,70 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2019 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#pragma once + +#include "td/telegram/DialogId.h" +#include "td/telegram/MessageId.h" + +#include "td/utils/common.h" +#include "td/utils/StringBuilder.h" + +#include + +namespace td { + +struct FullMessageId { + private: + DialogId dialog_id; + MessageId message_id; + + public: + FullMessageId() : dialog_id(), message_id() { + } + + FullMessageId(DialogId dialog_id, MessageId message_id) : dialog_id(dialog_id), message_id(message_id) { + } + + bool operator==(const FullMessageId &other) const { + return dialog_id == other.dialog_id && message_id == other.message_id; + } + + bool operator!=(const FullMessageId &other) const { + return !(*this == other); + } + + DialogId get_dialog_id() const { + return dialog_id; + } + MessageId get_message_id() const { + return message_id; + } + + template + void store(StorerT &storer) const { + dialog_id.store(storer); + message_id.store(storer); + } + + template + void parse(ParserT &parser) { + dialog_id.parse(parser); + message_id.parse(parser); + } +}; + +struct FullMessageIdHash { + std::size_t operator()(FullMessageId full_message_id) const { + return DialogIdHash()(full_message_id.get_dialog_id()) * 2023654985u + + MessageIdHash()(full_message_id.get_message_id()); + } +}; + +inline StringBuilder &operator<<(StringBuilder &string_builder, FullMessageId full_message_id) { + return string_builder << full_message_id.get_message_id() << " in " << full_message_id.get_dialog_id(); +} + +} // namespace td diff --git a/td/telegram/MessageContent.h b/td/telegram/MessageContent.h index b297fd380..790e38a9e 100644 --- a/td/telegram/MessageContent.h +++ b/td/telegram/MessageContent.h @@ -9,6 +9,7 @@ #include "td/telegram/Dependencies.h" #include "td/telegram/DialogId.h" #include "td/telegram/files/FileId.h" +#include "td/telegram/FullMessageId.h" #include "td/telegram/logevent/LogEvent.h" #include "td/telegram/MessageEntity.h" #include "td/telegram/MessageId.h" diff --git a/td/telegram/MessageId.cpp b/td/telegram/MessageId.cpp index 0f05066b2..f321024f8 100644 --- a/td/telegram/MessageId.cpp +++ b/td/telegram/MessageId.cpp @@ -63,6 +63,11 @@ MessageType MessageId::get_type() const { } } +ServerMessageId MessageId::get_server_message_id() const { + CHECK(id == 0 || is_server()); + return ServerMessageId(narrow_cast(id >> SERVER_ID_SHIFT)); +} + MessageId MessageId::get_next_message_id(MessageType type) const { switch (type) { case MessageType::Server: diff --git a/td/telegram/MessageId.h b/td/telegram/MessageId.h index ba8958ab0..98c6eedea 100644 --- a/td/telegram/MessageId.h +++ b/td/telegram/MessageId.h @@ -6,12 +6,10 @@ // #pragma once -#include "td/telegram/DialogId.h" #include "td/telegram/ServerMessageId.h" #include "td/utils/common.h" #include "td/utils/StringBuilder.h" -#include "td/utils/tl_helpers.h" #include #include @@ -97,10 +95,7 @@ class MessageId { return (id & SHORT_TYPE_MASK) == 0; } - ServerMessageId get_server_message_id() const { - CHECK(id == 0 || is_server()); - return ServerMessageId(narrow_cast(id >> SERVER_ID_SHIFT)); - } + ServerMessageId get_server_message_id() const; // returns greatest server message id not bigger than this message id MessageId get_prev_server_message_id() const { @@ -144,57 +139,4 @@ struct MessageIdHash { } }; -struct FullMessageId { - private: - DialogId dialog_id; - MessageId message_id; - - public: - FullMessageId() : dialog_id(), message_id() { - } - - FullMessageId(DialogId dialog_id, MessageId message_id) : dialog_id(dialog_id), message_id(message_id) { - } - - bool operator==(const FullMessageId &other) const { - return dialog_id == other.dialog_id && message_id == other.message_id; - } - - bool operator!=(const FullMessageId &other) const { - return !(*this == other); - } - - DialogId get_dialog_id() const { - return dialog_id; - } - MessageId get_message_id() const { - return message_id; - } - - template - void store(StorerT &storer) const { - using ::td::store; - store(dialog_id, storer); - store(message_id, storer); - } - - template - void parse(ParserT &parser) { - using ::td::parse; - parse(dialog_id, parser); - parse(message_id, parser); - } -}; - -struct FullMessageIdHash { - std::size_t operator()(FullMessageId full_message_id) const { - return DialogIdHash()(full_message_id.get_dialog_id()) * 2023654985u + - MessageIdHash()(full_message_id.get_message_id()); - } -}; - -inline StringBuilder &operator<<(StringBuilder &string_builder, FullMessageId full_message_id) { - return string_builder << full_message_id.get_message_id() << " in " << full_message_id.get_dialog_id(); -} - } // namespace td diff --git a/td/telegram/MessagesDb.h b/td/telegram/MessagesDb.h index 05556636c..991f10b0f 100644 --- a/td/telegram/MessagesDb.h +++ b/td/telegram/MessagesDb.h @@ -7,6 +7,7 @@ #pragma once #include "td/telegram/DialogId.h" +#include "td/telegram/FullMessageId.h" #include "td/telegram/MessageId.h" #include "td/telegram/NotificationId.h" #include "td/telegram/ServerMessageId.h" diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index ecc2908cc..77cc258f5 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -24369,8 +24369,8 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq auto web_page_id = get_message_content_web_page_id(message->content.get()); if (web_page_id.is_valid() && !td_->web_pages_manager_->have_web_page(web_page_id)) { waiting_for_web_page_messages_.emplace(dialog_id, message_id); - send_closure(G()->web_pages_manager(), &WebPagesManager::wait_for_pending_web_page, dialog_id, message_id, - web_page_id); + send_closure(G()->web_pages_manager(), &WebPagesManager::wait_for_pending_web_page, + FullMessageId{dialog_id, message_id}, web_page_id); } if (*need_update && message_id.get() <= d->last_new_message_id.get()) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index a980ce2d1..ea377bc5a 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -22,6 +22,7 @@ #include "td/telegram/files/FileId.h" #include "td/telegram/files/FileSourceId.h" #include "td/telegram/FolderId.h" +#include "td/telegram/FullMessageId.h" #include "td/telegram/Global.h" #include "td/telegram/MessageContent.h" #include "td/telegram/MessageEntity.h" diff --git a/td/telegram/NotificationManager.h b/td/telegram/NotificationManager.h index d0f59079a..5423d68fd 100644 --- a/td/telegram/NotificationManager.h +++ b/td/telegram/NotificationManager.h @@ -9,6 +9,7 @@ #include "td/telegram/CallId.h" #include "td/telegram/DialogId.h" #include "td/telegram/Document.h" +#include "td/telegram/FullMessageId.h" #include "td/telegram/MessageId.h" #include "td/telegram/Notification.h" #include "td/telegram/NotificationGroupId.h" diff --git a/td/telegram/PollManager.h b/td/telegram/PollManager.h index bfb37b6cf..9233bbbda 100644 --- a/td/telegram/PollManager.h +++ b/td/telegram/PollManager.h @@ -6,7 +6,7 @@ // #pragma once -#include "td/telegram/MessageId.h" +#include "td/telegram/FullMessageId.h" #include "td/telegram/net/NetQuery.h" #include "td/telegram/PollId.h" #include "td/telegram/ReplyMarkup.h" diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 3106d1707..39c5b1c47 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -34,6 +34,7 @@ #include "td/telegram/files/FileSourceId.h" #include "td/telegram/files/FileType.h" #include "td/telegram/FolderId.h" +#include "td/telegram/FullMessageId.h" #include "td/telegram/Global.h" #include "td/telegram/HashtagHints.h" #include "td/telegram/InlineQueriesManager.h" diff --git a/td/telegram/WebPagesManager.cpp b/td/telegram/WebPagesManager.cpp index 6da849065..e6d65a936 100644 --- a/td/telegram/WebPagesManager.cpp +++ b/td/telegram/WebPagesManager.cpp @@ -639,9 +639,9 @@ void WebPagesManager::on_get_web_page_by_url(const string &url, WebPageId web_pa cached_web_page_id = web_page_id; } -void WebPagesManager::wait_for_pending_web_page(DialogId dialog_id, MessageId message_id, WebPageId web_page_id) { - LOG(INFO) << "Waiting for " << web_page_id << " needed in " << message_id << " in " << dialog_id; - pending_web_pages_[web_page_id].emplace(dialog_id, message_id); +void WebPagesManager::wait_for_pending_web_page(FullMessageId full_message_id, WebPageId web_page_id) { + LOG(INFO) << "Waiting for " << web_page_id << " needed in " << full_message_id; + pending_web_pages_[web_page_id].emplace(full_message_id); pending_web_pages_timeout_.add_timeout_in(web_page_id.get(), 1.0); } diff --git a/td/telegram/WebPagesManager.h b/td/telegram/WebPagesManager.h index e048f6c9c..3847ba8b7 100644 --- a/td/telegram/WebPagesManager.h +++ b/td/telegram/WebPagesManager.h @@ -12,7 +12,7 @@ #include "td/telegram/DialogId.h" #include "td/telegram/files/FileId.h" #include "td/telegram/files/FileSourceId.h" -#include "td/telegram/MessageId.h" +#include "td/telegram/FullMessageId.h" #include "td/telegram/Photo.h" #include "td/telegram/WebPageId.h" @@ -47,7 +47,7 @@ class WebPagesManager : public Actor { void on_get_web_page_by_url(const string &url, WebPageId web_page_id, bool from_database); - void wait_for_pending_web_page(DialogId dialog_id, MessageId message_id, WebPageId web_page_id); + void wait_for_pending_web_page(FullMessageId full_message_id, WebPageId web_page_id); bool have_web_page(WebPageId web_page_id) const;