From a2189fbaf65dd56c808dc7429b800e70d31178c3 Mon Sep 17 00:00:00 2001 From: Philip Kaufmann Date: Sun, 23 Jun 2013 18:04:44 +0200 Subject: [PATCH] update SelectParamsFromCommandLine() handling/order - move SelectParamsFromCommandLine() from init.cpp to bitcoin.cpp to allow to use TestNet() for Bitcoin-Qt instead of GetBoolArg("-testnet", false) - change order in bitcoind.cpp to match bitcoin.cpp functionality - hamonize error message strings for missing datadir and failing SelectParamsFromCommandLine() in bitcoin.cpp and bitcoind.cpp - use TestNet() call in splashscreen.cpp --- src/bitcoind.cpp | 13 +++++++------ src/init.cpp | 3 --- src/qt/bitcoin.cpp | 39 +++++++++++++++++++++++++++------------ src/qt/splashscreen.cpp | 3 ++- 4 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index be18f9ae8..02e4e7d6e 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -39,10 +39,15 @@ bool AppInit(int argc, char* argv[]) ParseParameters(argc, argv); if (!boost::filesystem::is_directory(GetDataDir(false))) { - fprintf(stderr, "Error: Specified directory does not exist\n"); - Shutdown(); + fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", mapArgs["-datadir"].c_str()); + return false; } ReadConfigFile(mapArgs, mapMultiArgs); + // Check for -testnet or -regtest parameter (TestNet() calls are only valid after this clause) + if (!SelectParamsFromCommandLine()) { + fprintf(stderr, "Error: Invalid combination of -regtest and -testnet.\n"); + return false; + } if (mapArgs.count("-?") || mapArgs.count("--help")) { @@ -67,10 +72,6 @@ bool AppInit(int argc, char* argv[]) if (fCommandLine) { - if (!SelectParamsFromCommandLine()) { - fprintf(stderr, "Error: invalid combination of -regtest and -testnet.\n"); - return false; - } int ret = CommandLineRPC(argc, argv); exit(ret); } diff --git a/src/init.cpp b/src/init.cpp index 7182c1414..64a5de239 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -373,9 +373,6 @@ bool AppInit2(boost::thread_group& threadGroup) // ********************************************************* Step 2: parameter interactions Checkpoints::fEnabled = GetBoolArg("-checkpoints", true); - if (!SelectParamsFromCommandLine()) { - return InitError("Invalid combination of -testnet and -regtest."); - } if (mapArgs.count("-bind")) { // when specifying an explicit binding address, you want to listen on it diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 3b9833469..e4ca9e438 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -154,10 +154,23 @@ static void initTranslations(QTranslator &qtTranslatorBase, QTranslator &qtTrans #ifndef BITCOIN_QT_TEST int main(int argc, char *argv[]) { + bool fMissingDatadir = false; + bool fSelParFromCLFailed = false; + fHaveGUI = true; // Command-line options take precedence: ParseParameters(argc, argv); + // ... then bitcoin.conf: + if (!boost::filesystem::is_directory(GetDataDir(false))) { + fMissingDatadir = true; + } else { + ReadConfigFile(mapArgs, mapMultiArgs); + } + // Check for -testnet or -regtest parameter (TestNet() calls are only valid after this clause) + if (!SelectParamsFromCommandLine()) { + fSelParFromCLFailed = true; + } #if QT_VERSION < 0x050000 // Internal string conversion is all UTF-8 @@ -175,7 +188,7 @@ int main(int argc, char *argv[]) // as it is used to locate QSettings) QApplication::setOrganizationName("Bitcoin"); QApplication::setOrganizationDomain("bitcoin.org"); - if (GetBoolArg("-testnet", false)) // Separate UI settings for testnet + if (TestNet()) // Separate UI settings for testnet QApplication::setApplicationName("Bitcoin-Qt-testnet"); else QApplication::setApplicationName("Bitcoin-Qt"); @@ -184,6 +197,17 @@ int main(int argc, char *argv[]) QTranslator qtTranslatorBase, qtTranslator, translatorBase, translator; initTranslations(qtTranslatorBase, qtTranslator, translatorBase, translator); + // Now that translations are initialized check for errors and allow a translatable error message + if (fMissingDatadir) { + QMessageBox::critical(0, QObject::tr("Bitcoin"), + QObject::tr("Error: Specified data directory \"%1\" does not exist.").arg(QString::fromStdString(mapArgs["-datadir"]))); + return 1; + } + else if (fSelParFromCLFailed) { + QMessageBox::critical(0, QObject::tr("Bitcoin"), QObject::tr("Error: Invalid combination of -regtest and -testnet.")); + return 1; + } + // User language is set up: pick a data directory Intro::pickDataDirectory(); @@ -196,16 +220,7 @@ int main(int argc, char *argv[]) // Install global event filter that makes sure that long tooltips can be word-wrapped app.installEventFilter(new GUIUtil::ToolTipToRichTextFilter(TOOLTIP_WRAP_THRESHOLD, &app)); - // ... then bitcoin.conf: - if (!boost::filesystem::is_directory(GetDataDir(false))) - { - QMessageBox::critical(0, QObject::tr("Bitcoin"), - QObject::tr("Error: Specified data directory \"%1\" does not exist.").arg(QString::fromStdString(mapArgs["-datadir"]))); - return 1; - } - ReadConfigFile(mapArgs, mapMultiArgs); - - // ... then GUI settings: + // ... now GUI settings: OptionsModel optionsModel; // Subscribe to global signals from core @@ -245,7 +260,7 @@ int main(int argc, char *argv[]) boost::thread_group threadGroup; - BitcoinGUI window(GetBoolArg("-testnet", false), 0); + BitcoinGUI window(TestNet(), 0); guiref = &window; QTimer* pollShutdownTimer = new QTimer(guiref); diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp index 22cf04486..7c9bc46c4 100644 --- a/src/qt/splashscreen.cpp +++ b/src/qt/splashscreen.cpp @@ -1,6 +1,7 @@ #include "splashscreen.h" #include "clientversion.h" #include "util.h" +#include "chainparams.h" #include #include @@ -26,7 +27,7 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f) : // load the bitmap for writing some text over it QPixmap newPixmap; - if(GetBoolArg("-testnet", false)) { + if(TestNet()) { newPixmap = QPixmap(":/images/splash_testnet"); } else {