#if !defined(_CRT_SECURE_NO_WARNINGS) #define _CRT_SECURE_NO_WARNINGS #endif #include "store_manager.h" #include "core.h" #include #include namespace discord { class StoreEvents final { public: static void OnEntitlementCreate(void* callbackData, DiscordEntitlement* entitlement) { auto* core = reinterpret_cast(callbackData); if (!core) { return; } auto& module = core->StoreManager(); module.OnEntitlementCreate(*reinterpret_cast(entitlement)); } static void OnEntitlementDelete(void* callbackData, DiscordEntitlement* entitlement) { auto* core = reinterpret_cast(callbackData); if (!core) { return; } auto& module = core->StoreManager(); module.OnEntitlementDelete(*reinterpret_cast(entitlement)); } }; IDiscordStoreEvents StoreManager::events_{ &StoreEvents::OnEntitlementCreate, &StoreEvents::OnEntitlementDelete, }; void StoreManager::FetchSkus(std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { std::unique_ptr> cb( reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->fetch_skus(internal_, cb.release(), wrapper); } void StoreManager::CountSkus(std::int32_t* count) { if (!count) { return; } internal_->count_skus(internal_, reinterpret_cast(count)); } Result StoreManager::GetSku(Snowflake skuId, Sku* sku) { if (!sku) { return Result::InternalError; } auto result = internal_->get_sku(internal_, skuId, reinterpret_cast(sku)); return static_cast(result); } Result StoreManager::GetSkuAt(std::int32_t index, Sku* sku) { if (!sku) { return Result::InternalError; } auto result = internal_->get_sku_at(internal_, index, reinterpret_cast(sku)); return static_cast(result); } void StoreManager::FetchEntitlements(std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { std::unique_ptr> cb( reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->fetch_entitlements(internal_, cb.release(), wrapper); } void StoreManager::CountEntitlements(std::int32_t* count) { if (!count) { return; } internal_->count_entitlements(internal_, reinterpret_cast(count)); } Result StoreManager::GetEntitlement(Snowflake entitlementId, Entitlement* entitlement) { if (!entitlement) { return Result::InternalError; } auto result = internal_->get_entitlement( internal_, entitlementId, reinterpret_cast(entitlement)); return static_cast(result); } Result StoreManager::GetEntitlementAt(std::int32_t index, Entitlement* entitlement) { if (!entitlement) { return Result::InternalError; } auto result = internal_->get_entitlement_at( internal_, index, reinterpret_cast(entitlement)); return static_cast(result); } Result StoreManager::HasSkuEntitlement(Snowflake skuId, bool* hasEntitlement) { if (!hasEntitlement) { return Result::InternalError; } auto result = internal_->has_sku_entitlement(internal_, skuId, reinterpret_cast(hasEntitlement)); return static_cast(result); } void StoreManager::StartPurchase(Snowflake skuId, std::function callback) { static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { std::unique_ptr> cb( reinterpret_cast*>(callbackData)); if (!cb || !(*cb)) { return; } (*cb)(static_cast(result)); }; std::unique_ptr> cb{}; cb.reset(new std::function(std::move(callback))); internal_->start_purchase(internal_, skuId, cb.release(), wrapper); } } // namespace discord