diff options
Diffstat (limited to 'protocols/Telegram/tdlib/td/td/telegram/WebPageBlock.h')
-rw-r--r-- | protocols/Telegram/tdlib/td/td/telegram/WebPageBlock.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/protocols/Telegram/tdlib/td/td/telegram/WebPageBlock.h b/protocols/Telegram/tdlib/td/td/telegram/WebPageBlock.h new file mode 100644 index 0000000000..887a0f1b9e --- /dev/null +++ b/protocols/Telegram/tdlib/td/td/telegram/WebPageBlock.h @@ -0,0 +1,107 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// +// 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/files/FileId.h" +#include "td/telegram/logevent/LogEvent.h" +#include "td/telegram/Photo.h" +#include "td/telegram/td_api.h" +#include "td/telegram/telegram_api.h" + +#include "td/utils/common.h" +#include "td/utils/FlatHashMap.h" +#include "td/utils/Slice.h" + +namespace td { + +struct GetWebPageBlockObjectContext; + +class Td; + +class WebPageBlock { + protected: + enum class Type : int32 { + Title, + Subtitle, + AuthorDate, + Header, + Subheader, + Paragraph, + Preformatted, + Footer, + Divider, + Anchor, + List, + BlockQuote, + PullQuote, + Animation, + Photo, + Video, + Cover, + Embedded, + EmbeddedPost, + Collage, + Slideshow, + ChatLink, + Audio, + Kicker, + Table, + Details, + RelatedArticles, + Map, + VoiceNote, + Size + }; + + virtual Type get_type() const = 0; + + template <class F> + static void call_impl(Type type, const WebPageBlock *ptr, F &&f); + + template <class StorerT> + void store(StorerT &storer) const; + + template <class ParserT> + static unique_ptr<WebPageBlock> parse(ParserT &parser); + + template <class StorerT> + friend void store_web_page_block(const unique_ptr<WebPageBlock> &block, StorerT &storer); + + template <class ParserT> + friend void parse_web_page_block(unique_ptr<WebPageBlock> &block, ParserT &parser); + + using Context = GetWebPageBlockObjectContext; + + public: + WebPageBlock() = default; + WebPageBlock(const WebPageBlock &) = delete; + WebPageBlock &operator=(const WebPageBlock &) = delete; + WebPageBlock(WebPageBlock &&) = delete; + WebPageBlock &operator=(WebPageBlock &&) = delete; + virtual ~WebPageBlock() = default; + + virtual void append_file_ids(const Td *td, vector<FileId> &file_ids) const = 0; + + virtual td_api::object_ptr<td_api::PageBlock> get_page_block_object(Context *context) const = 0; +}; + +void store(const unique_ptr<WebPageBlock> &block, LogEventStorerCalcLength &storer); + +void store(const unique_ptr<WebPageBlock> &block, LogEventStorerUnsafe &storer); + +void parse(unique_ptr<WebPageBlock> &block, LogEventParser &parser); + +vector<unique_ptr<WebPageBlock>> get_web_page_blocks( + Td *td, vector<tl_object_ptr<telegram_api::PageBlock>> page_block_ptrs, + const FlatHashMap<int64, FileId> &animations, const FlatHashMap<int64, FileId> &audios, + const FlatHashMap<int64, FileId> &documents, const FlatHashMap<int64, unique_ptr<Photo>> &photos, + const FlatHashMap<int64, FileId> &videos, const FlatHashMap<int64, FileId> &voice_notes); + +vector<td_api::object_ptr<td_api::PageBlock>> get_page_blocks_object( + const vector<unique_ptr<WebPageBlock>> &page_blocks, Td *td, Slice base_url, Slice real_url); + +} // namespace td |