diff options
author | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2017-06-12 13:08:12 +0200 |
---|---|---|
committer | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2017-06-13 07:11:24 +0000 |
commit | d073ccba69a18113f4c1d58542617e3e33f84896 (patch) | |
tree | 15cf986d573c83c2d5b98ba17651caf114cfb1ac | |
parent | af3addded493c802e0244b2d0f7d8c71ac811130 (diff) |
winrt: Use RequestProductPurchaseWithResultsAsync for all purchases
ICurrentAppSimulatorWithConsumables can also request a purchase for
durable products. This simplifies the purchases and also keeps track of
the purchase status in a more convenient way. In addition fixes
potential crash when invoked via durable purchase.
Change-Id: If1b108f149dddbaf63c07fc1613a97e5dd5d8cfe
Task-number: QTBUG-60808
Task-number: QTBUG-61019
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
-rw-r--r-- | src/purchasing/inapppurchase/winrt/qwinrtinapppurchasebackend.cpp | 29 |
1 files changed, 2 insertions, 27 deletions
diff --git a/src/purchasing/inapppurchase/winrt/qwinrtinapppurchasebackend.cpp b/src/purchasing/inapppurchase/winrt/qwinrtinapppurchasebackend.cpp index b57df20..2735d57 100644 --- a/src/purchasing/inapppurchase/winrt/qwinrtinapppurchasebackend.cpp +++ b/src/purchasing/inapppurchase/winrt/qwinrtinapppurchasebackend.cpp @@ -280,6 +280,8 @@ void QWinRTInAppPurchaseBackend::createTransactionDelayed(qt_WinRTTransactionDat switch (data.status) { case AsyncStatus::Completed: { reason = QInAppTransaction::NoFailure; + if (!data.purchaseResults) + break; ProductPurchaseStatus purchaseStatus; HRESULT hr = data.purchaseResults->get_Status(&purchaseStatus); if (FAILED(hr)) { @@ -628,33 +630,6 @@ void QWinRTInAppPurchaseBackend::purchaseProduct(QWinRTInAppProduct *product) Q_ASSERT_SUCCEEDED(hr); return S_OK; }); - } else if (product->productType() == QInAppProduct::Unlockable) { - hr = QEventDispatcherWinRT::runOnXamlThread([d, product, &productId, this]() { - ComPtr<IAsyncOperation<HSTRING>> purchaseOp; - HRESULT hr; - hr = d->m_bridge.RequestProductPurchaseAsync(productId.Get(), true, purchaseOp); - Q_ASSERT_SUCCEEDED(hr); - auto purchaseCallback = Callback<IAsyncOperationCompletedHandler<HSTRING>>([d, product, this](IAsyncOperation<HSTRING> *op, AsyncStatus status) - { - HString receiptH; - QString receiptQ; - HRESULT hr; - hr = op->GetResults(receiptH.GetAddressOf()); - if (SUCCEEDED(hr)) - receiptQ = hStringToQString(receiptH); - else - qWarning("Could not receive transaction receipt."); - - qt_WinRTTransactionData tData(status, product, receiptQ); - QMetaObject::invokeMethod(this, "createTransactionDelayed", Qt::QueuedConnection, - Q_ARG(qt_WinRTTransactionData, tData)); - - return S_OK; - }); - hr = purchaseOp->put_Completed(purchaseCallback.Get()); - Q_ASSERT_SUCCEEDED(hr); - return S_OK; - }); } else { hr = QEventDispatcherWinRT::runOnXamlThread([d, product, &productId, this]() { HRESULT hr; |