Add a timer to check for changes in immature or unconfirmed balances,
when these are non-zero. Fixed a minor mem leak.
This commit is contained in:
parent
fe70b09c42
commit
6c83a8419b
|
@ -18,7 +18,7 @@ ClientModel::ClientModel(OptionsModel *optionsModel, QObject *parent) :
|
|||
{
|
||||
numBlocksAtStartup = -1;
|
||||
|
||||
pollTimer = new QTimer();
|
||||
pollTimer = new QTimer(this);
|
||||
pollTimer->setInterval(MODEL_UPDATE_DELAY);
|
||||
pollTimer->start();
|
||||
connect(pollTimer, SIGNAL(timeout()), this, SLOT(updateTimer()));
|
||||
|
|
|
@ -10,17 +10,27 @@
|
|||
#include "base58.h"
|
||||
|
||||
#include <QSet>
|
||||
#include <QTimer>
|
||||
|
||||
WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent) :
|
||||
QObject(parent), wallet(wallet), optionsModel(optionsModel), addressTableModel(0),
|
||||
transactionTableModel(0),
|
||||
cachedBalance(0), cachedUnconfirmedBalance(0), cachedImmatureBalance(0),
|
||||
cachedNumTransactions(0),
|
||||
cachedEncryptionStatus(Unencrypted)
|
||||
cachedEncryptionStatus(Unencrypted),
|
||||
cachedNumBlocks(0)
|
||||
{
|
||||
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
|
||||
pollTimer = new QTimer(this);
|
||||
pollTimer->setInterval(MODEL_UPDATE_DELAY);
|
||||
pollTimer->setSingleShot(true);
|
||||
connect(pollTimer, SIGNAL(timeout()), this, SLOT(pollBalanceChanged()));
|
||||
|
||||
subscribeToCoreSignals();
|
||||
}
|
||||
|
||||
|
@ -62,28 +72,48 @@ void WalletModel::updateStatus()
|
|||
emit encryptionStatusChanged(newEncryptionStatus);
|
||||
}
|
||||
|
||||
void WalletModel::pollBalanceChanged()
|
||||
{
|
||||
if(nBestHeight != cachedNumBlocks) {
|
||||
cachedNumBlocks = nBestHeight;
|
||||
checkBalanceChanged();
|
||||
}
|
||||
|
||||
if(cachedUnconfirmedBalance || cachedImmatureBalance)
|
||||
pollTimer->start();
|
||||
}
|
||||
|
||||
void WalletModel::checkBalanceChanged()
|
||||
{
|
||||
qint64 newBalance = getBalance();
|
||||
qint64 newUnconfirmedBalance = getUnconfirmedBalance();
|
||||
qint64 newImmatureBalance = getImmatureBalance();
|
||||
|
||||
if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance || cachedImmatureBalance != newImmatureBalance) {
|
||||
cachedBalance = newBalance;
|
||||
cachedUnconfirmedBalance = newUnconfirmedBalance;
|
||||
cachedImmatureBalance = newImmatureBalance;
|
||||
emit balanceChanged(newBalance, newUnconfirmedBalance, newImmatureBalance);
|
||||
}
|
||||
}
|
||||
|
||||
void WalletModel::updateTransaction(const QString &hash, int status)
|
||||
{
|
||||
if(transactionTableModel)
|
||||
transactionTableModel->updateTransaction(hash, status);
|
||||
|
||||
// Balance and number of transactions might have changed
|
||||
qint64 newBalance = getBalance();
|
||||
qint64 newUnconfirmedBalance = getUnconfirmedBalance();
|
||||
qint64 newImmatureBalance = getImmatureBalance();
|
||||
checkBalanceChanged();
|
||||
|
||||
if(cachedUnconfirmedBalance || cachedImmatureBalance)
|
||||
pollTimer->start();
|
||||
|
||||
int newNumTransactions = getNumTransactions();
|
||||
|
||||
if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance || cachedImmatureBalance != newImmatureBalance)
|
||||
emit balanceChanged(newBalance, newUnconfirmedBalance, newImmatureBalance);
|
||||
|
||||
if(cachedNumTransactions != newNumTransactions)
|
||||
if(cachedNumTransactions != newNumTransactions) {
|
||||
emit numTransactionsChanged(newNumTransactions);
|
||||
|
||||
cachedBalance = newBalance;
|
||||
cachedUnconfirmedBalance = newUnconfirmedBalance;
|
||||
cachedImmatureBalance = newImmatureBalance;
|
||||
cachedNumTransactions = newNumTransactions;
|
||||
}
|
||||
}
|
||||
|
||||
void WalletModel::updateAddressBook(const QString &address, const QString &label, bool isMine, int status)
|
||||
{
|
||||
|
|
|
@ -10,6 +10,10 @@ class AddressTableModel;
|
|||
class TransactionTableModel;
|
||||
class CWallet;
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QTimer;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
class SendCoinsRecipient
|
||||
{
|
||||
public:
|
||||
|
@ -120,9 +124,14 @@ private:
|
|||
qint64 cachedImmatureBalance;
|
||||
qint64 cachedNumTransactions;
|
||||
EncryptionStatus cachedEncryptionStatus;
|
||||
int cachedNumBlocks;
|
||||
|
||||
QTimer *pollTimer;
|
||||
|
||||
void subscribeToCoreSignals();
|
||||
void unsubscribeFromCoreSignals();
|
||||
void checkBalanceChanged();
|
||||
|
||||
signals:
|
||||
// Signal that balance in wallet changed
|
||||
void balanceChanged(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance);
|
||||
|
@ -148,6 +157,8 @@ public slots:
|
|||
void updateTransaction(const QString &hash, int status);
|
||||
/* New, updated or removed address book entry */
|
||||
void updateAddressBook(const QString &address, const QString &label, bool isMine, int status);
|
||||
/* Current, immature or unconfirmed balance might have changed - emit 'balanceChanged' if so */
|
||||
void pollBalanceChanged();
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue