From ba5643f775e955ef3ba8b29294ac903332ae9c87 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 21 Feb 2023 14:58:52 +0300 Subject: [PATCH] Add document flags. --- td/telegram/DocumentsManager.hpp | 57 +++++++++++++++++++++++++++----- td/telegram/Version.h | 1 + 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/td/telegram/DocumentsManager.hpp b/td/telegram/DocumentsManager.hpp index f984286eb..494415cf7 100644 --- a/td/telegram/DocumentsManager.hpp +++ b/td/telegram/DocumentsManager.hpp @@ -20,22 +20,63 @@ template void DocumentsManager::store_document(FileId file_id, StorerT &storer) const { const GeneralDocument *document = get_document(file_id); CHECK(document != nullptr); - store(document->file_name, storer); - store(document->mime_type, storer); - store(document->minithumbnail, storer); - store(document->thumbnail, storer); + bool has_file_name = !document->file_name.empty(); + bool has_mime_type = !document->mime_type.empty(); + bool has_minithumbnail = !document->minithumbnail.empty(); + bool has_thumbnail = document->thumbnail.file_id.is_valid(); + BEGIN_STORE_FLAGS(); + STORE_FLAG(has_file_name); + STORE_FLAG(has_mime_type); + STORE_FLAG(has_minithumbnail); + STORE_FLAG(has_thumbnail); + END_STORE_FLAGS(); + if (has_file_name) { + store(document->file_name, storer); + } + if (has_mime_type) { + store(document->mime_type, storer); + } + if (has_minithumbnail) { + store(document->minithumbnail, storer); + } + if (has_thumbnail) { + store(document->thumbnail, storer); + } store(file_id, storer); } template FileId DocumentsManager::parse_document(ParserT &parser) { auto document = make_unique(); - parse(document->file_name, parser); - parse(document->mime_type, parser); - if (parser.version() >= static_cast(Version::SupportMinithumbnails)) { + bool has_file_name; + bool has_mime_type; + bool has_minithumbnail; + bool has_thumbnail; + if (parser.version() >= static_cast(Version::AddDocumentFlags)) { + BEGIN_PARSE_FLAGS(); + PARSE_FLAG(has_file_name); + PARSE_FLAG(has_mime_type); + PARSE_FLAG(has_minithumbnail); + PARSE_FLAG(has_thumbnail); + END_PARSE_FLAGS(); + } else { + has_file_name = true; + has_mime_type = true; + has_minithumbnail = parser.version() >= static_cast(Version::SupportMinithumbnails); + has_thumbnail = true; + } + if (has_file_name) { + parse(document->file_name, parser); + } + if (has_mime_type) { + parse(document->mime_type, parser); + } + if (has_minithumbnail) { parse(document->minithumbnail, parser); } - parse(document->thumbnail, parser); + if (has_thumbnail) { + parse(document->thumbnail, parser); + } parse(document->file_id, parser); if (parser.get_error() != nullptr || !document->file_id.is_valid()) { return FileId(); diff --git a/td/telegram/Version.h b/td/telegram/Version.h index c9b4d4732..8fdf36836 100644 --- a/td/telegram/Version.h +++ b/td/telegram/Version.h @@ -60,6 +60,7 @@ enum class Version : int32 { AddMessageChatSetTtlFlags, AddMessageMediaSpoiler, // 45 MakeParticipantFlags64Bit, + AddDocumentFlags, Next };