5 #include <bitcoin-build-config.h> 24 #include <validation.h> 29 #include <QMetaObject> 39 optionsModel(_optionsModel),
40 m_thread(new QThread(this))
51 QTimer* timer =
new QTimer;
53 connect(timer, &QTimer::timeout, [
this] {
59 connect(
m_thread, &QThread::finished, timer, &QObject::deleteLater);
60 connect(
m_thread, &QThread::started, [timer] { timer->start(); });
64 QTimer::singleShot(0, timer, []() {
158 if (m_cached_tip_blocks.IsNull()) {
159 m_cached_tip_blocks = tip;
161 return m_cached_tip_blocks;
208 return CLIENT_VERSION_IS_RELEASE;
213 return QDateTime::fromSecsSinceEpoch(
GetStartupTime()).toString();
239 const auto now{throttle ? SteadyClock::now() : SteadyClock::time_point{}};
246 nLastUpdateNotification = now;
252 [
this](
const std::string& title,
int progress, [[maybe_unused]]
bool resume_possible) {
253 Q_EMIT showProgress(QString::fromStdString(title), progress);
256 [
this](
int new_num_connections) {
257 Q_EMIT numConnectionsChanged(new_num_connections);
260 [
this](
bool network_active) {
261 Q_EMIT networkActiveChanged(network_active);
265 qDebug() <<
"ClientModel: NotifyAlertChanged";
266 Q_EMIT alertsChanged(getStatusBarWarnings());
270 qDebug() <<
"ClienModel: Requesting update for peer banlist";
271 QMetaObject::invokeMethod(banTableModel, [this] { banTableModel->refresh(); });
273 m_event_handlers.emplace_back(
m_node.handleNotifyBlockTip(
275 TipChanged(sync_state, tip, verification_progress, SyncType::BLOCK_SYNC);
277 m_event_handlers.emplace_back(
m_node.handleNotifyHeaderTip(
279 TipChanged(sync_state, tip, 0.0, presync ? SyncType::HEADER_PRESYNC : SyncType::HEADER_SYNC);
virtual size_t getMempoolMaxUsage()=0
Get mempool maximum memory usage.
QString formatClientStartupTime() const
PeerTableModel * peerTableModel
QString formatSubVersion() const
Block tip (could be a header or not, depends on the subscribed signal).
interfaces::Node & m_node
SynchronizationState
Current sync state passed to tip changed callbacks.
std::vector< std::unique_ptr< interfaces::Handler > > m_event_handlers
bool isReleaseVersion() const
std::atomic< int64_t > cachedBestHeaderTime
static SteadyClock::time_point g_last_header_tip_update_notification
QString blocksDir() const
virtual size_t getMempoolDynamicUsage()=0
Get mempool dynamic usage.
QThread *const m_thread
A thread to interact with m_node asynchronously.
virtual int64_t getTotalBytesRecv()=0
Get total bytes recv.
virtual size_t getMempoolSize()=0
Get mempool size.
BanTableModel * banTableModel
static constexpr auto MODEL_UPDATE_DELAY
ClientModel(interfaces::Node &node, OptionsModel *optionsModel, QObject *parent=nullptr)
OptionsModel * getOptionsModel()
std::atomic< int > cachedBestHeaderHeight
PeerTableModel * getPeerTableModel()
void ThreadRename(const std::string &)
Rename a thread both in terms of an internal (in-memory) name as well as its system thread name...
static SteadyClock::time_point g_last_block_tip_update_notification
virtual size_t getNodeCount(ConnectionDirection flags)=0
Get number of connections.
std::string ToStringAddrPort() const
QString getStatusBarWarnings() const
Return warnings to be displayed in status bar.
virtual std::unique_ptr< Handler > handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn)=0
void bytesChanged(quint64 totalBytesIn, quint64 totalBytesOut)
uint256 getBestBlockHash() EXCLUSIVE_LOCKS_REQUIRED(!m_cached_tip_mutex)
BlockSource getBlockSource() const
Returns the block source of the current importing/syncing state.
std::atomic< int > m_cached_num_blocks
fs::path GetDataDirNet() const
Get data directory path with appended network identifier.
void mempoolSizeChanged(long count, size_t mempoolSizeInBytes, size_t mempoolMaxSizeInBytes)
int getNumConnections(unsigned int flags=CONNECTIONS_ALL) const
Return number of connections, default is in- and outbound (total)
std::map< CNetAddr, LocalServiceInfo > getNetLocalAddresses() const
PeerTableSortProxy * m_peer_table_sort_proxy
Qt model providing information about connected peers, similar to the "getpeerinfo" RPC call...
virtual bool isLoadingBlocks()=0
Is loading blocks.
fs::path GetBlocksDirPath() const
Get blocks directory path.
virtual bilingual_str getWarnings()=0
Get warnings.
void unsubscribeFromCoreSignals()
virtual std::unique_ptr< Handler > handleShowProgress(ShowProgressFn fn)=0
void numBlocksChanged(int count, const QDateTime &blockDate, double nVerificationProgress, SyncType header, SynchronizationState sync_state)
BanTableModel * getBanTableModel()
virtual bool getProxy(Network net, Proxy &proxy_info)=0
Get proxy.
void subscribeToCoreSignals()
void TipChanged(SynchronizationState sync_state, interfaces::BlockTip tip, double verification_progress, SyncType synctype) EXCLUSIVE_LOCKS_REQUIRED(!m_cached_tip_mutex)
virtual std::unique_ptr< Handler > handleBannedListChanged(BannedListChangedFn fn)=0
std::string strSubVersion
Subversion as sent to the P2P network in version messages.
virtual std::map< CNetAddr, LocalServiceInfo > getNetLocalAddresses()=0
Get network local addresses.
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
std::string FormatFullVersion()
virtual uint256 getBestBlockHash()=0
Get best block hash.
Interface from Qt to configuration data structure for Bitcoin client.
Qt model providing information about banned peers, similar to the "getpeerinfo" RPC call...
virtual bool getHeaderTip(int &height, int64_t &block_time)=0
Get header tip height and time.
OptionsModel * optionsModel
virtual int getNumBlocks()=0
Get num blocks.
virtual std::unique_ptr< Handler > handleNotifyAlertChanged(NotifyAlertChangedFn fn)=0
PeerTableSortProxy * peerTableSortProxy()
int getHeaderTipHeight() const
virtual std::unique_ptr< Handler > handleNotifyNetworkActiveChanged(NotifyNetworkActiveChangedFn fn)=0
virtual int64_t getTotalBytesSent()=0
Get total bytes sent.
int64_t getHeaderTipTime() const
Top-level interface for a bitcoin node (bitcoind process).
QString PathToQString(const fs::path &path)
Convert OS specific boost path to QString through UTF-8.
QString formatFullVersion() const
bool getProxyInfo(std::string &ip_port) const