LCOV - code coverage report
Current view: top level - src/node - interface_ui.cpp (source / functions) Hit Total Coverage
Test: fuzz_coverage.info Lines: 10 37 27.0 %
Date: 2023-09-26 12:08:55 Functions: 11 32 34.4 %

          Line data    Source code
       1             : // Copyright (c) 2010-2022 The Bitcoin Core developers
       2             : // Distributed under the MIT software license, see the accompanying
       3             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       4             : 
       5             : #include <node/interface_ui.h>
       6             : 
       7             : #include <util/string.h>
       8             : #include <util/translation.h>
       9             : 
      10             : #include <boost/signals2/optional_last_value.hpp>
      11             : #include <boost/signals2/signal.hpp>
      12             : 
      13             : CClientUIInterface uiInterface;
      14             : 
      15           2 : struct UISignals {
      16             :     boost::signals2::signal<CClientUIInterface::ThreadSafeMessageBoxSig, boost::signals2::optional_last_value<bool>> ThreadSafeMessageBox;
      17             :     boost::signals2::signal<CClientUIInterface::ThreadSafeQuestionSig, boost::signals2::optional_last_value<bool>> ThreadSafeQuestion;
      18             :     boost::signals2::signal<CClientUIInterface::InitMessageSig> InitMessage;
      19             :     boost::signals2::signal<CClientUIInterface::InitWalletSig> InitWallet;
      20             :     boost::signals2::signal<CClientUIInterface::NotifyNumConnectionsChangedSig> NotifyNumConnectionsChanged;
      21             :     boost::signals2::signal<CClientUIInterface::NotifyNetworkActiveChangedSig> NotifyNetworkActiveChanged;
      22             :     boost::signals2::signal<CClientUIInterface::NotifyAlertChangedSig> NotifyAlertChanged;
      23             :     boost::signals2::signal<CClientUIInterface::ShowProgressSig> ShowProgress;
      24             :     boost::signals2::signal<CClientUIInterface::NotifyBlockTipSig> NotifyBlockTip;
      25             :     boost::signals2::signal<CClientUIInterface::NotifyHeaderTipSig> NotifyHeaderTip;
      26             :     boost::signals2::signal<CClientUIInterface::BannedListChangedSig> BannedListChanged;
      27             : };
      28           2 : static UISignals g_ui_signals;
      29             : 
      30             : #define ADD_SIGNALS_IMPL_WRAPPER(signal_name)                                                                 \
      31             :     boost::signals2::connection CClientUIInterface::signal_name##_connect(std::function<signal_name##Sig> fn) \
      32             :     {                                                                                                         \
      33             :         return g_ui_signals.signal_name.connect(fn);                                                          \
      34             :     }
      35             : 
      36           1 : ADD_SIGNALS_IMPL_WRAPPER(ThreadSafeMessageBox);
      37           1 : ADD_SIGNALS_IMPL_WRAPPER(ThreadSafeQuestion);
      38           1 : ADD_SIGNALS_IMPL_WRAPPER(InitMessage);
      39           0 : ADD_SIGNALS_IMPL_WRAPPER(InitWallet);
      40           0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyNumConnectionsChanged);
      41           0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyNetworkActiveChanged);
      42           0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyAlertChanged);
      43           0 : ADD_SIGNALS_IMPL_WRAPPER(ShowProgress);
      44           0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyBlockTip);
      45           0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyHeaderTip);
      46           0 : ADD_SIGNALS_IMPL_WRAPPER(BannedListChanged);
      47             : 
      48           0 : bool CClientUIInterface::ThreadSafeMessageBox(const bilingual_str& message, const std::string& caption, unsigned int style) { return g_ui_signals.ThreadSafeMessageBox(message, caption, style).value_or(false);}
      49           0 : bool CClientUIInterface::ThreadSafeQuestion(const bilingual_str& message, const std::string& non_interactive_message, const std::string& caption, unsigned int style) { return g_ui_signals.ThreadSafeQuestion(message, non_interactive_message, caption, style).value_or(false);}
      50           0 : void CClientUIInterface::InitMessage(const std::string& message) { return g_ui_signals.InitMessage(message); }
      51           0 : void CClientUIInterface::InitWallet() { return g_ui_signals.InitWallet(); }
      52           0 : void CClientUIInterface::NotifyNumConnectionsChanged(int newNumConnections) { return g_ui_signals.NotifyNumConnectionsChanged(newNumConnections); }
      53           0 : void CClientUIInterface::NotifyNetworkActiveChanged(bool networkActive) { return g_ui_signals.NotifyNetworkActiveChanged(networkActive); }
      54           0 : void CClientUIInterface::NotifyAlertChanged() { return g_ui_signals.NotifyAlertChanged(); }
      55           0 : void CClientUIInterface::ShowProgress(const std::string& title, int nProgress, bool resume_possible) { return g_ui_signals.ShowProgress(title, nProgress, resume_possible); }
      56         201 : void CClientUIInterface::NotifyBlockTip(SynchronizationState s, const CBlockIndex* i) { return g_ui_signals.NotifyBlockTip(s, i); }
      57         200 : void CClientUIInterface::NotifyHeaderTip(SynchronizationState s, int64_t height, int64_t timestamp, bool presync) { return g_ui_signals.NotifyHeaderTip(s, height, timestamp, presync); }
      58           0 : void CClientUIInterface::BannedListChanged() { return g_ui_signals.BannedListChanged(); }
      59             : 
      60           0 : bool InitError(const bilingual_str& str)
      61             : {
      62           0 :     uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_ERROR);
      63           0 :     return false;
      64           0 : }
      65             : 
      66           0 : bool InitError(const bilingual_str& str, const std::vector<std::string>& details)
      67             : {
      68             :     // For now just flatten the list of error details into a string to pass to
      69             :     // the base InitError overload. In the future, if more init code provides
      70             :     // error details, the details could be passed separately from the main
      71             :     // message for rich display in the GUI. But currently the only init
      72             :     // functions which provide error details are ones that run during early init
      73             :     // before the GUI uiInterface is registered, so there's no point passing
      74           2 :     // main messages and details separately to uiInterface yet.
      75           0 :     return InitError(details.empty() ? str : strprintf(Untranslated("%s:\n%s"), str, MakeUnorderedList(details)));
      76           0 : }
      77             : 
      78           0 : void InitWarning(const bilingual_str& str)
      79             : {
      80           0 :     uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_WARNING);
      81           0 : }

Generated by: LCOV version 1.14