Branch data Line data Source code
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 [ + - ]: 3654 : Warnings::Warnings()
21 : : {
22 : : // Pre-release build warning
23 : 3654 : if (!CLIENT_VERSION_IS_RELEASE) {
24 [ + - ]: 7308 : m_warnings.insert(
25 : : {Warning::PRE_RELEASE_TEST_BUILD,
26 [ + - ]: 3654 : _("This is a pre-release test build - use at your own risk - do not use for mining or merchant applications")});
27 : : }
28 : 3654 : }
29 : 69284 : bool Warnings::Set(warning_type id, bilingual_str message)
30 : : {
31 [ + + + - : 277136 : const auto& [_, inserted]{WITH_LOCK(m_mutex, return m_warnings.insert({id, std::move(message)}))};
+ - ]
32 [ + + ]: 69284 : if (inserted) uiInterface.NotifyAlertChanged();
33 : 69284 : return inserted;
34 : : }
35 : :
36 : 5872 : bool Warnings::Unset(warning_type id)
37 : : {
38 [ + - ]: 11744 : auto success{WITH_LOCK(m_mutex, return m_warnings.erase(id))};
39 [ + + ]: 5872 : if (success) uiInterface.NotifyAlertChanged();
40 : 5872 : return success;
41 : : }
42 : :
43 : 5 : std::vector<bilingual_str> Warnings::GetMessages() const
44 : : {
45 : 5 : LOCK(m_mutex);
46 : 5 : std::vector<bilingual_str> messages;
47 [ + - ]: 5 : messages.reserve(m_warnings.size());
48 [ + - + + ]: 10 : for (const auto& [id, msg] : m_warnings) {
49 [ + - ]: 5 : messages.push_back(msg);
50 : : }
51 [ + - ]: 5 : return messages;
52 : 5 : }
53 : :
54 : 5 : UniValue GetWarningsForRpc(const Warnings& warnings, bool use_deprecated)
55 : : {
56 [ - + ]: 5 : if (use_deprecated) {
57 : 0 : const auto all_messages{warnings.GetMessages()};
58 [ # # # # : 0 : return all_messages.empty() ? "" : all_messages.back().original;
# # # # ]
59 : 0 : }
60 : :
61 : 5 : UniValue messages{UniValue::VARR};
62 [ + - + + ]: 10 : for (auto&& message : warnings.GetMessages()) {
63 [ + - + - ]: 5 : messages.push_back(std::move(message.original));
64 : 5 : }
65 : 5 : return messages;
66 : 5 : }
67 : : } // namespace node
|