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