summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tdlib/td/td/telegram/WebPageBlock.h
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/tdlib/td/td/telegram/WebPageBlock.h')
-rw-r--r--protocols/Telegram/tdlib/td/td/telegram/WebPageBlock.h107
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