Skip to content

Commit

Permalink
Merge bitcoin#8821: [qt] sync-overlay: Don't block during reindex
Browse files Browse the repository at this point in the history
fa85e86 [qt] sync-overlay: Don't show estimated number of headers left (MarcoFalke)
faa4de2 [qt] sync-overlay: Don't block during reindex (MarcoFalke)
  • Loading branch information
jonasschnelli committed Oct 10, 2016
2 parents 6429cfa + fa85e86 commit bf8e68a
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 14 deletions.
2 changes: 1 addition & 1 deletion src/qt/clientmodel.cpp
Expand Up @@ -256,7 +256,7 @@ static void BlockTipChanged(ClientModel *clientmodel, bool initialSync, const CB
int64_t& nLastUpdateNotification = fHeader ? nLastHeaderTipUpdateNotification : nLastBlockTipUpdateNotification;

// if we are in-sync, update the UI regardless of last update time
if (fHeader || !initialSync || now - nLastUpdateNotification > MODEL_UPDATE_DELAY) {
if (!initialSync || now - nLastUpdateNotification > MODEL_UPDATE_DELAY) {
//pass a async signal to the UI thread
QMetaObject::invokeMethod(clientmodel, "numBlocksChanged", Qt::QueuedConnection,
Q_ARG(int, pIndex->nHeight),
Expand Down
30 changes: 18 additions & 12 deletions src/qt/modaloverlay.cpp
Expand Up @@ -13,7 +13,8 @@
ModalOverlay::ModalOverlay(QWidget *parent) :
QWidget(parent),
ui(new Ui::ModalOverlay),
bestBlockHeight(0),
bestHeaderHeight(0),
bestHeaderDate(QDateTime()),
layerIsVisible(false),
userClosed(false)
{
Expand Down Expand Up @@ -65,14 +66,9 @@ bool ModalOverlay::event(QEvent* ev) {

void ModalOverlay::setKnownBestHeight(int count, const QDateTime& blockDate)
{

/* 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;
if (count > bestHeaderHeight) {
bestHeaderHeight = count;
bestHeaderDate = blockDate;
}
}

Expand Down Expand Up @@ -125,11 +121,21 @@ void ModalOverlay::tipUpdate(int count, const QDateTime& blockDate, double nVeri
ui->percentageProgress->setText(QString::number(nVerificationProgress*100, 'f', 2)+"%");
ui->progressBar->setValue(nVerificationProgress*100);

if (!bestHeaderDate.isValid())
// not syncing
return;

// estimate the number of headers left based on nPowTargetSpacing
// and check if the gui is not aware of the the best header (happens rarely)
int estimateNumHeadersLeft = bestHeaderDate.secsTo(currentDate) / 600;
bool hasBestHeader = bestHeaderHeight >= count;

// show remaining number of blocks
if (bestBlockHeight > 0)
ui->numberOfBlocksLeft->setText(QString::number(bestBlockHeight-count));
else
if (estimateNumHeadersLeft < 24 && hasBestHeader) {
ui->numberOfBlocksLeft->setText(QString::number(bestHeaderHeight - count));
} else {
ui->expectedTimeLeft->setText(tr("Unknown. Syncing Headers..."));
}
}

void ModalOverlay::showHide(bool hide, bool userRequested)
Expand Down
3 changes: 2 additions & 1 deletion src/qt/modaloverlay.h
Expand Up @@ -35,7 +35,8 @@ public Q_SLOTS:

private:
Ui::ModalOverlay *ui;
int bestBlockHeight; //best known height (based on the headers)
int bestHeaderHeight; //best known height (based on the headers)
QDateTime bestHeaderDate;
QVector<QPair<qint64, double> > blockProcessTime;
bool layerIsVisible;
bool userClosed;
Expand Down

0 comments on commit bf8e68a

Please sign in to comment.