aboutsummaryrefslogtreecommitdiffhomepage
path: root/td/telegram/StarGift.cpp
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2024-12-23 23:21:45 +0300
committerlevlam <levlam@telegram.org>2024-12-23 23:21:45 +0300
commitaca9a545f4bc029a7288a3675e950fabf65d3015 (patch)
tree7fdb79592fc5741bf35df3c705687c95ca035fd8 /td/telegram/StarGift.cpp
parente1acd91d51329025225b312f4ebfd47e86f15ae7 (diff)
Add td_api::upgradedGift.
Diffstat (limited to 'td/telegram/StarGift.cpp')
-rw-r--r--td/telegram/StarGift.cpp86
1 files changed, 83 insertions, 3 deletions
diff --git a/td/telegram/StarGift.cpp b/td/telegram/StarGift.cpp
index 22023758d..b0836e364 100644
--- a/td/telegram/StarGift.cpp
+++ b/td/telegram/StarGift.cpp
@@ -10,14 +10,78 @@
#include "td/telegram/StickerFormat.h"
#include "td/telegram/StickersManager.h"
#include "td/telegram/Td.h"
+#include "td/telegram/UserManager.h"
#include "td/utils/logging.h"
namespace td {
-StarGift::StarGift(Td *td, telegram_api::object_ptr<telegram_api::StarGift> &&star_gift_ptr) {
+StarGift::StarGift(Td *td, telegram_api::object_ptr<telegram_api::StarGift> &&star_gift_ptr, bool allow_unique_gift) {
CHECK(star_gift_ptr != nullptr);
- if (star_gift_ptr->get_id() != telegram_api::starGift::ID) {
+ auto constructor_id = star_gift_ptr->get_id();
+ if (allow_unique_gift && constructor_id == telegram_api::starGiftUnique::ID) {
+ auto star_gift = telegram_api::move_object_as<telegram_api::starGiftUnique>(star_gift_ptr);
+ if (star_gift->id_ == 0) {
+ LOG(ERROR) << "Receive " << to_string(star_gift);
+ return;
+ }
+ is_unique_ = true;
+ id_ = star_gift->id_;
+ title_ = std::move(star_gift->title_);
+ num_ = star_gift->num_;
+ owner_user_id_ = UserId(star_gift->owner_id_);
+ unique_availability_issued_ = star_gift->availability_issued_;
+ unique_availability_total_ = star_gift->availability_total_;
+ for (auto &attribute : star_gift->attributes_) {
+ switch (attribute->get_id()) {
+ case telegram_api::starGiftAttributeModel::ID:
+ if (model_.is_valid()) {
+ LOG(ERROR) << "Receive duplicate model for " << *this;
+ }
+ model_ = StarGiftAttributeSticker(
+ td, telegram_api::move_object_as<telegram_api::starGiftAttributeModel>(attribute));
+ if (!model_.is_valid()) {
+ LOG(ERROR) << "Receive invalid model for " << *this;
+ }
+ break;
+ case telegram_api::starGiftAttributePattern::ID:
+ if (pattern_.is_valid()) {
+ LOG(ERROR) << "Receive duplicate pattern emoji for " << *this;
+ }
+ pattern_ = StarGiftAttributeSticker(
+ td, telegram_api::move_object_as<telegram_api::starGiftAttributePattern>(attribute));
+ if (!pattern_.is_valid()) {
+ LOG(ERROR) << "Receive invalid pattern emoji for " << *this;
+ }
+ break;
+ case telegram_api::starGiftAttributeBackdrop::ID:
+ if (background_.is_valid()) {
+ LOG(ERROR) << "Receive duplicate background for " << *this;
+ }
+ background_ = StarGiftAttributeBackground(
+ telegram_api::move_object_as<telegram_api::starGiftAttributeBackdrop>(attribute));
+ if (!background_.is_valid()) {
+ LOG(ERROR) << "Receive invalid background for " << *this;
+ }
+ break;
+ case telegram_api::starGiftAttributeOriginalDetails::ID:
+ if (original_details_.is_valid()) {
+ LOG(ERROR) << "Receive duplicate original details for " << *this;
+ }
+ original_details_ = StarGiftAttributeOriginalDetails(
+ td, telegram_api::move_object_as<telegram_api::starGiftAttributeOriginalDetails>(attribute));
+ if (!original_details_.is_valid()) {
+ LOG(ERROR) << "Receive invalid original details for " << *this;
+ }
+ break;
+ default:
+ UNREACHABLE();
+ }
+ }
+ return;
+ }
+ if (constructor_id != telegram_api::starGift::ID) {
+ LOG(ERROR) << "Receive " << to_string(star_gift_ptr);
return;
}
auto star_gift = telegram_api::move_object_as<telegram_api::starGift>(star_gift_ptr);
@@ -60,17 +124,33 @@ StarGift::StarGift(Td *td, telegram_api::object_ptr<telegram_api::StarGift> &&st
td_api::object_ptr<td_api::gift> StarGift::get_gift_object(const Td *td) const {
CHECK(is_valid());
+ CHECK(!is_unique_);
return td_api::make_object<td_api::gift>(
id_, td->stickers_manager_->get_sticker_object(sticker_file_id_), star_count_, default_sell_star_count_,
is_for_birthday_, availability_remains_, availability_total_, first_sale_date_, last_sale_date_);
}
+td_api::object_ptr<td_api::upgradedGift> StarGift::get_upgraded_gift_object(Td *td) const {
+ CHECK(is_valid());
+ CHECK(is_unique_);
+ return td_api::make_object<td_api::upgradedGift>(
+ id_, title_, num_, unique_availability_issued_, unique_availability_total_,
+ td->user_manager_->get_user_id_object(owner_user_id_, "upgradedGift"), model_.get_upgraded_gift_model_object(td),
+ pattern_.get_upgraded_gift_pattern_emoji_object(td), background_.get_upgraded_gift_background_object(),
+ original_details_.get_upgraded_gift_original_details_object(td));
+}
+
bool operator==(const StarGift &lhs, const StarGift &rhs) {
return lhs.id_ == rhs.id_ && lhs.sticker_file_id_ == rhs.sticker_file_id_ && lhs.star_count_ == rhs.star_count_ &&
lhs.default_sell_star_count_ == rhs.default_sell_star_count_ &&
lhs.availability_remains_ == rhs.availability_remains_ && lhs.availability_total_ == rhs.availability_total_ &&
lhs.first_sale_date_ == rhs.first_sale_date_ && lhs.last_sale_date_ == rhs.last_sale_date_ &&
- lhs.is_for_birthday_ == rhs.is_for_birthday_;
+ lhs.is_for_birthday_ == rhs.is_for_birthday_ && lhs.is_unique_ == rhs.is_unique_ && lhs.model_ == rhs.model_ &&
+ lhs.pattern_ == rhs.pattern_ && lhs.background_ == rhs.background_ &&
+ lhs.original_details_ == rhs.original_details_ && lhs.title_ == rhs.title_ &&
+ lhs.owner_user_id_ == rhs.owner_user_id_ && lhs.num_ == rhs.num_ &&
+ lhs.unique_availability_issued_ == rhs.unique_availability_issued_ &&
+ lhs.unique_availability_total_ == rhs.unique_availability_total_;
}
StringBuilder &operator<<(StringBuilder &string_builder, const StarGift &star_gift) {