LCOV - code coverage report
Current view: top level - src - noui.cpp (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 46 51 90.2 %
Date: 2020-09-26 01:30:44 Functions: 11 12 91.7 %

          Line data    Source code
       1             : // Copyright (c) 2010 Satoshi Nakamoto
       2             : // Copyright (c) 2009-2019 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/ui_interface.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         640 : boost::signals2::connection noui_ThreadSafeMessageBoxConn;
      19         640 : boost::signals2::connection noui_ThreadSafeQuestionConn;
      20         640 : boost::signals2::connection noui_InitMessageConn;
      21             : 
      22          55 : bool noui_ThreadSafeMessageBox(const bilingual_str& message, const std::string& caption, unsigned int style)
      23             : {
      24          55 :     bool fSecure = style & CClientUIInterface::SECURE;
      25          55 :     style &= ~CClientUIInterface::SECURE;
      26             : 
      27          55 :     std::string strCaption;
      28          55 :     switch (style) {
      29             :     case CClientUIInterface::MSG_ERROR:
      30          53 :         strCaption = "Error: ";
      31             :         break;
      32             :     case CClientUIInterface::MSG_WARNING:
      33           1 :         strCaption = "Warning: ";
      34             :         break;
      35             :     case CClientUIInterface::MSG_INFORMATION:
      36           0 :         strCaption = "Information: ";
      37             :         break;
      38             :     default:
      39           1 :         strCaption = caption + ": "; // Use supplied caption (can be empty)
      40           1 :     }
      41             : 
      42          55 :     if (!fSecure) {
      43          55 :         LogPrintf("%s%s\n", strCaption, message.original);
      44             :     }
      45          55 :     tfm::format(std::cerr, "%s%s\n", strCaption, message.original);
      46             :     return false;
      47          55 : }
      48             : 
      49           1 : bool noui_ThreadSafeQuestion(const bilingual_str& /* ignored interactive message */, const std::string& message, const std::string& caption, unsigned int style)
      50             : {
      51           1 :     return noui_ThreadSafeMessageBox(Untranslated(message), caption, style);
      52           0 : }
      53             : 
      54        4606 : void noui_InitMessage(const std::string& message)
      55             : {
      56        4606 :     LogPrintf("init message: %s\n", message);
      57        4606 : }
      58             : 
      59         644 : void noui_connect()
      60             : {
      61         644 :     noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox_connect(noui_ThreadSafeMessageBox);
      62         644 :     noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion_connect(noui_ThreadSafeQuestion);
      63         644 :     noui_InitMessageConn = uiInterface.InitMessage_connect(noui_InitMessage);
      64         644 : }
      65             : 
      66           4 : bool noui_ThreadSafeMessageBoxRedirect(const bilingual_str& message, const std::string& caption, unsigned int style)
      67             : {
      68           4 :     LogPrintf("%s: %s\n", caption, message.original);
      69           4 :     return false;
      70             : }
      71             : 
      72           0 : bool noui_ThreadSafeQuestionRedirect(const bilingual_str& /* ignored interactive message */, const std::string& message, const std::string& caption, unsigned int style)
      73             : {
      74           0 :     LogPrintf("%s: %s\n", caption, message);
      75           0 :     return false;
      76             : }
      77             : 
      78           3 : void noui_InitMessageRedirect(const std::string& message)
      79             : {
      80           3 :     LogPrintf("init message: %s\n", message);
      81           3 : }
      82             : 
      83           8 : void noui_test_redirect()
      84             : {
      85           8 :     noui_ThreadSafeMessageBoxConn.disconnect();
      86           8 :     noui_ThreadSafeQuestionConn.disconnect();
      87           8 :     noui_InitMessageConn.disconnect();
      88           8 :     noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox_connect(noui_ThreadSafeMessageBoxRedirect);
      89           8 :     noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion_connect(noui_ThreadSafeQuestionRedirect);
      90           8 :     noui_InitMessageConn = uiInterface.InitMessage_connect(noui_InitMessageRedirect);
      91           8 : }
      92             : 
      93           8 : void noui_reconnect()
      94             : {
      95           8 :     noui_ThreadSafeMessageBoxConn.disconnect();
      96           8 :     noui_ThreadSafeQuestionConn.disconnect();
      97           8 :     noui_InitMessageConn.disconnect();
      98           8 :     noui_connect();
      99           8 : }

Generated by: LCOV version 1.15