[Qt] only update "amount of blocks left" when the header chain is in-sync

This commit is contained in:
Jonas Schnelli 2016-09-13 16:36:24 +02:00
parent e3245b43d5
commit d8b062ef5e
No known key found for this signature in database
GPG key ID: 29D4BCB6416F53EC
6 changed files with 32 additions and 9 deletions

View file

@ -500,7 +500,7 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel)
setTrayIconVisible(optionsModel->getHideTrayIcon());
}
modalOverlay->setKnownBestHeight(clientModel->getHeaderHeight());
modalOverlay->setKnownBestHeight(clientModel->getHeaderTipHeight(), QDateTime::fromTime_t(clientModel->getHeaderTipTime()));
} else {
// Disable possibility to show main window via action
toggleHideAction->setEnabled(false);
@ -718,7 +718,10 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, double nVer
if (modalOverlay)
{
if (header)
modalOverlay->setKnownBestHeight(count);
{
/* use clientmodels getHeaderTipHeight and getHeaderTipTime because the NotifyHeaderTip signal does not fire when updating the best header */
modalOverlay->setKnownBestHeight(clientModel->getHeaderTipHeight(), QDateTime::fromTime_t(clientModel->getHeaderTipTime()));
}
else
modalOverlay->tipUpdate(count, blockDate, nVerificationProgress);
}

View file

@ -68,7 +68,7 @@ int ClientModel::getNumBlocks() const
return chainActive.Height();
}
int ClientModel::getHeaderHeight() const
int ClientModel::getHeaderTipHeight() const
{
LOCK(cs_main);
if (!pindexBestHeader)
@ -76,6 +76,14 @@ int ClientModel::getHeaderHeight() const
return pindexBestHeader->nHeight;
}
int64_t ClientModel::getHeaderTipTime() const
{
LOCK(cs_main);
if (!pindexBestHeader)
return 0;
return pindexBestHeader->GetBlockTime();
}
quint64 ClientModel::getTotalBytesRecv() const
{
return CNode::GetTotalBytesRecv();

View file

@ -51,8 +51,8 @@ public:
//! Return number of connections, default is in- and outbound (total)
int getNumConnections(unsigned int flags = CONNECTIONS_ALL) const;
int getNumBlocks() const;
int getHeaderHeight() const;
int getHeaderTipHeight() const;
int64_t getHeaderTipTime() const;
//! Return number of transactions in the mempool
long getMempoolSize() const;
//! Return the dynamic memory usage of the mempool

View file

@ -82,6 +82,9 @@ QLabel { color: rgb(40,40,40); }</string>
</property>
<item>
<widget class="QPushButton" name="warningIcon">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string/>
</property>

View file

@ -63,10 +63,17 @@ bool ModalOverlay::event(QEvent* ev) {
return QWidget::event(ev);
}
void ModalOverlay::setKnownBestHeight(int count)
void ModalOverlay::setKnownBestHeight(int count, const QDateTime& blockDate)
{
if (count > bestBlockHeight)
bestBlockHeight = count;
/* only update the blockheight if the headerschain-tip is not older then 30 days */
int64_t now = QDateTime::currentDateTime().toTime_t();
int64_t btime = blockDate.toTime_t();
if (btime+3600*24*30 > now)
{
if (count > bestBlockHeight)
bestBlockHeight = count;
}
}
void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVerificationProgress)
@ -122,6 +129,8 @@ void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVeri
// show remaining amount of blocks
if (bestBlockHeight > 0)
ui->amountOfBlocksLeft->setText(QString::number(bestBlockHeight-count));
else
ui->expectedTimeLeft->setText(tr("Unknown. Syncing Headers..."));
}
void ModalOverlay::showHide(bool hide, bool userRequested)

View file

@ -23,7 +23,7 @@ public:
public Q_SLOTS:
void tipUpdate(int count, const QDateTime& blockDate, double nVerificationProgress);
void setKnownBestHeight(int count);
void setKnownBestHeight(int count, const QDateTime& blockDate);
// will show or hide the modal layer
void showHide(bool hide = false, bool userRequested = false);