From 2143392b84e089319decee65e63c2376e6fdffd4 Mon Sep 17 00:00:00 2001 From: "moneromooo.monero" Date: Tue, 8 Nov 2016 20:23:50 +0000 Subject: [PATCH] Add a button to sweep unmixable outputs --- MiddlePanel.qml | 5 +++++ main.qml | 40 ++++++++++++++++++++++++++++++++++++++ pages/Transfer.qml | 21 ++++++++++++++++++++ src/libwalletqt/Wallet.cpp | 8 ++++++-- src/libwalletqt/Wallet.h | 5 +++++ 5 files changed, 77 insertions(+), 2 deletions(-) diff --git a/MiddlePanel.qml b/MiddlePanel.qml index 7080e338..74c731c8 100644 --- a/MiddlePanel.qml +++ b/MiddlePanel.qml @@ -52,6 +52,7 @@ Rectangle { signal paymentClicked(string address, string paymentId, string amount, int mixinCount, int priority, string description) + signal sweepUnmixableClicked() signal generatePaymentIdInvoked() signal checkPaymentClicked(string address, string txid, string txkey); @@ -308,5 +309,9 @@ Rectangle { console.log("MiddlePanel: paymentClicked") paymentClicked(address, paymentId, amount, mixinCount, priority, description) } + onSweepUnmixableClicked : { + console.log("MiddlePanel: sweepUnmixableClicked") + sweepUnmixableClicked() + } } } diff --git a/main.qml b/main.qml index 1114a56e..cf355aab 100644 --- a/main.qml +++ b/main.qml @@ -157,6 +157,7 @@ ApplicationWindow { middlePanel.checkPaymentClicked.disconnect(handleCheckPayment); } middlePanel.paymentClicked.connect(handlePayment); + middlePanel.sweepUnmixableClicked.connect(handleSweepUnmixable); // basicPanel.paymentClicked.connect(handlePayment); middlePanel.checkPaymentClicked.connect(handleCheckPayment); @@ -451,6 +452,45 @@ ApplicationWindow { currentWallet.createTransactionAsync(address, paymentId, amountxmr, mixinCount, priority); } + function handleSweepUnmixable() { + console.log("Creating transaction: ") + + transaction = currentWallet.createSweepUnmixableTransaction(); + if (transaction.status !== PendingTransaction.Status_Ok) { + console.error("Can't create transaction: ", transaction.errorString); + informationPopup.title = qsTr("Error") + translationManager.emptyString; + informationPopup.text = qsTr("Can't create transaction: ") + transaction.errorString + informationPopup.icon = StandardIcon.Critical + informationPopup.onCloseCallback = null + informationPopup.open(); + // deleting transaction object, we don't want memleaks + currentWallet.disposeTransaction(transaction); + + } else if (transaction.txCount == 0) { + informationPopup.title = qsTr("No unmixable outputs to sweep") + translationManager.emptyString + informationPopup.text = qsTr("No unmixable outputs to sweep") + translationManager.emptyString + informationPopup.icon = StandardIcon.Information + informationPopup.onCloseCallback = null + informationPopup.open() + // deleting transaction object, we don't want memleaks + currentWallet.disposeTransaction(transaction); + } else { + console.log("Transaction created, amount: " + walletManager.displayAmount(transaction.amount) + + ", fee: " + walletManager.displayAmount(transaction.fee)); + + // here we show confirmation popup; + + transactionConfirmationPopup.title = qsTr("Confirmation") + translationManager.emptyString + transactionConfirmationPopup.text = qsTr("Please confirm transaction:\n") + + qsTr("\n\nAmount: ") + walletManager.displayAmount(transaction.amount) + + qsTr("\nFee: ") + walletManager.displayAmount(transaction.fee) + + translationManager.emptyString + transactionConfirmationPopup.icon = StandardIcon.Question + transactionConfirmationPopup.open() + // committing transaction + } + } + // called after user confirms transaction function handleTransactionConfirmed() { // grab transaction.txid before commit, since it clears it. diff --git a/pages/Transfer.qml b/pages/Transfer.qml index 95c3e993..260f4b54 100644 --- a/pages/Transfer.qml +++ b/pages/Transfer.qml @@ -35,6 +35,7 @@ Rectangle { id: root signal paymentClicked(string address, string paymentId, string amount, int mixinCount, int priority, string description) + signal sweepUnmixableClicked() color: "#F0EEEE" @@ -295,4 +296,24 @@ Rectangle { } } + + StandardButton { + id: sweepUnmixableButton + anchors.right: parent.right + anchors.top: descriptionLine.bottom + anchors.rightMargin: 17 + anchors.topMargin: 17 + width: 60*2 + text: qsTr("SWEEP UNMIXABLE") + translationManager.emptyString + shadowReleasedColor: "#FF4304" + shadowPressedColor: "#B32D00" + releasedColor: "#FF6C3C" + pressedColor: "#FF4304" + enabled : true + onClicked: { + console.log("Transfer: sweepUnmixableClicked") + root.sweepUnmixableClicked() + + } + } } diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index 78cb6949..d7fefbf9 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -216,7 +216,6 @@ PendingTransaction *Wallet::createTransaction(const QString &dst_addr, const QSt return result; } - void Wallet::createTransactionAsync(const QString &dst_addr, const QString &payment_id, quint64 amount, quint32 mixin_count, PendingTransaction::Priority priority) @@ -233,7 +232,12 @@ void Wallet::createTransactionAsync(const QString &dst_addr, const QString &paym }); } - +PendingTransaction *Wallet::createSweepUnmixableTransaction() +{ + Bitmonero::PendingTransaction * ptImpl = m_walletImpl->createSweepUnmixableTransaction(); + PendingTransaction * result = new PendingTransaction(ptImpl, this); + return result; +} void Wallet::disposeTransaction(PendingTransaction *t) { diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index fc7363e8..ecdfa2fd 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -130,6 +130,11 @@ public: Q_INVOKABLE void createTransactionAsync(const QString &dst_addr, const QString &payment_id, quint64 amount, quint32 mixin_count, PendingTransaction::Priority priority); + + // + //! creates sweep unmixable transaction + Q_INVOKABLE PendingTransaction * createSweepUnmixableTransaction(); + //! deletes transaction and frees memory Q_INVOKABLE void disposeTransaction(PendingTransaction * t);