Coverage Report

Created: 2026-04-29 19:21

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 <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
178
{
22
178
    bool fSecure = style & CClientUIInterface::SECURE;
23
178
    style &= ~CClientUIInterface::SECURE;
24
25
178
    std::string strCaption;
26
178
    switch (style) {
27
160
    case CClientUIInterface::MSG_ERROR:
28
160
        strCaption = "Error: ";
29
160
        if (!fSecure) LogError("%s\n", message.original);
30
160
        break;
31
7
    case CClientUIInterface::MSG_WARNING:
32
7
        strCaption = "Warning: ";
33
7
        if (!fSecure) LogWarning("%s\n", message.original);
34
7
        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
178
    }
42
43
178
    tfm::format(std::cerr, "%s%s\n", strCaption, message.original);
44
178
    return false;
45
178
}
46
47
bool noui_ThreadSafeQuestion(const bilingual_str& /* ignored interactive message */, const std::string& message, unsigned int style)
48
11
{
49
11
    return noui_ThreadSafeMessageBox(Untranslated(message), style);
50
11
}
51
52
void noui_InitMessage(const std::string& message)
53
7.48k
{
54
7.48k
    LogInfo("init message: %s", message);
55
7.48k
}
56
57
void noui_connect()
58
1.35k
{
59
1.35k
    noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox_connect(noui_ThreadSafeMessageBox);
60
1.35k
    noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion_connect(noui_ThreadSafeQuestion);
61
1.35k
    noui_InitMessageConn = uiInterface.InitMessage_connect(noui_InitMessage);
62
1.35k
}
63
64
bool noui_ThreadSafeMessageBoxRedirect(const bilingual_str& message, unsigned int style)
65
4
{
66
4
    LogInfo("%s", message.original);
67
4
    return false;
68
4
}
69
70
bool noui_ThreadSafeQuestionRedirect(const bilingual_str& /* ignored interactive message */, const std::string& message, unsigned int style)
71
0
{
72
0
    LogInfo("%s", message);
73
0
    return false;
74
0
}
75
76
void noui_InitMessageRedirect(const std::string& message)
77
1
{
78
1
    LogInfo("init message: %s", message);
79
1
}
80
81
void noui_test_redirect()
82
62
{
83
62
    noui_ThreadSafeMessageBoxConn.disconnect();
84
62
    noui_ThreadSafeQuestionConn.disconnect();
85
62
    noui_InitMessageConn.disconnect();
86
62
    noui_ThreadSafeMessageBoxConn = uiInterface.ThreadSafeMessageBox_connect(noui_ThreadSafeMessageBoxRedirect);
87
62
    noui_ThreadSafeQuestionConn = uiInterface.ThreadSafeQuestion_connect(noui_ThreadSafeQuestionRedirect);
88
62
    noui_InitMessageConn = uiInterface.InitMessage_connect(noui_InitMessageRedirect);
89
62
}
90
91
void noui_reconnect()
92
62
{
93
62
    noui_ThreadSafeMessageBoxConn.disconnect();
94
62
    noui_ThreadSafeQuestionConn.disconnect();
95
62
    noui_InitMessageConn.disconnect();
96
62
    noui_connect();
97
62
}