Merge #19233: Make SetMiscWarning() accept bilingual_str argument

d49612f98a Make SetMiscWarning() accept bilingual_str argument (Hennadii Stepanov)
d1ae7c0355 Make GetWarnings() return bilingual_str (Hennadii Stepanov)
38e33aa481 refactor: Make GetWarnings() bilingual_str aware internally (Hennadii Stepanov)

Pull request description:

  This is one more step for consistent usage of `bilingual_str`.

  No new translation messages are defined.

ACKs for top commit:
  laanwj:
    Code review ACK d49612f98a
  MarcoFalke:
    ACK d49612f98a 🌂

Tree-SHA512: 7413cb94a85291209c182845f6873350bb9e9ce940647d416c462a136603832fec8a63d792341bf634f07629767c78bc206d3a318cf10c7e87241c114c2496e9
This commit is contained in:
MarcoFalke committed 2020-06-10 09:50:57 -04:00
commit 371a73e940
13 files changed
+57 -45

No files matched your search

+1 -1
View File
@@ -21,7 +21,7 @@ template<typename... Args>
static void FatalError(const char* fmt, const Args&... args) static void FatalError(const char* fmt, const Args&... args)
{ {
std::string strMessage = tfm::format(fmt, args...); std::string strMessage = tfm::format(fmt, args...);
SetMiscWarning(strMessage); SetMiscWarning(Untranslated(strMessage));
LogPrintf("*** %s\n", strMessage); LogPrintf("*** %s\n", strMessage);
uiInterface.ThreadSafeMessageBox( uiInterface.ThreadSafeMessageBox(
Untranslated("Error: A fatal internal error occurred, see debug.log for details"), Untranslated("Error: A fatal internal error occurred, see debug.log for details"),
+1 -1
View File
@@ -71,7 +71,7 @@ public:
std::string getNetwork() override { return Params().NetworkIDString(); } std::string getNetwork() override { return Params().NetworkIDString(); }
void initLogging() override { InitLogging(); } void initLogging() override { InitLogging(); }
void initParameterInteraction() override { InitParameterInteraction(); } void initParameterInteraction() override { InitParameterInteraction(); }
std::string getWarnings() override { return GetWarnings(true); } bilingual_str getWarnings() override { return GetWarnings(true); }
uint32_t getLogCategories() override { return LogInstance().GetCategoryMask(); } uint32_t getLogCategories() override { return LogInstance().GetCategoryMask(); }
bool baseInitialize() override bool baseInitialize() override
{ {
+2 -1
View File
@@ -10,6 +10,7 @@
#include <net_types.h> // For banmap_t #include <net_types.h> // For banmap_t
#include <netaddress.h> // For Network #include <netaddress.h> // For Network
#include <support/allocators/secure.h> // For SecureString #include <support/allocators/secure.h> // For SecureString
#include <util/translation.h>
#include <functional> #include <functional>
#include <memory> #include <memory>
@@ -81,7 +82,7 @@ public:
virtual void initParameterInteraction() = 0; virtual void initParameterInteraction() = 0;
//! Get warnings. //! Get warnings.
virtual std::string getWarnings() = 0; virtual bilingual_str getWarnings() = 0;
// Get log flags. // Get log flags.
virtual uint32_t getLogCategories() = 0; virtual uint32_t getLogCategories() = 0;
+3 -3
View File
@@ -155,7 +155,7 @@ BitcoinCore::BitcoinCore(interfaces::Node& node) :
void BitcoinCore::handleRunawayException(const std::exception *e) void BitcoinCore::handleRunawayException(const std::exception *e)
{ {
PrintExceptionContinue(e, "Runaway exception"); PrintExceptionContinue(e, "Runaway exception");
Q_EMIT runawayException(QString::fromStdString(m_node.getWarnings())); Q_EMIT runawayException(QString::fromStdString(m_node.getWarnings().translated));
} }
void BitcoinCore::initialize() void BitcoinCore::initialize()
@@ -599,10 +599,10 @@ int GuiMain(int argc, char* argv[])
} }
} catch (const std::exception& e) { } catch (const std::exception& e) {
PrintExceptionContinue(&e, "Runaway exception"); PrintExceptionContinue(&e, "Runaway exception");
app.handleRunawayException(QString::fromStdString(node->getWarnings())); app.handleRunawayException(QString::fromStdString(node->getWarnings().translated));
} catch (...) { } catch (...) {
PrintExceptionContinue(nullptr, "Runaway exception"); PrintExceptionContinue(nullptr, "Runaway exception");
app.handleRunawayException(QString::fromStdString(node->getWarnings())); app.handleRunawayException(QString::fromStdString(node->getWarnings().translated));
} }
return rv; return rv;
} }
+1 -1
View File
@@ -166,7 +166,7 @@ enum BlockSource ClientModel::getBlockSource() const
QString ClientModel::getStatusBarWarnings() const QString ClientModel::getStatusBarWarnings() const
{ {
return QString::fromStdString(m_node.getWarnings()); return QString::fromStdString(m_node.getWarnings().translated);
} }
OptionsModel *ClientModel::getOptionsModel() OptionsModel *ClientModel::getOptionsModel()
+2 -1
View File
@@ -32,6 +32,7 @@
#include <util/ref.h> #include <util/ref.h>
#include <util/strencodings.h> #include <util/strencodings.h>
#include <util/system.h> #include <util/system.h>
#include <util/translation.h>
#include <validation.h> #include <validation.h>
#include <validationinterface.h> #include <validationinterface.h>
#include <warnings.h> #include <warnings.h>
@@ -1278,7 +1279,7 @@ UniValue getblockchaininfo(const JSONRPCRequest& request)
BIP9SoftForkDescPushBack(softforks, "testdummy", consensusParams, Consensus::DEPLOYMENT_TESTDUMMY); BIP9SoftForkDescPushBack(softforks, "testdummy", consensusParams, Consensus::DEPLOYMENT_TESTDUMMY);
obj.pushKV("softforks", softforks); obj.pushKV("softforks", softforks);
obj.pushKV("warnings", GetWarnings(false)); obj.pushKV("warnings", GetWarnings(false).original);
return obj; return obj;
} }
+2 -1
View File
@@ -29,6 +29,7 @@
#include <util/strencodings.h> #include <util/strencodings.h>
#include <util/string.h> #include <util/string.h>
#include <util/system.h> #include <util/system.h>
#include <util/translation.h>
#include <validation.h> #include <validation.h>
#include <validationinterface.h> #include <validationinterface.h>
#include <versionbitsinfo.h> #include <versionbitsinfo.h>
@@ -416,7 +417,7 @@ static UniValue getmininginfo(const JSONRPCRequest& request)
obj.pushKV("networkhashps", getnetworkhashps(request)); obj.pushKV("networkhashps", getnetworkhashps(request));
obj.pushKV("pooledtx", (uint64_t)mempool.size()); obj.pushKV("pooledtx", (uint64_t)mempool.size());
obj.pushKV("chain", Params().NetworkIDString()); obj.pushKV("chain", Params().NetworkIDString());
obj.pushKV("warnings", GetWarnings(false)); obj.pushKV("warnings", GetWarnings(false).original);
return obj; return obj;
} }
+2 -1
View File
@@ -22,6 +22,7 @@
#include <util/strencodings.h> #include <util/strencodings.h>
#include <util/string.h> #include <util/string.h>
#include <util/system.h> #include <util/system.h>
#include <util/translation.h>
#include <validation.h> #include <validation.h>
#include <version.h> #include <version.h>
#include <warnings.h> #include <warnings.h>
@@ -548,7 +549,7 @@ static UniValue getnetworkinfo(const JSONRPCRequest& request)
} }
} }
obj.pushKV("localaddresses", localAddresses); obj.pushKV("localaddresses", localAddresses);
obj.pushKV("warnings", GetWarnings(false)); obj.pushKV("warnings", GetWarnings(false).original);
return obj; return obj;
} }
+2 -1
View File
@@ -9,6 +9,7 @@
#include <test/util/setup_common.h> #include <test/util/setup_common.h>
#include <timedata.h> #include <timedata.h>
#include <util/string.h> #include <util/string.h>
#include <util/translation.h>
#include <warnings.h> #include <warnings.h>
#include <string> #include <string>
@@ -66,7 +67,7 @@ BOOST_AUTO_TEST_CASE(addtimedata)
MultiAddTimeData(1, DEFAULT_MAX_TIME_ADJUSTMENT + 1); //filter size 5 MultiAddTimeData(1, DEFAULT_MAX_TIME_ADJUSTMENT + 1); //filter size 5
} }
BOOST_CHECK(GetWarnings(true).find("clock is wrong") != std::string::npos); BOOST_CHECK(GetWarnings(true).original.find("clock is wrong") != std::string::npos);
// nTimeOffset is not changed if the median of offsets exceeds DEFAULT_MAX_TIME_ADJUSTMENT // nTimeOffset is not changed if the median of offsets exceeds DEFAULT_MAX_TIME_ADJUSTMENT
BOOST_CHECK_EQUAL(GetTimeOffset(), 0); BOOST_CHECK_EQUAL(GetTimeOffset(), 0);
+1 -1
View File
@@ -95,7 +95,7 @@ void AddTimeData(const CNetAddr& ip, int64_t nOffsetSample)
if (!fMatch) { if (!fMatch) {
fDone = true; fDone = true;
bilingual_str strMessage = strprintf(_("Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly."), PACKAGE_NAME); bilingual_str strMessage = strprintf(_("Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly."), PACKAGE_NAME);
SetMiscWarning(strMessage.translated); SetMiscWarning(strMessage);
uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_WARNING); uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_WARNING);
} }
} }
+12 -12
View File
@@ -1666,7 +1666,7 @@ bool UndoReadFromDisk(CBlockUndo& blockundo, const CBlockIndex* pindex)
// TODO: AbortNode() should take bilingual_str userMessage parameter. // TODO: AbortNode() should take bilingual_str userMessage parameter.
static bool AbortNode(const std::string& strMessage, const std::string& userMessage = "", unsigned int prefix = 0) static bool AbortNode(const std::string& strMessage, const std::string& userMessage = "", unsigned int prefix = 0)
{ {
SetMiscWarning(strMessage); SetMiscWarning(Untranslated(strMessage));
LogPrintf("*** %s\n", strMessage); LogPrintf("*** %s\n", strMessage);
if (!userMessage.empty()) { if (!userMessage.empty()) {
uiInterface.ThreadSafeMessageBox(Untranslated(userMessage), "", CClientUIInterface::MSG_ERROR | prefix); uiInterface.ThreadSafeMessageBox(Untranslated(userMessage), "", CClientUIInterface::MSG_ERROR | prefix);
@@ -2429,20 +2429,20 @@ void CChainState::PruneAndFlush() {
} }
} }
static void DoWarning(const std::string& strWarning) static void DoWarning(const bilingual_str& warning)
{ {
static bool fWarned = false; static bool fWarned = false;
SetMiscWarning(strWarning); SetMiscWarning(warning);
if (!fWarned) { if (!fWarned) {
AlertNotify(strWarning); AlertNotify(warning.original);
fWarned = true; fWarned = true;
} }
} }
/** Private helper function that concatenates warning messages. */ /** Private helper function that concatenates warning messages. */
static void AppendWarning(std::string& res, const std::string& warn) static void AppendWarning(bilingual_str& res, const bilingual_str& warn)
{ {
if (!res.empty()) res += ", "; if (!res.empty()) res += Untranslated(", ");
res += warn; res += warn;
} }
@@ -2459,7 +2459,7 @@ void static UpdateTip(const CBlockIndex* pindexNew, const CChainParams& chainPar
g_best_block_cv.notify_all(); g_best_block_cv.notify_all();
} }
std::string warningMessages; bilingual_str warning_messages;
if (!::ChainstateActive().IsInitialBlockDownload()) if (!::ChainstateActive().IsInitialBlockDownload())
{ {
int nUpgraded = 0; int nUpgraded = 0;
@@ -2468,11 +2468,11 @@ void static UpdateTip(const CBlockIndex* pindexNew, const CChainParams& chainPar
WarningBitsConditionChecker checker(bit); WarningBitsConditionChecker checker(bit);
ThresholdState state = checker.GetStateFor(pindex, chainParams.GetConsensus(), warningcache[bit]); ThresholdState state = checker.GetStateFor(pindex, chainParams.GetConsensus(), warningcache[bit]);
if (state == ThresholdState::ACTIVE || state == ThresholdState::LOCKED_IN) { if (state == ThresholdState::ACTIVE || state == ThresholdState::LOCKED_IN) {
const std::string strWarning = strprintf(_("Warning: unknown new rules activated (versionbit %i)").translated, bit); const bilingual_str warning = strprintf(_("Warning: unknown new rules activated (versionbit %i)"), bit);
if (state == ThresholdState::ACTIVE) { if (state == ThresholdState::ACTIVE) {
DoWarning(strWarning); DoWarning(warning);
} else { } else {
AppendWarning(warningMessages, strWarning); AppendWarning(warning_messages, warning);
} }
} }
} }
@@ -2485,14 +2485,14 @@ void static UpdateTip(const CBlockIndex* pindexNew, const CChainParams& chainPar
pindex = pindex->pprev; pindex = pindex->pprev;
} }
if (nUpgraded > 0) if (nUpgraded > 0)
AppendWarning(warningMessages, strprintf(_("%d of last 100 blocks have unexpected version").translated, nUpgraded)); AppendWarning(warning_messages, strprintf(_("%d of last 100 blocks have unexpected version"), nUpgraded));
} }
LogPrintf("%s: new best=%s height=%d version=0x%08x log2_work=%.8g tx=%lu date='%s' progress=%f cache=%.1fMiB(%utxo)%s\n", __func__, LogPrintf("%s: new best=%s height=%d version=0x%08x log2_work=%.8g tx=%lu date='%s' progress=%f cache=%.1fMiB(%utxo)%s\n", __func__,
pindexNew->GetBlockHash().ToString(), pindexNew->nHeight, pindexNew->nVersion, pindexNew->GetBlockHash().ToString(), pindexNew->nHeight, pindexNew->nVersion,
log(pindexNew->nChainWork.getdouble())/log(2.0), (unsigned long)pindexNew->nChainTx, log(pindexNew->nChainWork.getdouble())/log(2.0), (unsigned long)pindexNew->nChainTx,
FormatISO8601DateTime(pindexNew->GetBlockTime()), FormatISO8601DateTime(pindexNew->GetBlockTime()),
GuessVerificationProgress(chainParams.TxData(), pindexNew), ::ChainstateActive().CoinsTip().DynamicMemoryUsage() * (1.0 / (1<<20)), ::ChainstateActive().CoinsTip().GetCacheSize(), GuessVerificationProgress(chainParams.TxData(), pindexNew), ::ChainstateActive().CoinsTip().DynamicMemoryUsage() * (1.0 / (1<<20)), ::ChainstateActive().CoinsTip().GetCacheSize(),
!warningMessages.empty() ? strprintf(" warning='%s'", warningMessages) : ""); !warning_messages.empty() ? strprintf(" warning='%s'", warning_messages.original) : "");
} }
+23 -18
View File
@@ -6,18 +6,21 @@
#include <warnings.h> #include <warnings.h>
#include <sync.h> #include <sync.h>
#include <util/string.h>
#include <util/system.h> #include <util/system.h>
#include <util/translation.h> #include <util/translation.h>
#include <vector>
static Mutex g_warnings_mutex; static Mutex g_warnings_mutex;
static std::string strMiscWarning GUARDED_BY(g_warnings_mutex); static bilingual_str g_misc_warnings GUARDED_BY(g_warnings_mutex);
static bool fLargeWorkForkFound GUARDED_BY(g_warnings_mutex) = false; static bool fLargeWorkForkFound GUARDED_BY(g_warnings_mutex) = false;
static bool fLargeWorkInvalidChainFound GUARDED_BY(g_warnings_mutex) = false; static bool fLargeWorkInvalidChainFound GUARDED_BY(g_warnings_mutex) = false;
void SetMiscWarning(const std::string& strWarning) void SetMiscWarning(const bilingual_str& warning)
{ {
LOCK(g_warnings_mutex); LOCK(g_warnings_mutex);
strMiscWarning = strWarning; g_misc_warnings = warning;
} }
void SetfLargeWorkForkFound(bool flag) void SetfLargeWorkForkFound(bool flag)
@@ -38,34 +41,36 @@ void SetfLargeWorkInvalidChainFound(bool flag)
fLargeWorkInvalidChainFound = flag; fLargeWorkInvalidChainFound = flag;
} }
std::string GetWarnings(bool verbose) bilingual_str GetWarnings(bool verbose)
{ {
std::string warnings_concise; bilingual_str warnings_concise;
std::string warnings_verbose; std::vector<bilingual_str> warnings_verbose;
const std::string warning_separator = "<hr />";
LOCK(g_warnings_mutex); LOCK(g_warnings_mutex);
// Pre-release build warning // Pre-release build warning
if (!CLIENT_VERSION_IS_RELEASE) { if (!CLIENT_VERSION_IS_RELEASE) {
warnings_concise = "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"; warnings_concise = _("This is a pre-release test build - use at your own risk - do not use for mining or merchant applications");
warnings_verbose = _("This is a pre-release test build - use at your own risk - do not use for mining or merchant applications").translated; warnings_verbose.emplace_back(warnings_concise);
} }
// Misc warnings like out of disk space and clock is wrong // Misc warnings like out of disk space and clock is wrong
if (strMiscWarning != "") { if (!g_misc_warnings.empty()) {
warnings_concise = strMiscWarning; warnings_concise = g_misc_warnings;
warnings_verbose += (warnings_verbose.empty() ? "" : warning_separator) + strMiscWarning; warnings_verbose.emplace_back(warnings_concise);
} }
if (fLargeWorkForkFound) { if (fLargeWorkForkFound) {
warnings_concise = "Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues."; warnings_concise = _("Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.");
warnings_verbose += (warnings_verbose.empty() ? "" : warning_separator) + _("Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.").translated; warnings_verbose.emplace_back(warnings_concise);
} else if (fLargeWorkInvalidChainFound) { } else if (fLargeWorkInvalidChainFound) {
warnings_concise = "Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade."; warnings_concise = _("Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.");
warnings_verbose += (warnings_verbose.empty() ? "" : warning_separator) + _("Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.").translated; warnings_verbose.emplace_back(warnings_concise);
} }
if (verbose) return warnings_verbose; if (verbose) {
else return warnings_concise; return Join(warnings_verbose, Untranslated("<hr />"));
}
return warnings_concise;
} }
+5 -3
View File
@@ -8,16 +8,18 @@
#include <string> #include <string>
void SetMiscWarning(const std::string& strWarning); struct bilingual_str;
void SetMiscWarning(const bilingual_str& warning);
void SetfLargeWorkForkFound(bool flag); void SetfLargeWorkForkFound(bool flag);
bool GetfLargeWorkForkFound(); bool GetfLargeWorkForkFound();
void SetfLargeWorkInvalidChainFound(bool flag); void SetfLargeWorkInvalidChainFound(bool flag);
/** Format a string that describes several potential problems detected by the core. /** Format a string that describes several potential problems detected by the core.
* @param[in] verbose bool * @param[in] verbose bool
* - if true, get all warnings, translated (where possible), separated by <hr /> * - if true, get all warnings separated by <hr />
* - if false, get the most important warning * - if false, get the most important warning
* @returns the warning string * @returns the warning string
*/ */
std::string GetWarnings(bool verbose); bilingual_str GetWarnings(bool verbose);
#endif // BITCOIN_WARNINGS_H #endif // BITCOIN_WARNINGS_H