mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-15 12:51:00 +02:00
Merge 776d48dd56 into merged_master (Bitcoin PR bitcoin-core/gui#801)
This commit is contained in:
commit
8dfb84eddd
5 changed files with 31 additions and 29 deletions
|
|
@ -365,6 +365,11 @@ void BitcoinApplication::requestShutdown()
|
|||
// Request node shutdown, which can interrupt long operations, like
|
||||
// rescanning a wallet.
|
||||
node().startShutdown();
|
||||
// Prior to unsetting the client model, stop listening backend signals
|
||||
if (clientModel) {
|
||||
clientModel->stop();
|
||||
}
|
||||
|
||||
// Unsetting the client model can cause the current thread to wait for node
|
||||
// to complete an operation, like wait for a RPC execution to complete.
|
||||
window->setClientModel(nullptr);
|
||||
|
|
|
|||
|
|
@ -975,6 +975,7 @@ void BitcoinGUI::gotoLoadPSBT(bool from_clipboard)
|
|||
|
||||
void BitcoinGUI::updateNetworkState()
|
||||
{
|
||||
if (!clientModel) return;
|
||||
int count = clientModel->getNumConnections();
|
||||
QString icon;
|
||||
switch(count)
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ ClientModel::ClientModel(interfaces::Node& node, OptionsModel *_optionsModel, QO
|
|||
subscribeToCoreSignals();
|
||||
}
|
||||
|
||||
ClientModel::~ClientModel()
|
||||
void ClientModel::stop()
|
||||
{
|
||||
unsubscribeFromCoreSignals();
|
||||
|
||||
|
|
@ -78,6 +78,11 @@ ClientModel::~ClientModel()
|
|||
m_thread->wait();
|
||||
}
|
||||
|
||||
ClientModel::~ClientModel()
|
||||
{
|
||||
stop();
|
||||
}
|
||||
|
||||
int ClientModel::getNumConnections(unsigned int flags) const
|
||||
{
|
||||
ConnectionDirection connections = ConnectionDirection::None;
|
||||
|
|
@ -238,47 +243,41 @@ void ClientModel::TipChanged(SynchronizationState sync_state, interfaces::BlockT
|
|||
|
||||
void ClientModel::subscribeToCoreSignals()
|
||||
{
|
||||
m_handler_show_progress = m_node.handleShowProgress(
|
||||
m_event_handlers.emplace_back(m_node.handleShowProgress(
|
||||
[this](const std::string& title, int progress, [[maybe_unused]] bool resume_possible) {
|
||||
Q_EMIT showProgress(QString::fromStdString(title), progress);
|
||||
});
|
||||
m_handler_notify_num_connections_changed = m_node.handleNotifyNumConnectionsChanged(
|
||||
}));
|
||||
m_event_handlers.emplace_back(m_node.handleNotifyNumConnectionsChanged(
|
||||
[this](int new_num_connections) {
|
||||
Q_EMIT numConnectionsChanged(new_num_connections);
|
||||
});
|
||||
m_handler_notify_network_active_changed = m_node.handleNotifyNetworkActiveChanged(
|
||||
}));
|
||||
m_event_handlers.emplace_back(m_node.handleNotifyNetworkActiveChanged(
|
||||
[this](bool network_active) {
|
||||
Q_EMIT networkActiveChanged(network_active);
|
||||
});
|
||||
m_handler_notify_alert_changed = m_node.handleNotifyAlertChanged(
|
||||
}));
|
||||
m_event_handlers.emplace_back(m_node.handleNotifyAlertChanged(
|
||||
[this]() {
|
||||
qDebug() << "ClientModel: NotifyAlertChanged";
|
||||
Q_EMIT alertsChanged(getStatusBarWarnings());
|
||||
});
|
||||
m_handler_banned_list_changed = m_node.handleBannedListChanged(
|
||||
}));
|
||||
m_event_handlers.emplace_back(m_node.handleBannedListChanged(
|
||||
[this]() {
|
||||
qDebug() << "ClienModel: Requesting update for peer banlist";
|
||||
QMetaObject::invokeMethod(banTableModel, [this] { banTableModel->refresh(); });
|
||||
});
|
||||
m_handler_notify_block_tip = m_node.handleNotifyBlockTip(
|
||||
}));
|
||||
m_event_handlers.emplace_back(m_node.handleNotifyBlockTip(
|
||||
[this](SynchronizationState sync_state, interfaces::BlockTip tip, double verification_progress) {
|
||||
TipChanged(sync_state, tip, verification_progress, SyncType::BLOCK_SYNC);
|
||||
});
|
||||
m_handler_notify_header_tip = m_node.handleNotifyHeaderTip(
|
||||
}));
|
||||
m_event_handlers.emplace_back(m_node.handleNotifyHeaderTip(
|
||||
[this](SynchronizationState sync_state, interfaces::BlockTip tip, bool presync) {
|
||||
TipChanged(sync_state, tip, /*verification_progress=*/0.0, presync ? SyncType::HEADER_PRESYNC : SyncType::HEADER_SYNC);
|
||||
});
|
||||
}));
|
||||
}
|
||||
|
||||
void ClientModel::unsubscribeFromCoreSignals()
|
||||
{
|
||||
m_handler_show_progress->disconnect();
|
||||
m_handler_notify_num_connections_changed->disconnect();
|
||||
m_handler_notify_network_active_changed->disconnect();
|
||||
m_handler_notify_alert_changed->disconnect();
|
||||
m_handler_banned_list_changed->disconnect();
|
||||
m_handler_notify_block_tip->disconnect();
|
||||
m_handler_notify_header_tip->disconnect();
|
||||
m_event_handlers.clear();
|
||||
}
|
||||
|
||||
bool ClientModel::getProxyInfo(std::string& ip_port) const
|
||||
|
|
|
|||
|
|
@ -58,6 +58,8 @@ public:
|
|||
explicit ClientModel(interfaces::Node& node, OptionsModel *optionsModel, QObject *parent = nullptr);
|
||||
~ClientModel();
|
||||
|
||||
void stop();
|
||||
|
||||
interfaces::Node& node() const { return m_node; }
|
||||
OptionsModel *getOptionsModel();
|
||||
PeerTableModel *getPeerTableModel();
|
||||
|
|
@ -95,13 +97,7 @@ public:
|
|||
|
||||
private:
|
||||
interfaces::Node& m_node;
|
||||
std::unique_ptr<interfaces::Handler> m_handler_show_progress;
|
||||
std::unique_ptr<interfaces::Handler> m_handler_notify_num_connections_changed;
|
||||
std::unique_ptr<interfaces::Handler> m_handler_notify_network_active_changed;
|
||||
std::unique_ptr<interfaces::Handler> m_handler_notify_alert_changed;
|
||||
std::unique_ptr<interfaces::Handler> m_handler_banned_list_changed;
|
||||
std::unique_ptr<interfaces::Handler> m_handler_notify_block_tip;
|
||||
std::unique_ptr<interfaces::Handler> m_handler_notify_header_tip;
|
||||
std::vector<std::unique_ptr<interfaces::Handler>> m_event_handlers;
|
||||
OptionsModel *optionsModel;
|
||||
PeerTableModel* peerTableModel{nullptr};
|
||||
PeerTableSortProxy* m_peer_table_sort_proxy{nullptr};
|
||||
|
|
|
|||
|
|
@ -968,6 +968,7 @@ void RPCConsole::message(int category, const QString &message, bool html)
|
|||
|
||||
void RPCConsole::updateNetworkState()
|
||||
{
|
||||
if (!clientModel) return;
|
||||
QString connections = QString::number(clientModel->getNumConnections()) + " (";
|
||||
connections += tr("In:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_IN)) + " / ";
|
||||
connections += tr("Out:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_OUT)) + ")";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue