Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 49 additions & 32 deletions qml/bitcoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
#endif
#include <util/fs.h>
#include <util/fs_helpers.h>
#include <util/string.h>
#include <util/threadnames.h>
#include <util/translation.h>
#ifdef ENABLE_WALLET
Expand All @@ -77,6 +78,7 @@

#include <cassert>
#include <memory>
#include <optional>
#include <tuple>
#include <vector>

Expand All @@ -89,6 +91,7 @@
#include <QPixmap>
#include <QGuiApplication>
#include <QJSEngine>
#include <QMessageBox>
#include <QPointer>
#include <QQmlApplicationEngine>
#include <QQmlContext>
Expand Down Expand Up @@ -296,8 +299,35 @@ enum class PreInitOnboardingStatus {
FAILED,
};

bool ErrorSettingsRead(const bilingual_str& error, const std::vector<std::string>& details)
{
if (gArgs.GetBoolArg("-resetguisettings", false)) {
return false;
}

QMessageBox message_box{
QMessageBox::Critical,
CLIENT_NAME,
QString::fromStdString(strprintf("%s.", error.translated)),
QMessageBox::Reset | QMessageBox::Abort,
};
message_box.setInformativeText(QObject::tr("Do you want to reset settings to default values, or to abort without making changes?"));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: this string lost the translator comment that the Widgets ErrorSettingsRead carries. In bitcoin/src/qt/bitcoin.cpp the same setInformativeText has a /*: ... */ comment above it explaining the reset-or-abort choice for translators. Since this is the one translated string in the new code, restoring the comment keeps parity and satisfies the translator-comment convention.

message_box.setDetailedText(QString::fromStdString(util::MakeUnorderedList(details)));
message_box.setTextFormat(Qt::PlainText);
message_box.setDefaultButton(QMessageBox::Reset);
switch (message_box.exec()) {
case QMessageBox::Reset:
return false;
case QMessageBox::Abort:
return true;
default:
assert(false);
}
}

struct PreInitOnboardingContext {
std::unique_ptr<OnboardingOptionsModel> onboarding_options_model;
std::optional<QmlOnboardingSettings::PendingApply> pending_apply;
QScopedPointer<const NetworkStyle> network_style;
std::unique_ptr<QQmlApplicationEngine> engine;
#ifdef ENABLE_TEST_AUTOMATION
Expand All @@ -324,6 +354,9 @@ bool ShouldShowPreInitOnboarding(const std::vector<std::string>& argv, bool can_
const QmlOnboardingSettings::OnboardingStartupStatus status{
QmlOnboardingSettings::ResolveOnboardingStartupStatus(argv, can_listen_ipc)
};
if (status.settings_file_unreadable) {
return false;
}
return !status.ok || status.should_show_onboarding;
}

Expand Down Expand Up @@ -380,11 +413,13 @@ PreInitOnboardingStatus RunPreInitOnboarding(PreInitOnboardingContext& context,
}

QString error;
if (!context.onboarding_options_model->applyToArgs(gArgs, &error)) {
QmlOnboardingSettings::PendingApply pending_apply;
if (!context.onboarding_options_model->prepareApplyToArgs(gArgs, pending_apply, &error)) {
InitError(Untranslated(error.toStdString()));
context.close();
return PreInitOnboardingStatus::FAILED;
}
context.pending_apply = std::move(pending_apply);
return PreInitOnboardingStatus::COMPLETED;
}
} // namespace
Expand Down Expand Up @@ -465,13 +500,9 @@ int QmlGuiMain(int argc, char* argv[])

app.setQuitOnLastWindowClosed(false);
setupChainQSettings(&app, QString::fromStdString(gArgs.GetChainTypeString()).toUpper());
if (gArgs.GetBoolArg("-resetguisettings", false)) {
QString reset_error;
if (!QmlDataDir::ResetGuiSettings(gArgs, &reset_error)) {
InitError(Untranslated(reset_error.toStdString()));
return EXIT_FAILURE;
}
}
const QmlOnboardingSettings::GuiSettingsStore bootstrap_gui_settings{
QmlOnboardingSettings::CurrentGuiSettingsStore()
};

LoadFontResource(":/fonts/bitcoincoresans/regular");
LoadFontResource(":/fonts/bitcoincoresans/semibold");
Expand Down Expand Up @@ -512,26 +543,21 @@ int QmlGuiMain(int argc, char* argv[])

if (auto error = common::InitConfig(
gArgs,
[](const bilingual_str& msg, const std::vector<std::string>& details) {
return InitError(msg, details);
})) {
ErrorSettingsRead)) {
return EXIT_FAILURE;
}

