warnings.cpp raw
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-present 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
68