aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2011-07-17 14:06:43 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2011-07-17 14:17:13 +0200
commit5df0b03c950184b2e2fdbfc6e9f8075dcf81c75c (patch)
tree889d52734e8e4a0a096289d52d03aa02d66f8292 /src
parentb5f918cbd69e02f1e955fe90a13444a15a7de43f (diff)
make initial block download reporting somewhat better by tracking version responses
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp6
-rw-r--r--src/qt/bitcoingui.cpp11
-rw-r--r--src/qt/clientmodel.cpp18
-rw-r--r--src/qt/clientmodel.h3
-rw-r--r--src/qt/guiconstants.h2
-rw-r--r--src/qt/walletmodel.cpp21
-rw-r--r--src/qt/walletmodel.h4
7 files changed, 49 insertions, 16 deletions
diff --git a/src/main.cpp b/src/main.cpp
index e3ad35044e..3a482e7cfa 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -32,7 +32,7 @@ map<COutPoint, CInPoint> mapNextTx;
map<uint256, CBlockIndex*> mapBlockIndex;
uint256 hashGenesisBlock("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f");
CBigNum bnProofOfWorkLimit(~uint256(0) >> 32);
-const int nTotalBlocksEstimate = 134444; // Conservative estimate of total nr of blocks on main chain
+int nTotalBlocksEstimate = 134444; // Conservative estimate of total nr of blocks on main chain
const int nInitialBlockThreshold = 120; // Regard blocks up until N-threshold as "initial download"
CBlockIndex* pindexGenesisBlock = NULL;
int nBestHeight = -1;
@@ -1869,6 +1869,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
pfrom->fSuccessfullyConnected = true;
printf("version message: version %d, blocks=%d\n", pfrom->nVersion, pfrom->nStartingHeight);
+ if(pfrom->nStartingHeight > nTotalBlocksEstimate)
+ {
+ nTotalBlocksEstimate = pfrom->nStartingHeight;
+ }
}
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index 016f261941..6a6f3f32ec 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -292,17 +292,21 @@ void BitcoinGUI::setNumConnections(int count)
void BitcoinGUI::setNumBlocks(int count)
{
int total = clientModel->getTotalBlocksEstimate();
+ QString tooltip;
+
if(count < total)
{
progressBarLabel->setVisible(true);
progressBar->setVisible(true);
progressBar->setMaximum(total);
progressBar->setValue(count);
+ tooltip = tr("Downloaded %1 of %2 blocks of transaction history.").arg(count).arg(total);
}
else
{
progressBarLabel->setVisible(false);
progressBar->setVisible(false);
+ tooltip = tr("Downloaded %1 blocks of transaction history.").arg(count);
}
QDateTime now = QDateTime::currentDateTime();
@@ -329,10 +333,13 @@ void BitcoinGUI::setNumBlocks(int count)
{
text = tr("%n day(s) ago","",secs/(60*60*24));
}
+ tooltip += QString("\n");
+ tooltip += tr("Last block was generated %1.").arg(QLocale::system().toString(lastBlockDate));
labelBlocks->setText("<img src=\""+icon+"\"> " + text);
- labelBlocks->setToolTip(tr("Downloaded %n block(s) of transaction history. Last block was generated %1.", "", count)
- .arg(QLocale::system().toString(lastBlockDate)));
+ labelBlocks->setToolTip(tooltip);
+ progressBarLabel->setToolTip(tooltip);
+ progressBar->setToolTip(tooltip);
}
void BitcoinGUI::error(const QString &title, const QString &message)
diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp
index 8885b4cb5b..c147aa5a6e 100644
--- a/src/qt/clientmodel.cpp
+++ b/src/qt/clientmodel.cpp
@@ -10,7 +10,8 @@
#include <QDateTime>
ClientModel::ClientModel(CWallet *wallet, QObject *parent) :
- QObject(parent), wallet(wallet), optionsModel(0)
+ QObject(parent), wallet(wallet), optionsModel(0),
+ cachedNumConnections(0), cachedNumBlocks(0)
{
// Until signal notifications is built into the bitcoin core,
// simply update everything after polling using a timer.
@@ -38,11 +39,16 @@ QDateTime ClientModel::getLastBlockDate() const
void ClientModel::update()
{
- // Plainly emit all signals for now. To be more efficient this should check
- // whether the values actually changed first, although it'd be even better if these
- // were events coming in from the bitcoin core.
- emit numConnectionsChanged(getNumConnections());
- emit numBlocksChanged(getNumBlocks());
+ int newNumConnections = getNumConnections();
+ int newNumBlocks = getNumBlocks();
+
+ if(cachedNumConnections != newNumConnections)
+ emit numConnectionsChanged(newNumConnections);
+ if(cachedNumBlocks != newNumBlocks)
+ emit numBlocksChanged(newNumBlocks);
+
+ cachedNumConnections = newNumConnections;
+ cachedNumBlocks = newNumBlocks;
}
bool ClientModel::isTestNet() const
diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h
index 6c2c275cef..f7ad14c28b 100644
--- a/src/qt/clientmodel.h
+++ b/src/qt/clientmodel.h
@@ -42,6 +42,9 @@ private:
OptionsModel *optionsModel;
+ int cachedNumConnections;
+ int cachedNumBlocks;
+
signals:
void numConnectionsChanged(int count);
void numBlocksChanged(int count);
diff --git a/src/qt/guiconstants.h b/src/qt/guiconstants.h
index cdd1a74d98..59f49625bd 100644
--- a/src/qt/guiconstants.h
+++ b/src/qt/guiconstants.h
@@ -2,7 +2,7 @@
#define GUICONSTANTS_H
/* milliseconds between model updates */
-static const int MODEL_UPDATE_DELAY = 250;
+static const int MODEL_UPDATE_DELAY = 500;
/* size of cache */
static const unsigned int WALLET_CACHE_SIZE = 100;
diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
index 6e4b814d12..4ff2e0ab15 100644
--- a/src/qt/walletmodel.cpp
+++ b/src/qt/walletmodel.cpp
@@ -11,7 +11,8 @@
WalletModel::WalletModel(CWallet *wallet, QObject *parent) :
QObject(parent), wallet(wallet), optionsModel(0), addressTableModel(0),
- transactionTableModel(0)
+ transactionTableModel(0),
+ cachedBalance(0), cachedUnconfirmedBalance(0), cachedNumTransactions(0)
{
// Until signal notifications is built into the bitcoin core,
// simply update everything after polling using a timer.
@@ -46,11 +47,19 @@ int WalletModel::getNumTransactions() const
void WalletModel::update()
{
- // Plainly emit all signals for now. To be more efficient this should check
- // whether the values actually changed first, although it'd be even better if these
- // were events coming in from the bitcoin core.
- emit balanceChanged(getBalance(), wallet->GetUnconfirmedBalance());
- emit numTransactionsChanged(getNumTransactions());
+ qint64 newBalance = getBalance();
+ qint64 newUnconfirmedBalance = getUnconfirmedBalance();
+ int newNumTransactions = getNumTransactions();
+
+ if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance)
+ emit balanceChanged(newBalance, newUnconfirmedBalance);
+
+ if(cachedNumTransactions != newNumTransactions)
+ emit numTransactionsChanged(newNumTransactions);
+
+ cachedBalance = newBalance;
+ cachedUnconfirmedBalance = newUnconfirmedBalance;
+ cachedNumTransactions = newNumTransactions;
addressTableModel->update();
}
diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h
index af2cac4b31..668d44632f 100644
--- a/src/qt/walletmodel.h
+++ b/src/qt/walletmodel.h
@@ -73,6 +73,10 @@ private:
AddressTableModel *addressTableModel;
TransactionTableModel *transactionTableModel;
+ qint64 cachedBalance;
+ qint64 cachedUnconfirmedBalance;
+ qint64 cachedNumTransactions;
+
signals:
void balanceChanged(qint64 balance, qint64 unconfirmedBalance);
void numTransactionsChanged(int count);