diff options
| author | levlam <levlam@telegram.org> | 2023-01-23 00:57:40 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2023-01-23 00:57:40 +0300 |
| commit | 345709f1ff4b898db6c26fc17add6c822692cd4e (patch) | |
| tree | cbd46893ac2baa5e5c47e0abbb9832aec44bc9b1 /td/telegram/Photo.cpp | |
| parent | 201af22ef28348b837ab061c106e25abbb4e5a65 (diff) | |
Store StickerPhotoSize in unique_ptr to optimize Photo size.
Diffstat (limited to 'td/telegram/Photo.cpp')
| -rw-r--r-- | td/telegram/Photo.cpp | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/td/telegram/Photo.cpp b/td/telegram/Photo.cpp index 33ae2c195..8e6c880d0 100644 --- a/td/telegram/Photo.cpp +++ b/td/telegram/Photo.cpp @@ -267,21 +267,18 @@ static tl_object_ptr<td_api::animatedChatPhoto> get_animated_chat_photo_object(F } static tl_object_ptr<td_api::chatPhotoSticker> get_chat_photo_sticker_object( - const StickerPhotoSize &sticker_photo_size) { + const unique_value_ptr<StickerPhotoSize> &sticker_photo_size) { + if (sticker_photo_size == nullptr) { + return nullptr; + } td_api::object_ptr<td_api::ChatPhotoStickerType> type; - switch (sticker_photo_size.type) { + switch (sticker_photo_size->type) { case StickerPhotoSize::Type::Sticker: - if (!sticker_photo_size.sticker_set_id.is_valid()) { - return nullptr; - } - type = td_api::make_object<td_api::chatPhotoStickerTypeRegularOrMask>(sticker_photo_size.sticker_set_id.get(), - sticker_photo_size.sticker_id); + type = td_api::make_object<td_api::chatPhotoStickerTypeRegularOrMask>(sticker_photo_size->sticker_set_id.get(), + sticker_photo_size->sticker_id); break; case StickerPhotoSize::Type::CustomEmoji: - if (!sticker_photo_size.custom_emoji_id.is_valid()) { - return nullptr; - } - type = td_api::make_object<td_api::chatPhotoStickerTypeCustomEmoji>(sticker_photo_size.custom_emoji_id.get()); + type = td_api::make_object<td_api::chatPhotoStickerTypeCustomEmoji>(sticker_photo_size->custom_emoji_id.get()); break; default: UNREACHABLE(); @@ -302,7 +299,7 @@ static tl_object_ptr<td_api::chatPhotoSticker> get_chat_photo_sticker_object( UNREACHABLE(); return nullptr; } - }(sticker_photo_size.background_colors); + }(sticker_photo_size->background_colors); return td_api::make_object<td_api::chatPhotoSticker>(std::move(type), std::move(background_fill)); } @@ -382,12 +379,14 @@ Photo get_photo(Td *td, tl_object_ptr<telegram_api::photo> &&photo, DialogId own continue; } animation.visit(overloaded( - [&](const AnimationSize &animation_size) { + [&](AnimationSize &&animation_size) { if (animation_size.type != 0 && animation_size.dimensions.width == animation_size.dimensions.height) { res.animations.push_back(std::move(animation_size)); } }, - [&](const StickerPhotoSize &sticker_photo_size) { res.sticker_photo_size = std::move(sticker_photo_size); })); + [&](unique_ptr<StickerPhotoSize> &&sticker_photo_size) { + res.sticker_photo_size = std::move(sticker_photo_size); + })); } return res; @@ -636,8 +635,8 @@ StringBuilder &operator<<(StringBuilder &string_builder, const Photo &photo) { if (!photo.animations.empty()) { string_builder << ", animations = " << format::as_array(photo.animations); } - if (photo.sticker_photo_size.custom_emoji_id.is_valid()) { - string_builder << ", custom emoji size = " << photo.sticker_photo_size; + if (photo.sticker_photo_size != nullptr) { + string_builder << ", sticker = " << *photo.sticker_photo_size; } return string_builder << ']'; } |
