@@ -79,6 +79,10 @@ void Payments::setStoreItemId(const QString &store_item_id)
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
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:
88 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
92 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
89− self->finished();
93+ Q_EMIT self->finished();
91 case PAY_PACKAGE_ITEM_STATUS_PURCHASING:
95 case PAY_PACKAGE_ITEM_STATUS_PURCHASING:
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");
96 case PAY_PACKAGE_ITEM_STATUS_UNKNOWN:
100 case PAY_PACKAGE_ITEM_STATUS_UNKNOWN:
@@ -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";
123+ // FIXME: remove this when the payments service starts working ok