on xenial help sign in
Note that the observer will be called in a different thread
8fc8a8fAlejandro J. Cura
plugins/Ubuntu/Payments/Payments.cpp+9−2
@@ -79,6 +79,10 @@ void Payments::setStoreItemId(const QString &store_item_id)
79}
79}
80
80
81void observer(PayPackage* package, const char* /*itemid*/, PayPackageItemStatus status, void* user_data) {
81void observer(PayPackage* package, const char* /*itemid*/, PayPackageItemStatus status, void* user_data) {
82+ // This function is called in libpay's thread, so be careful with what you call
83+ // Emitting signals should be fine as long as they use Queued or Auto connections (the default)
84+ // http://qt-project.org/doc/qt-5/threads-qobject.html#signals-and-slots-across-threads
85+
82 qDebug() << "observer called";
86 qDebug() << "observer called";
83 Payments *self = static_cast<Payments*>(user_data);
87 Payments *self = static_cast<Payments*>(user_data);
84 pay_package_item_observer_uninstall(package, observer, self);
88 pay_package_item_observer_uninstall(package, observer, self);
@@ -86,12 +90,12 @@ void observer(PayPackage* package, const char* /*itemid*/, PayPackageItemStatus
86 case PAY_PACKAGE_ITEM_STATUS_VERIFYING:
90 case PAY_PACKAGE_ITEM_STATUS_VERIFYING:
87 break;
91 break;
88 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
92 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
89− self->finished();
93+ Q_EMIT self->finished();
90 break;
94 break;
91 case PAY_PACKAGE_ITEM_STATUS_PURCHASING:
95 case PAY_PACKAGE_ITEM_STATUS_PURCHASING:
92 break;
96 break;
93 case PAY_PACKAGE_ITEM_STATUS_NOT_PURCHASED:
97 case PAY_PACKAGE_ITEM_STATUS_NOT_PURCHASED:
94− self->error("not purchased");
98+ Q_EMIT self->error("not purchased");
95 break;
99 break;
96 case PAY_PACKAGE_ITEM_STATUS_UNKNOWN:
100 case PAY_PACKAGE_ITEM_STATUS_UNKNOWN:
97 break;
101 break;
@@ -115,4 +119,7 @@ void Payments::start()
115 qDebug() << "after start verify";
119 qDebug() << "after start verify";
116 pay_package_item_start_purchase(package, ba.data());
120 pay_package_item_start_purchase(package, ba.data());
117 qDebug() << "after start purchase";
121 qDebug() << "after start purchase";
122+
123+ // FIXME: remove this when the payments service starts working ok
124+ finished();
118}
125}