diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2018-08-24 11:20:24 +0300 |
---|---|---|
committer | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2018-08-24 11:56:01 +0300 |
commit | 32950ad239eee894e3d2c4e61ddcea8de472fb71 (patch) | |
tree | 3421b3c00cd4093608ea7354a1e96040937b1584 /map | |
parent | 6e572cb3ac036a91812eb78fb5f4aadc2932f392 (diff) |
Review fixes
Diffstat (limited to 'map')
-rw-r--r-- | map/subscription.cpp | 30 | ||||
-rw-r--r-- | map/subscription.hpp | 1 |
2 files changed, 22 insertions, 9 deletions
diff --git a/map/subscription.cpp b/map/subscription.cpp index 1708415153..c5311206a9 100644 --- a/map/subscription.cpp +++ b/map/subscription.cpp @@ -47,29 +47,29 @@ std::string ValidationUrl() struct ReceiptData { - std::string m_data; - std::string m_type; - ReceiptData(std::string const & data, std::string const & type) : m_data(data) , m_type(type) {} + std::string m_data; + std::string m_type; + DECLARE_VISITOR(visitor(m_data, "data"), visitor(m_type, "type")) }; struct ValidationData { - std::string m_productId; - ReceiptData m_receipt; - ValidationData(std::string const & productId, std::string const & receiptData, std::string const & receiptType) : m_productId(productId) , m_receipt(receiptData, receiptType) {} + std::string m_productId; + ReceiptData m_receipt; + DECLARE_VISITOR(visitor(m_productId, "product_id"), visitor(m_receipt, "receipt")) }; @@ -122,8 +122,20 @@ void Subscription::Validate(std::string const & receiptData, std::string const & return; } + // If we validate the subscription immediately after purchasing, we believe that + // the subscription is valid and apply it before the validation. If the result of + // validation will be different, we return everything back. + if (m_subscriptionId.empty() && !receiptData.empty()) + { + m_isActive = true; + m_subscriptionId = GetSubscriptionId(); + GetPlatform().GetSecureStorage().Save(kSubscriptionId, m_subscriptionId); + for (auto & listener : m_listeners) + listener->OnSubscriptionChanged(true /* isActive */); + } + auto const status = GetPlatform().ConnectionStatus(); - if (status == Platform::EConnectionType::CONNECTION_NONE) + if (status == Platform::EConnectionType::CONNECTION_NONE || receiptData.empty()) { ApplyValidation(ValidationCode::Failure); return; @@ -154,8 +166,8 @@ void Subscription::Validate(std::string const & receiptData, std::string const & { ValidationResult result; { - coding::DeserializerJson des(request.ServerResponse()); - des(result); + coding::DeserializerJson deserializer(request.ServerResponse()); + deserializer(result); } code = result.m_isValid ? ValidationCode::Active : ValidationCode::NotActive; diff --git a/map/subscription.hpp b/map/subscription.hpp index 83cc98f1eb..eee2ad3cfb 100644 --- a/map/subscription.hpp +++ b/map/subscription.hpp @@ -19,6 +19,7 @@ class Subscription public: enum class ValidationCode { + // Do not change the order. Active, // Subscription is active. NotActive, // Subscription is not active. Failure, // Validation failed, real subscription status is unknown, current one acts. |