diff options
Diffstat (limited to 'protocols/Telegram/tdlib/td/td/telegram/StickerFormat.cpp')
-rw-r--r-- | protocols/Telegram/tdlib/td/td/telegram/StickerFormat.cpp | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/protocols/Telegram/tdlib/td/td/telegram/StickerFormat.cpp b/protocols/Telegram/tdlib/td/td/telegram/StickerFormat.cpp new file mode 100644 index 0000000000..9ec9b60ae0 --- /dev/null +++ b/protocols/Telegram/tdlib/td/td/telegram/StickerFormat.cpp @@ -0,0 +1,181 @@ +// +// 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) +// +#include "td/telegram/StickerFormat.h" + +#include "td/utils/logging.h" + +namespace td { + +StickerFormat get_sticker_format(const td_api::object_ptr<td_api::StickerFormat> &format) { + CHECK(format != nullptr); + switch (format->get_id()) { + case td_api::stickerFormatWebp::ID: + return StickerFormat::Webp; + case td_api::stickerFormatTgs::ID: + return StickerFormat::Tgs; + case td_api::stickerFormatWebm::ID: + return StickerFormat::Webm; + default: + UNREACHABLE(); + return StickerFormat::Unknown; + } +} + +StickerFormat get_sticker_format_by_mime_type(Slice mime_type) { + if (mime_type == "application/x-tgsticker") { + return StickerFormat::Tgs; + } + if (mime_type == "image/webp") { + return StickerFormat::Webp; + } + if (mime_type == "video/webm") { + return StickerFormat::Webm; + } + return StickerFormat::Unknown; +} + +StickerFormat get_sticker_format_by_extension(Slice extension) { + if (extension == "tgs") { + return StickerFormat::Tgs; + } + if (extension == "webp") { + return StickerFormat::Webp; + } + if (extension == "webm") { + return StickerFormat::Webm; + } + return StickerFormat::Unknown; +} + +td_api::object_ptr<td_api::StickerFormat> get_sticker_format_object(StickerFormat sticker_format) { + switch (sticker_format) { + case StickerFormat::Unknown: + LOG(ERROR) << "Have a sticker of unknown format"; + return td_api::make_object<td_api::stickerFormatWebp>(); + case StickerFormat::Webp: + return td_api::make_object<td_api::stickerFormatWebp>(); + case StickerFormat::Tgs: + return td_api::make_object<td_api::stickerFormatTgs>(); + case StickerFormat::Webm: + return td_api::make_object<td_api::stickerFormatWebm>(); + default: + UNREACHABLE(); + return nullptr; + } +} + +string get_sticker_format_mime_type(StickerFormat sticker_format) { + switch (sticker_format) { + case StickerFormat::Unknown: + case StickerFormat::Webp: + return "image/webp"; + case StickerFormat::Tgs: + return "application/x-tgsticker"; + case StickerFormat::Webm: + return "video/webm"; + default: + UNREACHABLE(); + return string(); + } +} + +Slice get_sticker_format_extension(StickerFormat sticker_format) { + switch (sticker_format) { + case StickerFormat::Unknown: + return Slice(); + case StickerFormat::Webp: + return Slice(".webp"); + case StickerFormat::Tgs: + return Slice(".tgs"); + case StickerFormat::Webm: + return Slice(".webm"); + default: + UNREACHABLE(); + return Slice(); + } +} + +PhotoFormat get_sticker_format_photo_format(StickerFormat sticker_format) { + switch (sticker_format) { + case StickerFormat::Unknown: + case StickerFormat::Webp: + return PhotoFormat::Webp; + case StickerFormat::Tgs: + return PhotoFormat::Tgs; + case StickerFormat::Webm: + return PhotoFormat::Webm; + default: + UNREACHABLE(); + return PhotoFormat::Webp; + } +} + +bool is_sticker_format_animated(StickerFormat sticker_format) { + switch (sticker_format) { + case StickerFormat::Unknown: + return false; + case StickerFormat::Webp: + return false; + case StickerFormat::Tgs: + return true; + case StickerFormat::Webm: + return true; + default: + UNREACHABLE(); + return false; + } +} + +bool is_sticker_format_vector(StickerFormat sticker_format) { + switch (sticker_format) { + case StickerFormat::Unknown: + return false; + case StickerFormat::Webp: + return false; + case StickerFormat::Tgs: + return true; + case StickerFormat::Webm: + return false; + default: + UNREACHABLE(); + return false; + } +} + +int64 get_max_sticker_file_size(StickerFormat sticker_format, StickerType sticker_type, bool for_thumbnail) { + bool is_custom_emoji = sticker_type == StickerType::CustomEmoji; + switch (sticker_format) { + case StickerFormat::Unknown: + case StickerFormat::Webp: + return for_thumbnail ? (1 << 17) : (is_custom_emoji ? (1 << 17) : (1 << 19)); + case StickerFormat::Tgs: + return for_thumbnail ? (1 << 15) : (1 << 16); + case StickerFormat::Webm: + return for_thumbnail ? (1 << 15) : (is_custom_emoji ? (1 << 16) : (1 << 18)); + default: + UNREACHABLE(); + return 0; + } +} + +StringBuilder &operator<<(StringBuilder &string_builder, StickerFormat sticker_format) { + switch (sticker_format) { + case StickerFormat::Unknown: + return string_builder << "unknown"; + case StickerFormat::Webp: + return string_builder << "WEBP"; + case StickerFormat::Tgs: + return string_builder << "TGS"; + case StickerFormat::Webm: + return string_builder << "WEBM"; + default: + UNREACHABLE(); + return string_builder; + } +} + +} // namespace td |