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 }