[gui] intro: add prune preference
Adds a checkbox to the introduction screen letting the user enable pruning from the start. Disable checkbox when launched with -prune
This commit is contained in:
parent
1bbc49d207
commit
c8de347a9d
4 changed files with 28 additions and 3 deletions
|
@ -492,8 +492,9 @@ int GuiMain(int argc, char* argv[])
|
||||||
/// 5. Now that settings and translations are available, ask user for data directory
|
/// 5. Now that settings and translations are available, ask user for data directory
|
||||||
// User language is set up: pick a data directory
|
// User language is set up: pick a data directory
|
||||||
bool did_show_intro = false;
|
bool did_show_intro = false;
|
||||||
|
bool prune = false; // Intro dialog prune check box
|
||||||
// Gracefully exit if the user cancels
|
// Gracefully exit if the user cancels
|
||||||
if (!Intro::showIfNeeded(*node, did_show_intro)) return EXIT_SUCCESS;
|
if (!Intro::showIfNeeded(*node, did_show_intro, prune)) return EXIT_SUCCESS;
|
||||||
|
|
||||||
/// 6. Determine availability of data directory and parse bitcoin.conf
|
/// 6. Determine availability of data directory and parse bitcoin.conf
|
||||||
/// - Do not call GetDataDir(true) before this step finishes
|
/// - Do not call GetDataDir(true) before this step finishes
|
||||||
|
@ -567,6 +568,11 @@ int GuiMain(int argc, char* argv[])
|
||||||
// Load GUI settings from QSettings
|
// Load GUI settings from QSettings
|
||||||
app.createOptionsModel(gArgs.GetBoolArg("-resetguisettings", false));
|
app.createOptionsModel(gArgs.GetBoolArg("-resetguisettings", false));
|
||||||
|
|
||||||
|
if (did_show_intro) {
|
||||||
|
// Store intro dialog settings other than datadir (network specific)
|
||||||
|
app.SetPrune(prune, true);
|
||||||
|
}
|
||||||
|
|
||||||
if (gArgs.GetBoolArg("-splash", DEFAULT_SPLASHSCREEN) && !gArgs.GetBoolArg("-min", false))
|
if (gArgs.GetBoolArg("-splash", DEFAULT_SPLASHSCREEN) && !gArgs.GetBoolArg("-min", false))
|
||||||
app.createSplashScreen(networkStyle.data());
|
app.createSplashScreen(networkStyle.data());
|
||||||
|
|
||||||
|
|
|
@ -210,6 +210,16 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="prune">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="lblExplanation2">
|
<widget class="QLabel" name="lblExplanation2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|
|
@ -131,6 +131,11 @@ Intro::Intro(QWidget *parent, uint64_t blockchain_size, uint64_t chain_state_siz
|
||||||
ui->lblExplanation2->setText(ui->lblExplanation2->text().arg(PACKAGE_NAME));
|
ui->lblExplanation2->setText(ui->lblExplanation2->text().arg(PACKAGE_NAME));
|
||||||
|
|
||||||
uint64_t pruneTarget = std::max<int64_t>(0, gArgs.GetArg("-prune", 0));
|
uint64_t pruneTarget = std::max<int64_t>(0, gArgs.GetArg("-prune", 0));
|
||||||
|
if (pruneTarget > 1) { // -prune=1 means enabled, above that it's a size in MB
|
||||||
|
ui->prune->setChecked(true);
|
||||||
|
ui->prune->setEnabled(false);
|
||||||
|
}
|
||||||
|
ui->prune->setText(tr("Discard blocks after verification, except most recent %1 GB (prune)").arg(pruneTarget ? pruneTarget / 1000 : 2));
|
||||||
requiredSpace = m_blockchain_size;
|
requiredSpace = m_blockchain_size;
|
||||||
QString storageRequiresMsg = tr("At least %1 GB of data will be stored in this directory, and it will grow over time.");
|
QString storageRequiresMsg = tr("At least %1 GB of data will be stored in this directory, and it will grow over time.");
|
||||||
if (pruneTarget) {
|
if (pruneTarget) {
|
||||||
|
@ -180,7 +185,7 @@ void Intro::setDataDirectory(const QString &dataDir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Intro::showIfNeeded(interfaces::Node& node, bool& did_show_intro)
|
bool Intro::showIfNeeded(interfaces::Node& node, bool& did_show_intro, bool& prune)
|
||||||
{
|
{
|
||||||
did_show_intro = false;
|
did_show_intro = false;
|
||||||
|
|
||||||
|
@ -230,6 +235,9 @@ bool Intro::showIfNeeded(interfaces::Node& node, bool& did_show_intro)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Additional preferences:
|
||||||
|
prune = intro.ui->prune->isChecked();
|
||||||
|
|
||||||
settings.setValue("strDataDir", dataDir);
|
settings.setValue("strDataDir", dataDir);
|
||||||
settings.setValue("fReset", false);
|
settings.setValue("fReset", false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine data directory. Let the user choose if the current one doesn't exist.
|
* Determine data directory. Let the user choose if the current one doesn't exist.
|
||||||
|
* Let the user configure additional preferences such as pruning.
|
||||||
*
|
*
|
||||||
* @returns true if a data directory was selected, false if the user cancelled the selection
|
* @returns true if a data directory was selected, false if the user cancelled the selection
|
||||||
* dialog.
|
* dialog.
|
||||||
|
@ -46,7 +47,7 @@ public:
|
||||||
* @note do NOT call global GetDataDir() before calling this function, this
|
* @note do NOT call global GetDataDir() before calling this function, this
|
||||||
* will cause the wrong path to be cached.
|
* will cause the wrong path to be cached.
|
||||||
*/
|
*/
|
||||||
static bool showIfNeeded(interfaces::Node& node, bool& did_show_intro);
|
static bool showIfNeeded(interfaces::Node& node, bool& did_show_intro, bool& prune);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void requestCheck();
|
void requestCheck();
|
||||||
|
|
Loading…
Reference in a new issue