Skip to content

Commit ec5cf79

Browse files
committed
qml: add receive request history model and URI sharing (issue #14)
1 parent f51132a commit ec5cf79

13 files changed

+1202
-62
lines changed

qml/models/paymentrequest.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include <key_io.h>
88
#include <qml/bitcoinunits.h>
9+
#include <qml/models/receiverequesthistorymodel.h>
910

1011
#include <QString>
1112

@@ -15,6 +16,7 @@ PaymentRequest::PaymentRequest(QObject* parent)
1516
m_amount = new BitcoinAmount(this);
1617
const auto persisted_unit = QmlBitcoinUnits::unitFromSettings();
1718
m_amount->setUnit(persisted_unit == QmlBitcoinUnits::Unit::SAT ? BitcoinAmount::Unit::SAT : BitcoinAmount::Unit::BTC);
19+
connect(m_amount, &BitcoinAmount::amountChanged, this, &PaymentRequest::uriChanged);
1820
}
1921

2022
QString PaymentRequest::address() const
@@ -39,6 +41,7 @@ void PaymentRequest::setLabel(const QString& label)
3941
}
4042
m_label = label;
4143
Q_EMIT labelChanged();
44+
Q_EMIT uriChanged();
4245
}
4346

4447
QString PaymentRequest::message() const
@@ -53,6 +56,7 @@ void PaymentRequest::setMessage(const QString& message)
5356
}
5457
m_message = message;
5558
Q_EMIT messageChanged();
59+
Q_EMIT uriChanged();
5660
}
5761

5862
BitcoinAmount* PaymentRequest::amount() const
@@ -89,10 +93,22 @@ void PaymentRequest::setId(unsigned int id)
8993
Q_EMIT idChanged();
9094
}
9195

96+
QString PaymentRequest::uri() const
97+
{
98+
return ReceiveRequestHistoryModel::BuildBitcoinUri(address(), m_amount->satoshi(), m_label, m_message);
99+
}
100+
101+
QString PaymentRequest::qrPayload() const
102+
{
103+
const QString request_uri = uri();
104+
return request_uri.isEmpty() ? address() : request_uri;
105+
}
106+
92107
void PaymentRequest::setDestination(const CTxDestination& destination)
93108
{
94109
m_destination = destination;
95110
Q_EMIT addressChanged();
111+
Q_EMIT uriChanged();
96112
}
97113

98114
CTxDestination PaymentRequest::destination() const
@@ -113,6 +129,7 @@ void PaymentRequest::clear()
113129
Q_EMIT messageChanged();
114130
Q_EMIT amountErrorChanged();
115131
Q_EMIT idChanged();
132+
Q_EMIT uriChanged();
116133
}
117134

118135
void PaymentRequest::setDisplayUnit(const int display_unit)

qml/models/paymentrequest.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ class PaymentRequest : public QObject
2222
Q_PROPERTY(BitcoinAmount* amount READ amount CONSTANT)
2323
Q_PROPERTY(QString amountError READ amountError NOTIFY amountErrorChanged)
2424
Q_PROPERTY(QString id READ id NOTIFY idChanged)
25+
Q_PROPERTY(QString uri READ uri NOTIFY uriChanged)
26+
Q_PROPERTY(QString qrPayload READ qrPayload NOTIFY uriChanged)
2527

2628
public:
2729
explicit PaymentRequest(QObject* parent = nullptr);
@@ -42,6 +44,9 @@ class PaymentRequest : public QObject
4244
QString id() const;
4345
void setId(unsigned int id);
4446

47+
QString uri() const;
48+
QString qrPayload() const;
49+
4550
void setDestination(const CTxDestination& destination);
4651
CTxDestination destination() const;
4752

@@ -54,6 +59,7 @@ class PaymentRequest : public QObject
5459
void messageChanged();
5560
void amountErrorChanged();
5661
void idChanged();
62+
void uriChanged();
5763

5864
private:
5965
static QString FormatAddress(const QString& address);

0 commit comments

Comments
 (0)