diff --git a/js/TxUtils.js b/js/TxUtils.js index 42a5d449..63405338 100644 --- a/js/TxUtils.js +++ b/js/TxUtils.js @@ -73,30 +73,3 @@ function isValidOpenAliasAddress(address) { // we can get an awful lot of valid domains, including non ASCII chars... accept anything return true } - -function makeQRCodeString(addr, amount, txDescription, recipientName) { - var XMR_URI_SCHEME = "monero:" - var XMR_AMOUNT = "tx_amount" - var XMR_RECIPIENT_NAME = "recipient_name" - var XMR_TX_DESCRIPTION = "tx_description" - var qrCodeString ="" - qrCodeString += (XMR_URI_SCHEME + addr) - if (amount !== undefined && amount !== ""){ - qrCodeString += ("?" + XMR_AMOUNT + "=" + amount) - } - if (txDescription !== undefined && txDescription !== ""){ - if (amount == ""){ - qrCodeString += ("?" + XMR_TX_DESCRIPTION + "=" + encodeURI(txDescription)) - } else { - qrCodeString += ("&" + XMR_TX_DESCRIPTION + "=" + encodeURI(txDescription)) - } - } - if (recipientName !== undefined && recipientName !== ""){ - if (amount == "" && txDescription == ""){ - qrCodeString += ("?" + XMR_RECIPIENT_NAME + "=" + encodeURI(recipientName)) - } else { - qrCodeString += ("&" + XMR_RECIPIENT_NAME + "=" + encodeURI(recipientName)) - } - } - return qrCodeString -} diff --git a/pages/Receive.qml b/pages/Receive.qml index 5e34f59e..b97c0657 100644 --- a/pages/Receive.qml +++ b/pages/Receive.qml @@ -63,12 +63,11 @@ Rectangle { function generateQRCodeString() { if (pageReceive.state == "PaymentRequest") { - return TxUtils.makeQRCodeString(appWindow.current_address, - (amountToReceiveXMR.text != "" && parseFloat(amountToReceiveXMR.text) != 0 ? amountToReceiveXMR.text : ""), - (txDescriptionInput.text != "" ? txDescriptionInput.text : ""), - (receiverNameInput.text != "" ? receiverNameInput.text : "")); + return walletManager.make_uri(appWindow.current_address, + walletManager.amountFromString(amountToReceiveXMR.text), + txDescriptionInput.text, receiverNameInput.text); } else { - return TxUtils.makeQRCodeString(appWindow.current_address); + return walletManager.make_uri(appWindow.current_address); } } diff --git a/pages/merchant/Merchant.qml b/pages/merchant/Merchant.qml index 3722a7a6..e17ed870 100644 --- a/pages/merchant/Merchant.qml +++ b/pages/merchant/Merchant.qml @@ -211,7 +211,7 @@ Item { smooth: false fillMode: Image.PreserveAspectFit - source: "image://qrcode/" + TxUtils.makeQRCodeString(appWindow.current_address, amountToReceive.text) + source: "image://qrcode/" + walletManager.make_uri(appWindow.current_address, walletManager.amountFromString(amountToReceive.text)) MouseArea { anchors.fill: parent @@ -400,7 +400,7 @@ Item { font.pixelSize: 12 font.bold: true color: _color - text: TxUtils.makeQRCodeString(appWindow.current_address, amountToReceive.text) + text: walletManager.make_uri(appWindow.current_address, walletManager.amountFromString(amountToReceive.text)) themeTransition: false MouseArea { @@ -685,7 +685,7 @@ Item { selectExisting: false nameFilters: ["Image (*.png)"] onAccepted: { - if(!walletManager.saveQrCode(TxUtils.makeQRCodeString(appWindow.current_address, amountToReceive.text), walletManager.urlToLocalPath(fileUrl))) { + if (!walletManager.saveQrCode(walletManager.make_uri(appWindow.current_address, walletManager.amountFromString(amountToReceive.text)), walletManager.urlToLocalPath(fileUrl))) { console.log("Failed to save QrCode to file " + walletManager.urlToLocalPath(fileUrl) ) receivePageDialog.title = qsTr("Save QrCode") + translationManager.emptyString; receivePageDialog.text = qsTr("Failed to save QrCode to ") + walletManager.urlToLocalPath(fileUrl) + translationManager.emptyString; diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index c2aaab8f..e19a810c 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -933,6 +933,12 @@ bool Wallet::parse_uri(const QString &uri, QString &address, QString &payment_id return res; } +QString Wallet::make_uri(const QString &address, const quint64 &amount, const QString &tx_description, const QString &recipient_name) const +{ + std::string error; + return QString::fromStdString(m_walletImpl->make_uri(address.toStdString(), "", amount, tx_description.toStdString(), recipient_name.toStdString(), error)); +} + bool Wallet::rescanSpent() { QMutexLocker locker(&m_asyncMutex); diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index c736df7d..9b5bdd46 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -300,6 +300,8 @@ public: //! Parse URI Q_INVOKABLE bool parse_uri(const QString &uri, QString &address, QString &payment_id, uint64_t &amount, QString &tx_description, QString &recipient_name, QVector &unknown_parameters, QString &error); + //! Make URI + Q_INVOKABLE QString make_uri(const QString &address, const quint64 &amount = 0, const QString &tx_description = "", const QString &recipient_name = "") const; //! Namespace your cacheAttribute keys to avoid collisions Q_INVOKABLE bool setCacheAttribute(const QString &key, const QString &val); diff --git a/src/libwalletqt/WalletManager.cpp b/src/libwalletqt/WalletManager.cpp index 338c2f0c..65d108e8 100644 --- a/src/libwalletqt/WalletManager.cpp +++ b/src/libwalletqt/WalletManager.cpp @@ -441,6 +441,14 @@ QVariantMap WalletManager::parse_uri_to_object(const QString &uri) const return result; } +QString WalletManager::make_uri(const QString &address, const quint64 &amount, const QString &tx_description, const QString &recipient_name) const +{ + QMutexLocker locker(&m_mutex); + if (m_currentWallet) + return m_currentWallet->make_uri(address, amount, tx_description, recipient_name); + return ""; +} + void WalletManager::setLogLevel(int logLevel) { Monero::WalletManagerFactory::setLogLevel(logLevel); diff --git a/src/libwalletqt/WalletManager.h b/src/libwalletqt/WalletManager.h index 2b424b73..84835a9c 100644 --- a/src/libwalletqt/WalletManager.h +++ b/src/libwalletqt/WalletManager.h @@ -179,6 +179,7 @@ public: Q_INVOKABLE QString resolveOpenAlias(const QString &address) const; Q_INVOKABLE bool parse_uri(const QString &uri, QString &address, QString &payment_id, uint64_t &amount, QString &tx_description, QString &recipient_name, QVector &unknown_parameters, QString &error) const; Q_INVOKABLE QVariantMap parse_uri_to_object(const QString &uri) const; + Q_INVOKABLE QString make_uri(const QString &address, const quint64 &amount = 0, const QString &tx_description = "", const QString &recipient_name = "") const; Q_INVOKABLE bool saveQrCode(const QString &, const QString &) const; Q_INVOKABLE void saveQrCodeToClipboard(const QString &) const; Q_INVOKABLE void checkUpdatesAsync(