@@ -79,6 +79,10 @@ void Payments::setStoreItemId(const QString &store_item_id)
7979}
8080
8181void 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+
8286 qDebug() << "observer called";
8387 Payments *self = static_cast<Payments*>(user_data);
8488 pay_package_item_observer_uninstall(package, observer, self);
@@ -86,12 +90,12 @@ void observer(PayPackage* package, const char* /*itemid*/, PayPackageItemStatus
8690 case PAY_PACKAGE_ITEM_STATUS_VERIFYING:
8791 break;
8892 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
89− self->finished();
93+ Q_EMIT self->finished();
9094 break;
9195 case PAY_PACKAGE_ITEM_STATUS_PURCHASING:
9296 break;
9397 case PAY_PACKAGE_ITEM_STATUS_NOT_PURCHASED:
94− self->error("not purchased");
98+ Q_EMIT self->error("not purchased");
9599 break;
96100 case PAY_PACKAGE_ITEM_STATUS_UNKNOWN:
97101 break;
@@ -115,4 +119,7 @@ void Payments::start()
115119 qDebug() << "after start verify";
116120 pay_package_item_start_purchase(package, ba.data());
117121 qDebug() << "after start purchase";
122+
123+ // FIXME: remove this when the payments service starts working ok
124+ finished();
118125}