Support emoji stickers in get_max_sticker_file_size.
This commit is contained in:
parent
4442293acf
commit
7cd65d06a1
@ -21,6 +21,7 @@
|
||||
#include "td/telegram/secret_api.h"
|
||||
#include "td/telegram/StickerFormat.h"
|
||||
#include "td/telegram/StickersManager.h"
|
||||
#include "td/telegram/StickerType.h"
|
||||
#include "td/telegram/Td.h"
|
||||
#include "td/telegram/td_api.h"
|
||||
#include "td/telegram/telegram_api.h"
|
||||
@ -422,7 +423,7 @@ Document DocumentsManager::on_get_document(RemoteDocument remote_document, Dialo
|
||||
default_extension = Slice("webm");
|
||||
}
|
||||
if (file_type == FileType::Encrypted && document_type == Document::Type::Sticker &&
|
||||
size > get_max_sticker_file_size(sticker_format, false)) {
|
||||
size > get_max_sticker_file_size(sticker_format, StickerType::Regular, false)) {
|
||||
document_type = Document::Type::General;
|
||||
}
|
||||
|
||||
|
@ -146,15 +146,16 @@ bool is_sticker_format_vector(StickerFormat sticker_format) {
|
||||
}
|
||||
}
|
||||
|
||||
int64 get_max_sticker_file_size(StickerFormat sticker_format, bool for_thumbnail) {
|
||||
int64 get_max_sticker_file_size(StickerFormat sticker_format, StickerType sticker_type, bool for_thumbnail) {
|
||||
bool is_emoji = sticker_type == StickerType::Emoji;
|
||||
switch (sticker_format) {
|
||||
case StickerFormat::Unknown:
|
||||
case StickerFormat::Webp:
|
||||
return for_thumbnail ? (1 << 17) : (1 << 19);
|
||||
return for_thumbnail ? (1 << 17) : (is_emoji ? (1 << 17) : (1 << 19));
|
||||
case StickerFormat::Tgs:
|
||||
return for_thumbnail ? (1 << 15) : (1 << 16);
|
||||
case StickerFormat::Webm:
|
||||
return for_thumbnail ? (1 << 15) : (1 << 18);
|
||||
return for_thumbnail ? (1 << 15) : (is_emoji ? (1 << 16) : (1 << 18));
|
||||
default:
|
||||
UNREACHABLE();
|
||||
return 0;
|
||||
|
@ -7,6 +7,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "td/telegram/PhotoFormat.h"
|
||||
#include "td/telegram/StickerType.h"
|
||||
#include "td/telegram/td_api.h"
|
||||
|
||||
#include "td/utils/common.h"
|
||||
@ -36,7 +37,7 @@ bool is_sticker_format_animated(StickerFormat sticker_format);
|
||||
|
||||
bool is_sticker_format_vector(StickerFormat sticker_format);
|
||||
|
||||
int64 get_max_sticker_file_size(StickerFormat sticker_format, bool for_thumbnail);
|
||||
int64 get_max_sticker_file_size(StickerFormat sticker_format, StickerType sticker_type, bool for_thumbnail);
|
||||
|
||||
StringBuilder &operator<<(StringBuilder &string_builder, StickerFormat sticker_format);
|
||||
|
||||
|
@ -6028,11 +6028,12 @@ Result<std::tuple<FileId, bool, bool, StickerFormat>> StickersManager::prepare_i
|
||||
return Status::Error(400, "Sticker format must be non-empty");
|
||||
}
|
||||
|
||||
return prepare_input_file(sticker->sticker_, get_sticker_format(sticker->format_), false);
|
||||
return prepare_input_file(sticker->sticker_, get_sticker_format(sticker->format_), get_sticker_type(sticker->type_),
|
||||
false);
|
||||
}
|
||||
|
||||
Result<std::tuple<FileId, bool, bool, StickerFormat>> StickersManager::prepare_input_file(
|
||||
const tl_object_ptr<td_api::InputFile> &input_file, StickerFormat format, bool for_thumbnail) {
|
||||
const tl_object_ptr<td_api::InputFile> &input_file, StickerFormat format, StickerType type, bool for_thumbnail) {
|
||||
auto file_type = format == StickerFormat::Tgs ? FileType::Sticker : FileType::Document;
|
||||
auto r_file_id = td_->file_manager_->get_input_file_id(file_type, input_file, DialogId(), for_thumbnail, false);
|
||||
if (r_file_id.is_error()) {
|
||||
@ -6070,7 +6071,7 @@ Result<std::tuple<FileId, bool, bool, StickerFormat>> StickersManager::prepare_i
|
||||
is_url = true;
|
||||
} else {
|
||||
if (file_view.has_local_location() &&
|
||||
file_view.expected_size() > get_max_sticker_file_size(format, for_thumbnail)) {
|
||||
file_view.expected_size() > get_max_sticker_file_size(format, type, for_thumbnail)) {
|
||||
return Status::Error(400, "File is too big");
|
||||
}
|
||||
is_local = true;
|
||||
@ -6547,7 +6548,7 @@ void StickersManager::do_set_sticker_set_thumbnail(UserId user_id, string short_
|
||||
return promise.set_error(Status::Error(400, "Sticker set not found"));
|
||||
}
|
||||
|
||||
auto r_file_id = prepare_input_file(thumbnail, sticker_set->sticker_format, true);
|
||||
auto r_file_id = prepare_input_file(thumbnail, sticker_set->sticker_format, sticker_set->sticker_type, true);
|
||||
if (r_file_id.is_error()) {
|
||||
return promise.set_error(r_file_id.move_as_error());
|
||||
}
|
||||
|
@ -668,7 +668,7 @@ class StickersManager final : public Actor {
|
||||
std::pair<vector<FileId>, vector<FileId>> split_stickers_by_premium(const vector<FileId> &sticker_ids) const;
|
||||
|
||||
Result<std::tuple<FileId, bool, bool, StickerFormat>> prepare_input_file(
|
||||
const tl_object_ptr<td_api::InputFile> &input_file, StickerFormat format, bool for_thumbnail);
|
||||
const tl_object_ptr<td_api::InputFile> &input_file, StickerFormat format, StickerType type, bool for_thumbnail);
|
||||
|
||||
Result<std::tuple<FileId, bool, bool, StickerFormat>> prepare_input_sticker(td_api::inputSticker *sticker);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user