mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 23:18:14 +01:00
Merge bitcoin-core/gui#125: Enable changing the autoprune block space size in intro dialog
415fb2e1abGUI/Intro: Move prune setting below explanation (Luke Dashjr)2a84c6bcf6GUI/Intro: Estimate max age of backups that can be restored with pruning (Luke Dashjr)e2dcd957faGUI/Intro: Rework UI flow to let the user set prune size in GBs (Luke Dashjr)f2e5a6b54fGUI/Intro: Abstract GUI-to-option into Intro::getPrune (Luke Dashjr)62932cc686GUI/Intro: Return actual prune setting from showIfNeeded (Luke Dashjr) Pull request description:  Moved from https://github.com/bitcoin/bitcoin/pull/18728 ACKs for top commit: ryanofsky: Code review ACK415fb2e1ab. Changes since last review: mb/gib suffixes, constexpr QOverload expected_backup_days tweaks, new moveonly layout commit jarolrod: Tested ACK415fb2e. Talkless: tACK415fb2e1ab, tested on Debian Sid with Qt 5.15.2. hebasto: ACK415fb2e1ab, my unresolved comments are not blockers, and they could be resolved in follow ups. Tree-SHA512: bd4882a9c08e6a6eb14b7fb6366983db8581425b4949fea212785d34d8fad9e32fb81ca8c8cdbfb2c05ea394aaf5a746ba2cf16623795c7252c3bdb61d455f00
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
|
||||
#include <interfaces/node.h>
|
||||
#include <util/system.h>
|
||||
#include <validation.h>
|
||||
|
||||
#include <QFileDialog>
|
||||
#include <QSettings>
|
||||
@@ -139,17 +140,26 @@ Intro::Intro(QWidget *parent, int64_t blockchain_size_gb, int64_t chain_state_si
|
||||
);
|
||||
ui->lblExplanation2->setText(ui->lblExplanation2->text().arg(PACKAGE_NAME));
|
||||
|
||||
const int min_prune_target_GB = std::ceil(MIN_DISK_SPACE_FOR_BLOCK_FILES / 1e9);
|
||||
ui->pruneGB->setRange(min_prune_target_GB, std::numeric_limits<int>::max());
|
||||
if (gArgs.GetArg("-prune", 0) > 1) { // -prune=1 means enabled, above that it's a size in MiB
|
||||
ui->prune->setChecked(true);
|
||||
ui->prune->setEnabled(false);
|
||||
}
|
||||
ui->prune->setText(tr("Discard blocks after verification, except most recent %1 GB (prune)").arg(m_prune_target_gb));
|
||||
ui->pruneGB->setValue(m_prune_target_gb);
|
||||
ui->pruneGB->setToolTip(ui->prune->toolTip());
|
||||
ui->lblPruneSuffix->setToolTip(ui->prune->toolTip());
|
||||
UpdatePruneLabels(ui->prune->isChecked());
|
||||
|
||||
connect(ui->prune, &QCheckBox::toggled, [this](bool prune_checked) {
|
||||
UpdatePruneLabels(prune_checked);
|
||||
UpdateFreeSpaceLabel();
|
||||
});
|
||||
connect(ui->pruneGB, QOverload<int>::of(&QSpinBox::valueChanged), [this](int prune_GB) {
|
||||
m_prune_target_gb = prune_GB;
|
||||
UpdatePruneLabels(ui->prune->isChecked());
|
||||
UpdateFreeSpaceLabel();
|
||||
});
|
||||
|
||||
startThread();
|
||||
}
|
||||
@@ -182,7 +192,17 @@ void Intro::setDataDirectory(const QString &dataDir)
|
||||
}
|
||||
}
|
||||
|
||||
bool Intro::showIfNeeded(bool& did_show_intro, bool& prune)
|
||||
int64_t Intro::getPruneMiB() const
|
||||
{
|
||||
switch (ui->prune->checkState()) {
|
||||
case Qt::Checked:
|
||||
return PruneGBtoMiB(m_prune_target_gb);
|
||||
case Qt::Unchecked: default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool Intro::showIfNeeded(bool& did_show_intro, int64_t& prune_MiB)
|
||||
{
|
||||
did_show_intro = false;
|
||||
|
||||
@@ -233,7 +253,7 @@ bool Intro::showIfNeeded(bool& did_show_intro, bool& prune)
|
||||
}
|
||||
|
||||
// Additional preferences:
|
||||
prune = intro.ui->prune->isChecked();
|
||||
prune_MiB = intro.getPruneMiB();
|
||||
|
||||
settings.setValue("strDataDir", dataDir);
|
||||
settings.setValue("fReset", false);
|
||||
@@ -361,6 +381,11 @@ void Intro::UpdatePruneLabels(bool prune_checked)
|
||||
storageRequiresMsg = tr("Approximately %1 GB of data will be stored in this directory.");
|
||||
}
|
||||
ui->lblExplanation3->setVisible(prune_checked);
|
||||
ui->pruneGB->setEnabled(prune_checked);
|
||||
static constexpr uint64_t nPowTargetSpacing = 10 * 60; // from chainparams, which we don't have at this stage
|
||||
static constexpr uint32_t expected_block_data_size = 2250000; // includes undo data
|
||||
const uint64_t expected_backup_days = m_prune_target_gb * 1e9 / (uint64_t(expected_block_data_size) * 86400 / nPowTargetSpacing);
|
||||
ui->lblPruneSuffix->setText(tr("(sufficient to restore backups %n day(s) old)", "block chain pruning", expected_backup_days));
|
||||
ui->sizeWarningLabel->setText(
|
||||
tr("%1 will download and store a copy of the Bitcoin block chain.").arg(PACKAGE_NAME) + " " +
|
||||
storageRequiresMsg.arg(m_required_space_gb) + " " +
|
||||
|
||||
Reference in New Issue
Block a user