Async API integration in progress

This commit is contained in:
Ilya Kitaev 2016-07-13 15:24:40 +03:00
parent c027922cb7
commit d9f031ec2a
4 changed files with 88 additions and 9 deletions

View File

@ -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>();

View File

@ -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

View File

@ -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)

View File

@ -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;