const QmlLegacySettings::MigrationResult legacy_migration{
QmlLegacySettings::MigrateCoreSettings(gArgs, QmlLegacySettings::MigrationMode::Persist)
};
if (!legacy_migration.error.isEmpty()) {
InitError(Untranslated(legacy_migration.error.toStdString()));
setupChainQSettings(&app, QString::fromStdString(gArgs.GetChainTypeString()).toUpper());
QString finalize_settings_error;
if (!QmlOnboardingSettings::FinalizeStartupSettings(
gArgs,
bootstrap_gui_settings,
pre_init_onboarding_context.pending_apply ? &*pre_init_onboarding_context.pending_apply : nullptr,
/*result=*/nullptr,
&finalize_settings_error)) {
InitError(Untranslated(finalize_settings_error.toStdString()));
return EXIT_FAILURE;
}
if (legacy_migration.settings_changed) {
std::vector<std::string> settings_errors;
if (!gArgs.WriteSettingsFile(&settings_errors)) {
InitError(_("Settings file could not be written"), settings_errors);
return EXIT_FAILURE;
}
}

// legacy GUI: parameterSetup()
// Default printtoconsole to false for the GUI. GUI programs should not
Expand Down Expand Up @@ -600,15 +626,6 @@ int QmlGuiMain(int argc, char* argv[])

ChainModel chain_model{*chain};
chain_model.setCurrentNetworkName(QString::fromStdString(gArgs.GetChainTypeString()));
setupChainQSettings(&app, chain_model.currentNetworkName());
// Settings reset must happen before model instantiation so the models
// read clean defaults from QSettings.
if (gArgs.IsArgSet("-resetguisettings")) {
QSettings settings;
settings.remove(QStringLiteral("fHideTrayIcon"));
settings.remove(QStringLiteral("fMinimizeToTray"));
settings.remove(QStringLiteral("fMinimizeOnClose"));
}

QObject::connect(&node_model, &NodeModel::setTimeRatioList, &chain_model, &ChainModel::setTimeRatioList);
QObject::connect(&node_model, &NodeModel::setTimeRatioListInitial, &chain_model, &ChainModel::setTimeRatioListInitial);
Expand Down
42 changes: 0 additions & 42 deletions qml/datadir.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,48 +225,6 @@ void PersistDefaultDataDirSelection()
QmlLegacySettings::ClearLegacyGuiSettings(QString::fromStdString(Params().GetChainTypeString()));
}

bool ResetGuiSettings(ArgsManager& args, QString* error)
{
if (error) error->clear();

QSettings settings;
settings.clear();
settings.setValue(RESET_GUI_SETTINGS_KEY, false);

try {
SelectParams(args.GetChainType());
args.SelectConfigNetwork(args.GetChainTypeString());
QmlLegacySettings::ClearLegacyGuiSettings(QString::fromStdString(args.GetChainTypeString()));
} catch (const std::exception& e) {
if (error) *error = QString::fromStdString(e.what());
return false;
}

fs::path settings_path;
if (!args.GetSettingsPath(&settings_path) || !fs::exists(settings_path)) {
return true;
}

std::vector<std::string> settings_errors;
if (!args.ReadSettingsFile(&settings_errors)) {
if (error) *error = QString::fromStdString(settings_errors.empty() ? std::string{"Settings file could not be read."} : settings_errors.front());
return false;
}
if (!args.WriteSettingsFile(&settings_errors, /*backup=*/true)) {
if (error) *error = QString::fromStdString(settings_errors.empty() ? std::string{"Settings file backup could not be written."} : settings_errors.front());
return false;
}
args.LockSettings([](common::Settings& settings) {
settings.rw_settings.clear();
});
settings_errors.clear();
if (!args.WriteSettingsFile(&settings_errors)) {
if (error) *error = QString::fromStdString(settings_errors.empty() ? std::string{"Settings file could not be written."} : settings_errors.front());
return false;
}
return true;
}

bool HasExplicitDataDirArg(const ArgsManager& args)
{
return args.IsArgSet("-datadir") && !args.GetPathArg("-datadir").empty();
Expand Down
1 change: 0 additions & 1 deletion qml/datadir.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ StorageSpaceResult CheckStorageSpace(const QString& path);
bool EnsureDataDir(const QString& path, QString* error = nullptr);
bool PersistGuiDataDirSelection(const QString& path, QString* error = nullptr);
void PersistDefaultDataDirSelection();
bool ResetGuiSettings(ArgsManager& args, QString* error = nullptr);

bool HasExplicitDataDirArg(const ArgsManager& args);
bool ShouldShowDataDirChooser(const ArgsManager& args);
Expand Down
Loading
Loading