warnings.cpp
1 // Copyright (c) 2009-2010 Satoshi Nakamoto 2 // Copyright (c) 2009-2022 The Bitcoin Core developers 3 // Distributed under the MIT software license, see the accompanying 4 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 5 6 #include <bitcoin-build-config.h> // IWYU pragma: keep 7 8 #include <node/warnings.h> 9 10 #include <common/system.h> 11 #include <node/interface_ui.h> 12 #include <sync.h> 13 #include <univalue.h> 14 #include <util/translation.h> 15 16 #include <utility> 17 #include <vector> 18 19 namespace node { 20 Warnings::Warnings() 21 { 22 // Pre-release build warning 23 if (!CLIENT_VERSION_IS_RELEASE) { 24 m_warnings.insert( 25 {Warning::PRE_RELEASE_TEST_BUILD, 26 _("This is a pre-release test build - use at your own risk - do not use for mining or merchant applications")}); 27 } 28 } 29 bool Warnings::Set(warning_type id, bilingual_str message) 30 { 31 const auto& [_, inserted]{WITH_LOCK(m_mutex, return m_warnings.insert({id, std::move(message)}))}; 32 if (inserted) uiInterface.NotifyAlertChanged(); 33 return inserted; 34 } 35 36 bool Warnings::Unset(warning_type id) 37 { 38 auto success{WITH_LOCK(m_mutex, return m_warnings.erase(id))}; 39 if (success) uiInterface.NotifyAlertChanged(); 40 return success; 41 } 42 43 std::vector<bilingual_str> Warnings::GetMessages() const 44 { 45 LOCK(m_mutex); 46 std::vector<bilingual_str> messages; 47 messages.reserve(m_warnings.size()); 48 for (const auto& [id, msg] : m_warnings) { 49 messages.push_back(msg); 50 } 51 return messages; 52 } 53 54 UniValue GetWarningsForRpc(const Warnings& warnings, bool use_deprecated) 55 { 56 if (use_deprecated) { 57 const auto all_messages{warnings.GetMessages()}; 58 return all_messages.empty() ? "" : all_messages.back().original; 59 } 60 61 UniValue messages{UniValue::VARR}; 62 for (auto&& message : warnings.GetMessages()) { 63 messages.push_back(std::move(message.original)); 64 } 65 return messages; 66 } 67 } // namespace node