aboutsummaryrefslogtreecommitdiff
path: root/src/qt/walletmodel.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2012-07-10 15:19:57 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2012-07-11 09:01:11 +0200
commit2e00b8fbd9138c03a11af9f7cb5418b57cd0ddb5 (patch)
tree16f2181964d3e445d85f03be6ca65db30678bace /src/qt/walletmodel.cpp
parent232393e3bda19392d1a9727c81bad1796b6061a8 (diff)
downloadbitcoin-2e00b8fbd9138c03a11af9f7cb5418b57cd0ddb5.tar.xz
Persistently poll for balance change when number of blocks changed
Fixes #1452. Until we can make the logic water-tight *and* are notified in every case the balance might have changed, remove the premature optimization and simply recompute the balance every half a second when the number of blocks changed.
Diffstat (limited to 'src/qt/walletmodel.cpp')
-rw-r--r--src/qt/walletmodel.cpp25
1 files changed, 10 insertions, 15 deletions
diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
index 0111e0cd91..3568616cd3 100644
--- a/src/qt/walletmodel.cpp
+++ b/src/qt/walletmodel.cpp
@@ -23,13 +23,10 @@ WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *p
addressTableModel = new AddressTableModel(wallet, this);
transactionTableModel = new TransactionTableModel(wallet, this);
- // This single-shot timer will be fired from the 'checkBalancedChanged'
- // method repeatedly while either of the unconfirmed or immature balances
- // are non-zero
+ // This timer will be fired repeatedly to update the balance
pollTimer = new QTimer(this);
- pollTimer->setInterval(MODEL_UPDATE_DELAY);
- pollTimer->setSingleShot(true);
connect(pollTimer, SIGNAL(timeout()), this, SLOT(pollBalanceChanged()));
+ pollTimer->start(MODEL_UPDATE_DELAY);
subscribeToCoreSignals();
}
@@ -74,13 +71,12 @@ void WalletModel::updateStatus()
void WalletModel::pollBalanceChanged()
{
- if(nBestHeight != cachedNumBlocks) {
+ if(nBestHeight != cachedNumBlocks)
+ {
+ // Balance and number of transactions might have changed
cachedNumBlocks = nBestHeight;
checkBalanceChanged();
}
-
- if(cachedUnconfirmedBalance || cachedImmatureBalance)
- pollTimer->start();
}
void WalletModel::checkBalanceChanged()
@@ -89,7 +85,8 @@ void WalletModel::checkBalanceChanged()
qint64 newUnconfirmedBalance = getUnconfirmedBalance();
qint64 newImmatureBalance = getImmatureBalance();
- if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance || cachedImmatureBalance != newImmatureBalance) {
+ if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance || cachedImmatureBalance != newImmatureBalance)
+ {
cachedBalance = newBalance;
cachedUnconfirmedBalance = newUnconfirmedBalance;
cachedImmatureBalance = newImmatureBalance;
@@ -105,13 +102,11 @@ void WalletModel::updateTransaction(const QString &hash, int status)
// Balance and number of transactions might have changed
checkBalanceChanged();
- if(cachedUnconfirmedBalance || cachedImmatureBalance)
- pollTimer->start();
-
int newNumTransactions = getNumTransactions();
- if(cachedNumTransactions != newNumTransactions) {
- emit numTransactionsChanged(newNumTransactions);
+ if(cachedNumTransactions != newNumTransactions)
+ {
cachedNumTransactions = newNumTransactions;
+ emit numTransactionsChanged(newNumTransactions);
}
}