Branch data Line data Source code
1 : : // Copyright (c) 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 <noui.h>
7 : :
8 : : #include <logging.h>
9 : : #include <node/interface_ui.h>
10 : : #include <util/translation.h>
11 : :
12 : : #include <string>
13 : :
14 : : #include <boost/signals2/connection.hpp>
15 : : #include <boost/signals2/signal.hpp>
16 : :
17 : : /** Store connections so we can disconnect them when suppressing output */
18 : : boost::signals2::connection noui_ThreadSafeMessageBoxConn;
19 : : boost::signals2::connection noui_ThreadSafeQuestionConn;
20 : : boost::signals2::connection noui_InitMessageConn;
21 : :
22 : 158 : bool noui_ThreadSafeMessageBox(const bilingual_str& message, const std::string& caption, unsigned int style)
23 : : {
24 : 158 : bool fSecure = style & CClientUIInterface::SECURE;
25 : 158 : style &= ~CClientUIInterface::SECURE;
26 : :
27 [ + + - + ]: 158 : std::string strCaption;
28 [ + + - + ]: 158 : switch (style) {
29 : 145 : case CClientUIInterface::MSG_ERROR:
30 [ + - ]: 145 : strCaption = "Error: ";
31 [ + - + - ]: 145 : if (!fSecure) LogError("%s\n", message.original);
32 : : break;
33 : 3 : case CClientUIInterface::MSG_WARNING:
34 [ + - ]: 3 : strCaption = "Warning: ";
35 [ + - + - ]: 3 : if (!fSecure) LogWarning("%s\n", message.original);
36 : : break;
37 : 0 : case CClientUIInterface::MSG_INFORMATION:
38 [ # # ]: 0 : strCaption = "Information: ";
39 [ # # # # ]: 0 : if (!fSecure) LogInfo("%s\n", message.original);
40 : : break;
41 : 10 : default:
42 [ + - ]: 10 : strCaption = caption + ": "; // Use supplied caption (can be empty)
43 [ + - + - ]: 10 : if (!fSecure) LogInfo("%s%s\n", strCaption, message.original);
44 : : }
45 : :
46 [ + - ]: 158 : tfm::format(std::cerr, "%s%s\n", strCaption, message.original);
47 : 158 : return false;
48 : 158 : }
49 : :
50 : 10 : bool noui_ThreadSafeQuestion(const bilingual_str& /* ignored interactive message */, const std::string& message, const std::string& caption, unsigned int style)
51 : : {
52 [ + - + - ]: 20 : return noui_ThreadSafeMessageBox(Untranslated(message), caption, style);
53 : : }
54 : :
55 : 6627 : void noui_InitMessage(const std::string& message)
56 : : {
57 : 6627 : LogPrintf("init message: %s\n", message);
58 : 6627 : }
59 : :
60 : 1201 : void noui_connect()
61 : : {
62 [ + - - + ]: 2402 : noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox_connect(noui_ThreadSafeMessageBox);
63 [ + - - + ]: 2402 : noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion_connect(noui_ThreadSafeQuestion);
64 [ + - - + ]: 2402 : noui_InitMessageConn = uiInterface.InitMessage_connect(noui_InitMessage);
65 : 1201 : }
66 : :
67 : 4 : bool noui_ThreadSafeMessageBoxRedirect(const bilingual_str& message, const std::string& caption, unsigned int style)
68 : : {
69 : 4 : LogPrintf("%s: %s\n", caption, message.original);
70 : 4 : return false;
71 : : }
72 : :
73 : 0 : bool noui_ThreadSafeQuestionRedirect(const bilingual_str& /* ignored interactive message */, const std::string& message, const std::string& caption, unsigned int style)
74 : : {
75 : 0 : LogPrintf("%s: %s\n", caption, message);
76 : 0 : return false;
77 : : }
78 : :
79 : 1 : void noui_InitMessageRedirect(const std::string& message)
80 : : {
81 : 1 : LogPrintf("init message: %s\n", message);
82 : 1 : }
83 : :
84 : 55 : void noui_test_redirect()
85 : : {
86 : 55 : noui_ThreadSafeMessageBoxConn.disconnect();
87 : 55 : noui_ThreadSafeQuestionConn.disconnect();
88 : 55 : noui_InitMessageConn.disconnect();
89 [ + - - + ]: 110 : noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox_connect(noui_ThreadSafeMessageBoxRedirect);
90 [ + - - + ]: 110 : noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion_connect(noui_ThreadSafeQuestionRedirect);
91 [ + - - + ]: 110 : noui_InitMessageConn = uiInterface.InitMessage_connect(noui_InitMessageRedirect);
92 : 55 : }
93 : :
94 : 55 : void noui_reconnect()
95 : : {
96 : 55 : noui_ThreadSafeMessageBoxConn.disconnect();
97 : 55 : noui_ThreadSafeQuestionConn.disconnect();
98 : 55 : noui_InitMessageConn.disconnect();
99 : 55 : noui_connect();
100 : 55 : }
|