summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaurice Kalinowski <maurice.kalinowski@qt.io>2017-06-12 13:08:12 +0200
committerMaurice Kalinowski <maurice.kalinowski@qt.io>2017-06-13 07:11:24 +0000
commitd073ccba69a18113f4c1d58542617e3e33f84896 (patch)
tree15cf986d573c83c2d5b98ba17651caf114cfb1ac
parentaf3addded493c802e0244b2d0f7d8c71ac811130 (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.cpp29
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;