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.
This commit is contained in:
parent
232393e3bd
commit
2e00b8fbd9
@ -23,13 +23,10 @@ WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *p
|
|||||||
addressTableModel = new AddressTableModel(wallet, this);
|
addressTableModel = new AddressTableModel(wallet, this);
|
||||||
transactionTableModel = new TransactionTableModel(wallet, this);
|
transactionTableModel = new TransactionTableModel(wallet, this);
|
||||||
|
|
||||||
// This single-shot timer will be fired from the 'checkBalancedChanged'
|
// This timer will be fired repeatedly to update the balance
|
||||||
// method repeatedly while either of the unconfirmed or immature balances
|
|
||||||
// are non-zero
|
|
||||||
pollTimer = new QTimer(this);
|
pollTimer = new QTimer(this);
|
||||||
pollTimer->setInterval(MODEL_UPDATE_DELAY);
|
|
||||||
pollTimer->setSingleShot(true);
|
|
||||||
connect(pollTimer, SIGNAL(timeout()), this, SLOT(pollBalanceChanged()));
|
connect(pollTimer, SIGNAL(timeout()), this, SLOT(pollBalanceChanged()));
|
||||||
|
pollTimer->start(MODEL_UPDATE_DELAY);
|
||||||
|
|
||||||
subscribeToCoreSignals();
|
subscribeToCoreSignals();
|
||||||
}
|
}
|
||||||
@ -74,13 +71,12 @@ void WalletModel::updateStatus()
|
|||||||
|
|
||||||
void WalletModel::pollBalanceChanged()
|
void WalletModel::pollBalanceChanged()
|
||||||
{
|
{
|
||||||
if(nBestHeight != cachedNumBlocks) {
|
if(nBestHeight != cachedNumBlocks)
|
||||||
|
{
|
||||||
|
// Balance and number of transactions might have changed
|
||||||
cachedNumBlocks = nBestHeight;
|
cachedNumBlocks = nBestHeight;
|
||||||
checkBalanceChanged();
|
checkBalanceChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cachedUnconfirmedBalance || cachedImmatureBalance)
|
|
||||||
pollTimer->start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WalletModel::checkBalanceChanged()
|
void WalletModel::checkBalanceChanged()
|
||||||
@ -89,7 +85,8 @@ void WalletModel::checkBalanceChanged()
|
|||||||
qint64 newUnconfirmedBalance = getUnconfirmedBalance();
|
qint64 newUnconfirmedBalance = getUnconfirmedBalance();
|
||||||
qint64 newImmatureBalance = getImmatureBalance();
|
qint64 newImmatureBalance = getImmatureBalance();
|
||||||
|
|
||||||
if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance || cachedImmatureBalance != newImmatureBalance) {
|
if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance || cachedImmatureBalance != newImmatureBalance)
|
||||||
|
{
|
||||||
cachedBalance = newBalance;
|
cachedBalance = newBalance;
|
||||||
cachedUnconfirmedBalance = newUnconfirmedBalance;
|
cachedUnconfirmedBalance = newUnconfirmedBalance;
|
||||||
cachedImmatureBalance = newImmatureBalance;
|
cachedImmatureBalance = newImmatureBalance;
|
||||||
@ -105,13 +102,11 @@ void WalletModel::updateTransaction(const QString &hash, int status)
|
|||||||
// Balance and number of transactions might have changed
|
// Balance and number of transactions might have changed
|
||||||
checkBalanceChanged();
|
checkBalanceChanged();
|
||||||
|
|
||||||
if(cachedUnconfirmedBalance || cachedImmatureBalance)
|
|
||||||
pollTimer->start();
|
|
||||||
|
|
||||||
int newNumTransactions = getNumTransactions();
|
int newNumTransactions = getNumTransactions();
|
||||||
if(cachedNumTransactions != newNumTransactions) {
|
if(cachedNumTransactions != newNumTransactions)
|
||||||
emit numTransactionsChanged(newNumTransactions);
|
{
|
||||||
cachedNumTransactions = newNumTransactions;
|
cachedNumTransactions = newNumTransactions;
|
||||||
|
emit numTransactionsChanged(newNumTransactions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user