aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Kitaev <mbg033@gmail.com>2016-07-13 15:24:40 +0300
committerIlya Kitaev <mbg033@gmail.com>2016-07-13 15:24:40 +0300
commitd9f031ec2a3b6dc256ea138a8aa8326e41130e4b (patch)
tree1b0a658b6dfeb39fd2af7d507c61d845a72257db
parentc027922cb710ca78e400c30268f5ceaec10a7e49 (diff)
downloadmonzero-gui-d9f031ec2a3b6dc256ea138a8aa8326e41130e4b.tar.gz
monzero-gui-d9f031ec2a3b6dc256ea138a8aa8326e41130e4b.tar.xz
monzero-gui-d9f031ec2a3b6dc256ea138a8aa8326e41130e4b.zip
Async API integration in progress
-rw-r--r--main.cpp1
-rw-r--r--main.qml43
-rw-r--r--src/libwalletqt/Wallet.cpp44
-rw-r--r--src/libwalletqt/Wallet.h9
4 files changed, 88 insertions, 9 deletions
diff --git a/main.cpp b/main.cpp
index 7b2799d4..43ef8186 100644
--- a/main.cpp
+++ b/main.cpp
@@ -56,6 +56,7 @@ int main(int argc, char *argv[])
qmlRegisterUncreatableType<Wallet>("Bitmonero.Wallet", 1, 0, "Wallet", "Wallet can't be instantiated directly");
qmlRegisterUncreatableType<PendingTransaction>("Bitmonero.PendingTransaction", 1, 0, "PendingTransaction",
"PendingTransaction can't be instantiated directly");
+
qRegisterMetaType<PendingTransaction::Priority>();
diff --git a/main.qml b/main.qml
index e890a75b..b96b5dea 100644
--- a/main.qml
+++ b/main.qml
@@ -35,6 +35,7 @@ import Qt.labs.settings 1.0
import Bitmonero.Wallet 1.0
import Bitmonero.PendingTransaction 1.0
+
import "components"
import "wizard"
@@ -50,6 +51,7 @@ ApplicationWindow {
property var wallet;
property var transaction;
+
function altKeyReleased() { ctrlPressed = false; }
function showPageRequest(page) {
@@ -122,7 +124,7 @@ ApplicationWindow {
function initialize() {
-
+ console.log("initializing..")
middlePanel.paymentClicked.connect(handlePayment);
if (typeof wizard.settings['wallet'] !== 'undefined') {
@@ -143,24 +145,34 @@ ApplicationWindow {
}
console.log("Wallet opened successfully: ", wallet.errorString);
}
+ // display splash screen...
+ console.log("initializing with daemon address..")
if (!wallet.init(persistentSettings.daemon_address, 0)) {
console.log("Error initialize wallet: ", wallet.errorString);
return
}
+ console.log("Wallet initialized successfully")
+ // TODO: update network indicator
// subscribing for wallet updates
wallet.updated.connect(onWalletUpdate);
-
+ wallet.refreshed.connect(onWalletRefresh);
+ console.log("refreshing wallet async")
// TODO: refresh asynchronously without blocking UI, implement signal(s)
- wallet.refresh();
-
+ wallet.refreshAsync();
console.log("wallet balance: ", wallet.balance)
}
function onWalletUpdate() {
- console.log("wallet updated")
+ console.log(">>> wallet updated")
+ leftPanel.unlockedBalanceText = walletManager.displayAmount(wallet.unlockedBalance);
+ leftPanel.balanceText = walletManager.displayAmount(wallet.balance);
+ }
+
+ function onWalletRefresh() {
+ console.log(">>> wallet refreshed")
leftPanel.unlockedBalanceText = walletManager.displayAmount(wallet.unlockedBalance);
leftPanel.balanceText = walletManager.displayAmount(wallet.balance);
}
@@ -206,10 +218,10 @@ ApplicationWindow {
transactionConfirmationPopup.title = qsTr("Confirmation")
transactionConfirmationPopup.text = qsTr("Please confirm transaction:\n\n")
- + "\nAddress: " + address
- + "\nPayment ID: " + paymentId
- + "\nAmount: " + walletManager.displayAmount(transaction.amount)
- + "\nFee: " + walletManager.displayAmount(transaction.fee)
+ + qsTr("\nAddress: ") + address
+ + qsTr("\nPayment ID: ") + paymentId
+ + qsTr("\nAmount: ") + walletManager.displayAmount(transaction.amount)
+ + qsTr("\nFee: ") + walletManager.displayAmount(transaction.fee)
transactionConfirmationPopup.icon = StandardIcon.Question
transactionConfirmationPopup.open()
// committing transaction
@@ -288,6 +300,19 @@ ApplicationWindow {
}
}
+ Window {
+ id: walletInitializationSplash
+ modality: Qt.ApplicationModal
+ flags: Qt.SplashScreen
+ height: 100
+ width: 250
+ Text {
+ anchors.fill: parent
+ text: qsTr("Initializing Wallet...");
+ }
+
+ }
+
Item {
id: rootItem
diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp
index e6368ad2..3697984e 100644
--- a/src/libwalletqt/Wallet.cpp
+++ b/src/libwalletqt/Wallet.cpp
@@ -14,6 +14,45 @@ namespace {
}
+class WalletListenerImpl : public Bitmonero::WalletListener
+{
+public:
+ WalletListenerImpl(Wallet * w)
+ : m_wallet(w)
+ {
+
+ }
+
+ virtual void moneySpent(const std::string &txId, uint64_t amount)
+ {
+ // TODO
+ Q_UNUSED(txId)
+ Q_UNUSED(amount)
+ }
+
+ virtual void moneyReceived(const std::string &txId, uint64_t amount)
+ {
+ // TODO
+ Q_UNUSED(txId)
+ Q_UNUSED(amount)
+ }
+
+ virtual void updated()
+ {
+ emit m_wallet->updated();
+ }
+
+ // called when wallet refreshed by background thread or explicitly
+ virtual void refreshed()
+ {
+ emit m_wallet->refreshed();
+ }
+
+private:
+ Wallet * m_wallet;
+};
+
+
QString Wallet::getSeed() const
{
@@ -88,6 +127,11 @@ bool Wallet::refresh()
return result;
}
+void Wallet::refreshAsync()
+{
+ m_walletImpl->refreshAsync();
+}
+
PendingTransaction *Wallet::createTransaction(const QString &dst_addr, const QString &payment_id,
quint64 amount, quint32 mixin_count,
PendingTransaction::Priority priority)
diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h
index 241b89d8..4d6a1ea0 100644
--- a/src/libwalletqt/Wallet.h
+++ b/src/libwalletqt/Wallet.h
@@ -77,6 +77,10 @@ public:
//! refreshes the wallet
Q_INVOKABLE bool refresh();
+
+ //! refreshes the wallet asynchronously
+ Q_INVOKABLE void refreshAsync();
+
//! creates transaction
Q_INVOKABLE PendingTransaction * createTransaction(const QString &dst_addr, const QString &payment_id,
quint64 amount, quint32 mixin_count,
@@ -103,6 +107,10 @@ public:
signals:
void updated();
+ // emitted when refresh process finished (could take a long time)
+ // signalling only after we
+ void refreshed();
+
private:
Wallet(Bitmonero::Wallet *w, QObject * parent = 0);
@@ -110,6 +118,7 @@ private:
private:
friend class WalletManager;
+ friend class WalletListenerImpl;
//! libwallet's
Bitmonero::Wallet * m_walletImpl;
// history lifetime managed by wallet;