Coverage Report

Created: 2026-10-19 15:22

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
211
{
22
211
    bool fSecure = style & CClientUIInterface::SECURE;
23
211
    style &= ~CClientUIInterface::SECURE;
24
25
211
    std::string strCaption;
26
211
    switch (style) {
27
188
    case CClientUIInterface::MSG_ERROR:
28
188
        strCaption = "Error: ";
29
188
        if (!fSecure) LogError("%s\n", message.original);
30
188
        break;
31
12
    case CClientUIInterface::MSG_WARNING:
32
12
        strCaption = "Warning: ";
33
12
        if (!fSecure) LogWarning("%s\n", message.original);
34
12
        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
211
    }
42
43
211
    tfm::format(std::cerr, "%s%s\n", strCaption, message.original);
44
211
}
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.31k
{
54
8.31k
    LogInfo("init message: %s", message);
55
8.31k
}
56
57
void noui_connect()
58
1.48k
{
59
1.48k
    noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox.connect(noui_ThreadSafeMessageBox);
60
1.48k
    noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion.connect(noui_ThreadSafeQuestion);
61
1.48k
    noui_InitMessageConn = uiInterface.InitMessage.connect(noui_InitMessage);
62
1.48k
}
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
69
{
82
69
    noui_ThreadSafeMessageBoxConn.disconnect();
83
69
    noui_ThreadSafeQuestionConn.disconnect();
84
69
    noui_InitMessageConn.disconnect();
85
69
    noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox.connect(noui_ThreadSafeMessageBoxRedirect);
86
69
    noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion.connect(noui_ThreadSafeQuestionRedirect);
87
69
    noui_InitMessageConn = uiInterface.InitMessage.connect(noui_InitMessageRedirect);
88
69
}
89
90
void noui_reconnect()
91
69
{
92
69
    noui_ThreadSafeMessageBoxConn.disconnect();
93
69
    noui_ThreadSafeQuestionConn.disconnect();
94
69
    noui_InitMessageConn.disconnect();
95
69
    noui_connect();
96
69
}