tdlight/td/telegram/StickerFormat.cpp

155 lines
4.1 KiB
C++
Raw Normal View History

2022-01-18 17:20:43 +01:00
//
// 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"
2022-01-25 12:58:04 +01:00
#include "td/utils/logging.h"
2022-01-18 17:20:43 +01:00
namespace td {
StickerFormat get_sticker_format_by_mime_type(Slice mime_type) {
2022-01-18 17:20:43 +01:00
if (mime_type == "application/x-tgsticker") {
return StickerFormat::Tgs;
}
if (mime_type == "image/webp") {
return StickerFormat::Webp;
}
2022-01-25 12:58:04 +01:00
if (mime_type == "video/webm") {
return StickerFormat::Webm;
}
2022-01-18 17:20:43 +01:00
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::StickerType> get_sticker_type_object(
2022-01-25 13:27:06 +01:00
StickerFormat sticker_format, bool is_masks, td_api::object_ptr<td_api::maskPosition> mask_position) {
2022-01-25 12:58:04 +01:00
switch (sticker_format) {
case StickerFormat::Unknown:
LOG(ERROR) << "Have a sticker of unknown format";
return td_api::make_object<td_api::stickerTypeStatic>();
2022-01-25 12:58:04 +01:00
case StickerFormat::Webp:
2022-01-25 13:27:06 +01:00
if (is_masks) {
return td_api::make_object<td_api::stickerTypeMask>(std::move(mask_position));
2022-01-25 13:27:06 +01:00
}
return td_api::make_object<td_api::stickerTypeStatic>();
2022-01-25 12:58:04 +01:00
case StickerFormat::Tgs:
return td_api::make_object<td_api::stickerTypeAnimated>();
2022-01-25 12:58:04 +01:00
case StickerFormat::Webm:
return td_api::make_object<td_api::stickerTypeVideo>();
2022-01-25 12:58:04 +01:00
default:
UNREACHABLE();
return nullptr;
}
}
2022-01-18 17:20:43 +01:00
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";
2022-01-25 12:58:04 +01:00
case StickerFormat::Webm:
return "video/webm";
2022-01-18 17:20:43 +01:00
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");
2022-01-25 12:58:04 +01:00
case StickerFormat::Webm:
return Slice(".webm");
2022-01-18 17:20:43 +01:00
default:
UNREACHABLE();
return Slice();
}
}
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;
2022-01-25 12:58:04 +01:00
case StickerFormat::Webm:
return true;
2022-01-18 17:20:43 +01:00
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;
2022-01-25 12:58:04 +01:00
case StickerFormat::Webm:
return false;
2022-01-18 17:20:43 +01:00
default:
UNREACHABLE();
return false;
}
}
2022-01-23 14:18:33 +01:00
int64 get_max_sticker_file_size(StickerFormat sticker_format, bool for_thumbnail) {
2022-01-18 17:20:43 +01:00
switch (sticker_format) {
case StickerFormat::Unknown:
case StickerFormat::Webp:
return for_thumbnail ? (1 << 17) : (1 << 19);
case StickerFormat::Tgs:
return for_thumbnail ? (1 << 15) : (1 << 16);
2022-01-25 12:58:04 +01:00
case StickerFormat::Webm:
return for_thumbnail ? (1 << 15) : (1 << 18);
2022-01-18 17:20:43 +01:00
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";
2022-01-25 12:58:04 +01:00
case StickerFormat::Webm:
return string_builder << "WEBM";
2022-01-18 17:20:43 +01:00
default:
UNREACHABLE();
return string_builder;
}
}
} // namespace td