Merge pull request #3130 from Diapolo/paymentACK_via_message
Qt: move paymentACK handling to paymentserver
This commit is contained in:
commit
48cc4fc326
5 changed files with 23 additions and 18 deletions
|
@ -331,8 +331,6 @@ int main(int argc, char *argv[])
|
||||||
&window, SLOT(handlePaymentRequest(SendCoinsRecipient)));
|
&window, SLOT(handlePaymentRequest(SendCoinsRecipient)));
|
||||||
QObject::connect(&walletModel, SIGNAL(coinsSent(CWallet*,SendCoinsRecipient,QByteArray)),
|
QObject::connect(&walletModel, SIGNAL(coinsSent(CWallet*,SendCoinsRecipient,QByteArray)),
|
||||||
paymentServer, SLOT(fetchPaymentACK(CWallet*,const SendCoinsRecipient&,QByteArray)));
|
paymentServer, SLOT(fetchPaymentACK(CWallet*,const SendCoinsRecipient&,QByteArray)));
|
||||||
QObject::connect(paymentServer, SIGNAL(receivedPaymentACK(QString)),
|
|
||||||
&window, SLOT(showPaymentACK(QString)));
|
|
||||||
QObject::connect(paymentServer, SIGNAL(message(QString,QString,unsigned int)),
|
QObject::connect(paymentServer, SIGNAL(message(QString,QString,unsigned int)),
|
||||||
guiref, SLOT(message(QString,QString,unsigned int)));
|
guiref, SLOT(message(QString,QString,unsigned int)));
|
||||||
QTimer::singleShot(100, paymentServer, SLOT(uiReady()));
|
QTimer::singleShot(100, paymentServer, SLOT(uiReady()));
|
||||||
|
|
|
@ -763,11 +763,6 @@ void BitcoinGUI::handlePaymentRequest(const SendCoinsRecipient& recipient)
|
||||||
walletFrame->handlePaymentRequest(recipient);
|
walletFrame->handlePaymentRequest(recipient);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitcoinGUI::showPaymentACK(const QString& msg)
|
|
||||||
{
|
|
||||||
message(tr("Payment acknowledged"), GUIUtil::HtmlEscape(msg), CClientUIInterface::MODAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BitcoinGUI::setEncryptionStatus(int status)
|
void BitcoinGUI::setEncryptionStatus(int status)
|
||||||
{
|
{
|
||||||
switch(status)
|
switch(status)
|
||||||
|
|
|
@ -135,6 +135,7 @@ public slots:
|
||||||
@param[in] ret pointer to a bool that will be modified to whether Ok was clicked (modal only)
|
@param[in] ret pointer to a bool that will be modified to whether Ok was clicked (modal only)
|
||||||
*/
|
*/
|
||||||
void message(const QString &title, const QString &message, unsigned int style, bool *ret = NULL);
|
void message(const QString &title, const QString &message, unsigned int style, bool *ret = NULL);
|
||||||
|
|
||||||
/** Asks the user whether to pay the transaction fee or to cancel the transaction.
|
/** Asks the user whether to pay the transaction fee or to cancel the transaction.
|
||||||
It is currently not possible to pass a return value to another thread through
|
It is currently not possible to pass a return value to another thread through
|
||||||
BlockingQueuedConnection, so an indirected pointer is used.
|
BlockingQueuedConnection, so an indirected pointer is used.
|
||||||
|
@ -146,7 +147,6 @@ public slots:
|
||||||
void askFee(qint64 nFeeRequired, bool *payFee);
|
void askFee(qint64 nFeeRequired, bool *payFee);
|
||||||
|
|
||||||
void handlePaymentRequest(const SendCoinsRecipient& recipient);
|
void handlePaymentRequest(const SendCoinsRecipient& recipient);
|
||||||
void showPaymentACK(const QString& msg);
|
|
||||||
|
|
||||||
/** Show incoming transaction notification for new transactions. */
|
/** Show incoming transaction notification for new transactions. */
|
||||||
void incomingTransaction(const QString& date, int unit, qint64 amount, const QString& type, const QString& address);
|
void incomingTransaction(const QString& date, int unit, qint64 amount, const QString& type, const QString& address);
|
||||||
|
|
|
@ -263,7 +263,7 @@ PaymentServer::PaymentServer(QObject* parent, bool startLocalServer) :
|
||||||
|
|
||||||
// Install global event filter to catch QFileOpenEvents
|
// Install global event filter to catch QFileOpenEvents
|
||||||
// on Mac: sent when you click bitcoin: links
|
// on Mac: sent when you click bitcoin: links
|
||||||
// other OSes: helpful when dealing with payment-request files (in the future)
|
// other OSes: helpful when dealing with payment request files (in the future)
|
||||||
if (parent)
|
if (parent)
|
||||||
parent->installEventFilter(this);
|
parent->installEventFilter(this);
|
||||||
|
|
||||||
|
@ -278,8 +278,10 @@ PaymentServer::PaymentServer(QObject* parent, bool startLocalServer) :
|
||||||
|
|
||||||
if (!uriServer->listen(name))
|
if (!uriServer->listen(name))
|
||||||
qDebug() << "PaymentServer::PaymentServer : Cannot start bitcoin: click-to-pay handler";
|
qDebug() << "PaymentServer::PaymentServer : Cannot start bitcoin: click-to-pay handler";
|
||||||
else
|
else {
|
||||||
connect(uriServer, SIGNAL(newConnection()), this, SLOT(handleURIConnection()));
|
connect(uriServer, SIGNAL(newConnection()), this, SLOT(handleURIConnection()));
|
||||||
|
connect(this, SIGNAL(receivedPaymentACK(QString)), this, SLOT(handlePaymentACK(QString)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// netManager is null until uiReady() is called
|
// netManager is null until uiReady() is called
|
||||||
|
@ -321,7 +323,7 @@ void PaymentServer::initNetManager()
|
||||||
// netManager is used to fetch paymentrequests given in bitcoin: URIs
|
// netManager is used to fetch paymentrequests given in bitcoin: URIs
|
||||||
netManager = new QNetworkAccessManager(this);
|
netManager = new QNetworkAccessManager(this);
|
||||||
|
|
||||||
// Use proxy settings from optionsModel:
|
// Use proxy settings from optionsModel
|
||||||
QString proxyIP;
|
QString proxyIP;
|
||||||
quint16 proxyPort;
|
quint16 proxyPort;
|
||||||
if (optionsModel->getProxySettings(proxyIP, proxyPort))
|
if (optionsModel->getProxySettings(proxyIP, proxyPort))
|
||||||
|
@ -457,7 +459,7 @@ bool PaymentServer::processPaymentRequest(PaymentRequestPlus& request, QList<Sen
|
||||||
foreach(const PAIRTYPE(CScript, qint64)& sendingTo, sendingTos) {
|
foreach(const PAIRTYPE(CScript, qint64)& sendingTo, sendingTos) {
|
||||||
CTxOut txOut(sendingTo.second, sendingTo.first);
|
CTxOut txOut(sendingTo.second, sendingTo.first);
|
||||||
if (txOut.IsDust(CTransaction::nMinRelayTxFee)) {
|
if (txOut.IsDust(CTransaction::nMinRelayTxFee)) {
|
||||||
QString msg = QObject::tr("Requested payment amount (%1) too small")
|
QString msg = tr("Requested payment amount of %1 is too small (considered dust).")
|
||||||
.arg(BitcoinUnits::formatWithUnit(optionsModel->getDisplayUnit(), sendingTo.second));
|
.arg(BitcoinUnits::formatWithUnit(optionsModel->getDisplayUnit(), sendingTo.second));
|
||||||
|
|
||||||
qDebug() << "PaymentServer::processPaymentRequest : " << msg;
|
qDebug() << "PaymentServer::processPaymentRequest : " << msg;
|
||||||
|
@ -537,7 +539,7 @@ void PaymentServer::fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipien
|
||||||
payment.add_transactions(transaction.data(), transaction.size());
|
payment.add_transactions(transaction.data(), transaction.size());
|
||||||
|
|
||||||
// Create a new refund address, or re-use:
|
// Create a new refund address, or re-use:
|
||||||
QString account = tr("Refund from") + QString(" ") + recipient.authenticatedMerchant;
|
QString account = tr("Refund from %1").arg(recipient.authenticatedMerchant);
|
||||||
std::string strAccount = account.toStdString();
|
std::string strAccount = account.toStdString();
|
||||||
set<CTxDestination> refundAddresses = wallet->GetAccountAddresses(strAccount);
|
set<CTxDestination> refundAddresses = wallet->GetAccountAddresses(strAccount);
|
||||||
if (!refundAddresses.empty()) {
|
if (!refundAddresses.empty()) {
|
||||||
|
@ -579,9 +581,10 @@ void PaymentServer::netRequestFinished(QNetworkReply* reply)
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
if (reply->error() != QNetworkReply::NoError)
|
if (reply->error() != QNetworkReply::NoError)
|
||||||
{
|
{
|
||||||
QString msg = QObject::tr("Error communicating with %1: %2")
|
QString msg = tr("Error communicating with %1: %2")
|
||||||
.arg(reply->request().url().toString())
|
.arg(reply->request().url().toString())
|
||||||
.arg(reply->errorString());
|
.arg(reply->errorString());
|
||||||
|
|
||||||
qDebug() << "PaymentServer::netRequestFinished : " << msg;
|
qDebug() << "PaymentServer::netRequestFinished : " << msg;
|
||||||
emit message(tr("Network request error"), msg, CClientUIInterface::MSG_ERROR);
|
emit message(tr("Network request error"), msg, CClientUIInterface::MSG_ERROR);
|
||||||
return;
|
return;
|
||||||
|
@ -595,12 +598,13 @@ void PaymentServer::netRequestFinished(QNetworkReply* reply)
|
||||||
PaymentRequestPlus request;
|
PaymentRequestPlus request;
|
||||||
QList<SendCoinsRecipient> recipients;
|
QList<SendCoinsRecipient> recipients;
|
||||||
if (request.parse(data) && processPaymentRequest(request, recipients)) {
|
if (request.parse(data) && processPaymentRequest(request, recipients)) {
|
||||||
foreach (const SendCoinsRecipient& recipient, recipients){
|
foreach (const SendCoinsRecipient& recipient, recipients) {
|
||||||
emit receivedPaymentRequest(recipient);
|
emit receivedPaymentRequest(recipient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
qDebug() << "PaymentServer::netRequestFinished : Error processing payment request";
|
qDebug() << "PaymentServer::netRequestFinished : Error processing payment request";
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (requestType == "PaymentACK")
|
else if (requestType == "PaymentACK")
|
||||||
|
@ -608,13 +612,14 @@ void PaymentServer::netRequestFinished(QNetworkReply* reply)
|
||||||
payments::PaymentACK paymentACK;
|
payments::PaymentACK paymentACK;
|
||||||
if (!paymentACK.ParseFromArray(data.data(), data.size()))
|
if (!paymentACK.ParseFromArray(data.data(), data.size()))
|
||||||
{
|
{
|
||||||
QString msg = QObject::tr("Bad response from server %1")
|
QString msg = tr("Bad response from server %1")
|
||||||
.arg(reply->request().url().toString());
|
.arg(reply->request().url().toString());
|
||||||
|
|
||||||
qDebug() << "PaymentServer::netRequestFinished : " << msg;
|
qDebug() << "PaymentServer::netRequestFinished : " << msg;
|
||||||
emit message(tr("Network request error"), msg, CClientUIInterface::MSG_ERROR);
|
emit message(tr("Network request error"), msg, CClientUIInterface::MSG_ERROR);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
emit receivedPaymentACK(QString::fromStdString(paymentACK.memo()));
|
emit receivedPaymentACK(GUIUtil::HtmlEscape(paymentACK.memo()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -635,3 +640,9 @@ void PaymentServer::setOptionsModel(OptionsModel *optionsModel)
|
||||||
{
|
{
|
||||||
this->optionsModel = optionsModel;
|
this->optionsModel = optionsModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PaymentServer::handlePaymentACK(const QString& paymentACKMsg)
|
||||||
|
{
|
||||||
|
// currently we don't futher process or store the paymentACK message
|
||||||
|
emit message(tr("Payment acknowledged"), paymentACKMsg, CClientUIInterface::ICON_INFORMATION | CClientUIInterface::MODAL);
|
||||||
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ signals:
|
||||||
void receivedPaymentRequest(SendCoinsRecipient);
|
void receivedPaymentRequest(SendCoinsRecipient);
|
||||||
|
|
||||||
// Fired when a valid PaymentACK is received
|
// Fired when a valid PaymentACK is received
|
||||||
void receivedPaymentACK(QString);
|
void receivedPaymentACK(const QString &paymentACKMsg);
|
||||||
|
|
||||||
// Fired when a message should be reported to the user
|
// Fired when a message should be reported to the user
|
||||||
void message(const QString &title, const QString &message, unsigned int style);
|
void message(const QString &title, const QString &message, unsigned int style);
|
||||||
|
@ -105,6 +105,7 @@ private slots:
|
||||||
void handleURIConnection();
|
void handleURIConnection();
|
||||||
void netRequestFinished(QNetworkReply*);
|
void netRequestFinished(QNetworkReply*);
|
||||||
void reportSslErrors(QNetworkReply*, const QList<QSslError> &);
|
void reportSslErrors(QNetworkReply*, const QList<QSslError> &);
|
||||||
|
void handlePaymentACK(const QString& paymentACKMsg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static bool readPaymentRequest(const QString& filename, PaymentRequestPlus& request);
|
static bool readPaymentRequest(const QString& filename, PaymentRequestPlus& request);
|
||||||
|
|
Loading…
Reference in a new issue