Coverage Report

Created: 2026-09-14 20:36

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/tmp/bitcoin/src/noui.cpp
Line
Count
Source
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 <node/interface_ui.h>
9
#include <util/btcsignals.h>
10
#include <util/log.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
void noui_ThreadSafeMessageBox(const bilingual_str& message, unsigned int style)
21
205
{
22
205
    bool fSecure = style & CClientUIInterface::SECURE;
23
205
    style &= ~CClientUIInterface::SECURE;
24
25
205
    std::string strCaption;
26
205
    switch (style) {
27
185
    case CClientUIInterface::MSG_ERROR:
28
185
        strCaption = "Error: ";
29
185
        if (!fSecure) LogError("%s\n", message.original);
30
185
        break;
31
9
    case CClientUIInterface::MSG_WARNING:
32
9
        strCaption = "Warning: ";
33
9
        if (!fSecure) LogWarning("%s\n", message.original);
34
9
        break;
35
0
    case CClientUIInterface::MSG_INFORMATION:
36
0
        strCaption = "Information: ";
37
0
        if (!fSecure) LogInfo("%s\n", message.original);
38
0
        break;
39
11
    default:
40
11
        if (!fSecure) LogInfo("%s%s\n", strCaption, message.original);
41
205
    }
42
43
205
    tfm::format(std::cerr, "%s%s\n", strCaption, message.original);
44
205
}
45
46
bool noui_ThreadSafeQuestion(const bilingual_str& /* ignored interactive message */, const std::string& message, unsigned int style)
47
11
{
48
11
    noui_ThreadSafeMessageBox(Untranslated(message), style);
49
11
    return false; // Answer the question with false in the noui context
50
11
}
51
52
void noui_InitMessage(const std::string& message)
53
8.02k
{
54
8.02k
    LogInfo("init message: %s", message);
55
8.02k
}
56
57
void noui_connect()
58
1.44k
{
59
1.44k
    noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox.connect(noui_ThreadSafeMessageBox);
60
1.44k
    noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion.connect(noui_ThreadSafeQuestion);
61
1.44k
    noui_InitMessageConn = uiInterface.InitMessage.connect(noui_InitMessage);
62
1.44k
}
63
64
void noui_ThreadSafeMessageBoxRedirect(const bilingual_str& message, unsigned int style)
65
4
{
66
4
    LogInfo("%s", message.original);
67
4
}
68
69
bool noui_ThreadSafeQuestionRedirect(const bilingual_str& /* ignored interactive message */, const std::string& message, unsigned int style)
70
0
{
71
0
    LogInfo("%s", message);
72
0
    return false;
73
0
}
74
75
void noui_InitMessageRedirect(const std::string& message)
76
1
{
77
1
    LogInfo("init message: %s", message);
78
1
}
79
80
void noui_test_redirect()
81
65
{
82
65
    noui_ThreadSafeMessageBoxConn.disconnect();
83
65
    noui_ThreadSafeQuestionConn.disconnect();
84
65
    noui_InitMessageConn.disconnect();
85
65
    noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox.connect(noui_ThreadSafeMessageBoxRedirect);
86
65
    noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion.connect(noui_ThreadSafeQuestionRedirect);
87
65
    noui_InitMessageConn = uiInterface.InitMessage.connect(noui_InitMessageRedirect);
88
65
}
89
90
void noui_reconnect()
91
65
{
92
65
    noui_ThreadSafeMessageBoxConn.disconnect();
93
65
    noui_ThreadSafeQuestionConn.disconnect();
94
65
    noui_InitMessageConn.disconnect();
95
65
    noui_connect();
96
65
}