Overhaul network activity toggle
- Rename RPC command "togglenetwork" to "setnetworkactive (true|false)" - Add simple test case - GUI toggle added to connections icon in statusbar
This commit is contained in:
parent
32efa79e0e
commit
b2b33d9017
9 changed files with 75 additions and 14 deletions
|
@ -34,6 +34,7 @@ Files: src/qt/res/icons/add.png
|
||||||
src/qt/res/icons/info.png
|
src/qt/res/icons/info.png
|
||||||
src/qt/res/icons/key.png
|
src/qt/res/icons/key.png
|
||||||
src/qt/res/icons/lock_*.png
|
src/qt/res/icons/lock_*.png
|
||||||
|
src/qt/res/icons/network_disabled.png
|
||||||
src/qt/res/icons/open.png
|
src/qt/res/icons/open.png
|
||||||
src/qt/res/icons/overview.png
|
src/qt/res/icons/overview.png
|
||||||
src/qt/res/icons/quit.png
|
src/qt/res/icons/quit.png
|
||||||
|
|
|
@ -264,6 +264,7 @@ RES_ICONS = \
|
||||||
qt/res/icons/key.png \
|
qt/res/icons/key.png \
|
||||||
qt/res/icons/lock_closed.png \
|
qt/res/icons/lock_closed.png \
|
||||||
qt/res/icons/lock_open.png \
|
qt/res/icons/lock_open.png \
|
||||||
|
qt/res/icons/network_disabled.png \
|
||||||
qt/res/icons/open.png \
|
qt/res/icons/open.png \
|
||||||
qt/res/icons/overview.png \
|
qt/res/icons/overview.png \
|
||||||
qt/res/icons/quit.png \
|
qt/res/icons/quit.png \
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
<file alias="transaction_abandoned">res/icons/transaction_abandoned.png</file>
|
<file alias="transaction_abandoned">res/icons/transaction_abandoned.png</file>
|
||||||
<file alias="hd_enabled">res/icons/hd_enabled.png</file>
|
<file alias="hd_enabled">res/icons/hd_enabled.png</file>
|
||||||
<file alias="hd_disabled">res/icons/hd_disabled.png</file>
|
<file alias="hd_disabled">res/icons/hd_disabled.png</file>
|
||||||
|
<file alias="network_disabled">res/icons/network_disabled.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/movies">
|
<qresource prefix="/movies">
|
||||||
<file alias="spinner-000">res/movies/spinner-000.png</file>
|
<file alias="spinner-000">res/movies/spinner-000.png</file>
|
||||||
|
|
|
@ -83,7 +83,7 @@ BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle *
|
||||||
unitDisplayControl(0),
|
unitDisplayControl(0),
|
||||||
labelWalletEncryptionIcon(0),
|
labelWalletEncryptionIcon(0),
|
||||||
labelWalletHDStatusIcon(0),
|
labelWalletHDStatusIcon(0),
|
||||||
labelConnectionsIcon(0),
|
connectionsControl(0),
|
||||||
labelBlocksIcon(0),
|
labelBlocksIcon(0),
|
||||||
progressBarLabel(0),
|
progressBarLabel(0),
|
||||||
progressBar(0),
|
progressBar(0),
|
||||||
|
@ -195,7 +195,7 @@ BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle *
|
||||||
unitDisplayControl = new UnitDisplayStatusBarControl(platformStyle);
|
unitDisplayControl = new UnitDisplayStatusBarControl(platformStyle);
|
||||||
labelWalletEncryptionIcon = new QLabel();
|
labelWalletEncryptionIcon = new QLabel();
|
||||||
labelWalletHDStatusIcon = new QLabel();
|
labelWalletHDStatusIcon = new QLabel();
|
||||||
labelConnectionsIcon = new QLabel();
|
connectionsControl = new NetworkToggleStatusBarControl();
|
||||||
labelBlocksIcon = new QLabel();
|
labelBlocksIcon = new QLabel();
|
||||||
if(enableWallet)
|
if(enableWallet)
|
||||||
{
|
{
|
||||||
|
@ -206,7 +206,7 @@ BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle *
|
||||||
frameBlocksLayout->addWidget(labelWalletHDStatusIcon);
|
frameBlocksLayout->addWidget(labelWalletHDStatusIcon);
|
||||||
}
|
}
|
||||||
frameBlocksLayout->addStretch();
|
frameBlocksLayout->addStretch();
|
||||||
frameBlocksLayout->addWidget(labelConnectionsIcon);
|
frameBlocksLayout->addWidget(connectionsControl);
|
||||||
frameBlocksLayout->addStretch();
|
frameBlocksLayout->addStretch();
|
||||||
frameBlocksLayout->addWidget(labelBlocksIcon);
|
frameBlocksLayout->addWidget(labelBlocksIcon);
|
||||||
frameBlocksLayout->addStretch();
|
frameBlocksLayout->addStretch();
|
||||||
|
@ -480,6 +480,7 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel)
|
||||||
}
|
}
|
||||||
#endif // ENABLE_WALLET
|
#endif // ENABLE_WALLET
|
||||||
unitDisplayControl->setOptionsModel(_clientModel->getOptionsModel());
|
unitDisplayControl->setOptionsModel(_clientModel->getOptionsModel());
|
||||||
|
connectionsControl->setClientModel(_clientModel);
|
||||||
|
|
||||||
OptionsModel* optionsModel = _clientModel->getOptionsModel();
|
OptionsModel* optionsModel = _clientModel->getOptionsModel();
|
||||||
if(optionsModel)
|
if(optionsModel)
|
||||||
|
@ -699,13 +700,15 @@ void BitcoinGUI::updateNetworkState()
|
||||||
case 7: case 8: case 9: icon = ":/icons/connect_3"; break;
|
case 7: case 8: case 9: icon = ":/icons/connect_3"; break;
|
||||||
default: icon = ":/icons/connect_4"; break;
|
default: icon = ":/icons/connect_4"; break;
|
||||||
}
|
}
|
||||||
labelConnectionsIcon->setPixmap(platformStyle->SingleColorIcon(icon).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
|
|
||||||
|
|
||||||
if (clientModel->getNetworkActive()) {
|
if (clientModel->getNetworkActive()) {
|
||||||
labelConnectionsIcon->setToolTip(tr("%n active connection(s) to Bitcoin network", "", count));
|
connectionsControl->setToolTip(tr("%n active connection(s) to Bitcoin network", "", count));
|
||||||
} else {
|
} else {
|
||||||
labelConnectionsIcon->setToolTip(tr("Network activity disabled"));
|
connectionsControl->setToolTip(tr("Network activity disabled"));
|
||||||
|
icon = ":/icons/network_disabled";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
connectionsControl->setPixmap(platformStyle->SingleColorIcon(icon).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitcoinGUI::setNumConnections(int count)
|
void BitcoinGUI::setNumConnections(int count)
|
||||||
|
@ -1220,3 +1223,18 @@ void UnitDisplayStatusBarControl::onMenuSelection(QAction* action)
|
||||||
optionsModel->setDisplayUnit(action->data());
|
optionsModel->setDisplayUnit(action->data());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkToggleStatusBarControl::mousePressEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
if (clientModel) {
|
||||||
|
clientModel->setNetworkActive(!clientModel->getNetworkActive());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Lets the control know about the Client Model */
|
||||||
|
void NetworkToggleStatusBarControl::setClientModel(ClientModel *_clientModel)
|
||||||
|
{
|
||||||
|
if (_clientModel) {
|
||||||
|
this->clientModel = _clientModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ class PlatformStyle;
|
||||||
class RPCConsole;
|
class RPCConsole;
|
||||||
class SendCoinsRecipient;
|
class SendCoinsRecipient;
|
||||||
class UnitDisplayStatusBarControl;
|
class UnitDisplayStatusBarControl;
|
||||||
|
class NetworkToggleStatusBarControl;
|
||||||
class WalletFrame;
|
class WalletFrame;
|
||||||
class WalletModel;
|
class WalletModel;
|
||||||
class HelpMessageDialog;
|
class HelpMessageDialog;
|
||||||
|
@ -84,7 +85,7 @@ private:
|
||||||
UnitDisplayStatusBarControl *unitDisplayControl;
|
UnitDisplayStatusBarControl *unitDisplayControl;
|
||||||
QLabel *labelWalletEncryptionIcon;
|
QLabel *labelWalletEncryptionIcon;
|
||||||
QLabel *labelWalletHDStatusIcon;
|
QLabel *labelWalletHDStatusIcon;
|
||||||
QLabel *labelConnectionsIcon;
|
NetworkToggleStatusBarControl *connectionsControl;
|
||||||
QLabel *labelBlocksIcon;
|
QLabel *labelBlocksIcon;
|
||||||
QLabel *progressBarLabel;
|
QLabel *progressBarLabel;
|
||||||
QProgressBar *progressBar;
|
QProgressBar *progressBar;
|
||||||
|
@ -265,4 +266,17 @@ private Q_SLOTS:
|
||||||
void onMenuSelection(QAction* action);
|
void onMenuSelection(QAction* action);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NetworkToggleStatusBarControl : public QLabel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
void setClientModel(ClientModel *clientModel);
|
||||||
|
protected:
|
||||||
|
void mousePressEvent(QMouseEvent *event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
ClientModel *clientModel;
|
||||||
|
};
|
||||||
|
|
||||||
#endif // BITCOIN_QT_BITCOINGUI_H
|
#endif // BITCOIN_QT_BITCOINGUI_H
|
||||||
|
|
BIN
src/qt/res/icons/network_disabled.png
Normal file
BIN
src/qt/res/icons/network_disabled.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 435 B |
|
@ -107,6 +107,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
|
||||||
{ "prioritisetransaction", 2 },
|
{ "prioritisetransaction", 2 },
|
||||||
{ "setban", 2 },
|
{ "setban", 2 },
|
||||||
{ "setban", 3 },
|
{ "setban", 3 },
|
||||||
|
{ "setnetworkactive", 0 },
|
||||||
{ "getmempoolancestors", 1 },
|
{ "getmempoolancestors", 1 },
|
||||||
{ "getmempooldescendants", 1 },
|
{ "getmempooldescendants", 1 },
|
||||||
};
|
};
|
||||||
|
|
|
@ -401,6 +401,7 @@ UniValue getnetworkinfo(const UniValue& params, bool fHelp)
|
||||||
" \"localrelay\": true|false, (bool) true if transaction relay is requested from peers\n"
|
" \"localrelay\": true|false, (bool) true if transaction relay is requested from peers\n"
|
||||||
" \"timeoffset\": xxxxx, (numeric) the time offset\n"
|
" \"timeoffset\": xxxxx, (numeric) the time offset\n"
|
||||||
" \"connections\": xxxxx, (numeric) the number of connections\n"
|
" \"connections\": xxxxx, (numeric) the number of connections\n"
|
||||||
|
" \"networkactive\": x, (numeric) the number of connections\n"
|
||||||
" \"networks\": [ (array) information per network\n"
|
" \"networks\": [ (array) information per network\n"
|
||||||
" {\n"
|
" {\n"
|
||||||
" \"name\": \"xxx\", (string) network (ipv4, ipv6 or onion)\n"
|
" \"name\": \"xxx\", (string) network (ipv4, ipv6 or onion)\n"
|
||||||
|
@ -435,8 +436,10 @@ UniValue getnetworkinfo(const UniValue& params, bool fHelp)
|
||||||
obj.push_back(Pair("localservices", strprintf("%016x", g_connman->GetLocalServices())));
|
obj.push_back(Pair("localservices", strprintf("%016x", g_connman->GetLocalServices())));
|
||||||
obj.push_back(Pair("localrelay", fRelayTxes));
|
obj.push_back(Pair("localrelay", fRelayTxes));
|
||||||
obj.push_back(Pair("timeoffset", GetTimeOffset()));
|
obj.push_back(Pair("timeoffset", GetTimeOffset()));
|
||||||
if(g_connman)
|
if (g_connman) {
|
||||||
|
obj.push_back(Pair("networkactive", (int)g_connman->GetNetworkActive()));
|
||||||
obj.push_back(Pair("connections", (int)g_connman->GetNodeCount(CConnman::CONNECTIONS_ALL)));
|
obj.push_back(Pair("connections", (int)g_connman->GetNodeCount(CConnman::CONNECTIONS_ALL)));
|
||||||
|
}
|
||||||
obj.push_back(Pair("networks", GetNetworksInfo()));
|
obj.push_back(Pair("networks", GetNetworksInfo()));
|
||||||
obj.push_back(Pair("relayfee", ValueFromAmount(::minRelayTxFee.GetFeePerK())));
|
obj.push_back(Pair("relayfee", ValueFromAmount(::minRelayTxFee.GetFeePerK())));
|
||||||
UniValue localAddresses(UniValue::VARR);
|
UniValue localAddresses(UniValue::VARR);
|
||||||
|
@ -571,12 +574,12 @@ UniValue clearbanned(const UniValue& params, bool fHelp)
|
||||||
return NullUniValue;
|
return NullUniValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
UniValue togglenetwork(const JSONRPCRequest& request)
|
UniValue setnetworkactive(const JSONRPCRequest& request)
|
||||||
{
|
{
|
||||||
if (request.fHelp || request.params.size() != 0) {
|
if (request.fHelp || request.params.size() != 1) {
|
||||||
throw runtime_error(
|
throw runtime_error(
|
||||||
"togglenetwork\n"
|
"setnetworkactive \"true|false\"\n"
|
||||||
"Toggle all network activity temporarily."
|
"Disable/Re-Enable all network activity temporarily."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,7 +587,7 @@ UniValue togglenetwork(const JSONRPCRequest& request)
|
||||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
g_connman->SetNetworkActive(!g_connman->GetNetworkActive());
|
g_connman->SetNetworkActive(request.params[0].get_bool());
|
||||||
|
|
||||||
return g_connman->GetNetworkActive();
|
return g_connman->GetNetworkActive();
|
||||||
}
|
}
|
||||||
|
@ -603,7 +606,7 @@ static const CRPCCommand commands[] =
|
||||||
{ "network", "setban", &setban, true },
|
{ "network", "setban", &setban, true },
|
||||||
{ "network", "listbanned", &listbanned, true },
|
{ "network", "listbanned", &listbanned, true },
|
||||||
{ "network", "clearbanned", &clearbanned, true },
|
{ "network", "clearbanned", &clearbanned, true },
|
||||||
{ "network", "togglenetwork", &togglenetwork, true, },
|
{ "network", "setnetworkactive", &setnetworkactive, true, },
|
||||||
};
|
};
|
||||||
|
|
||||||
void RegisterNetRPCCommands(CRPCTable &t)
|
void RegisterNetRPCCommands(CRPCTable &t)
|
||||||
|
|
|
@ -81,6 +81,28 @@ BOOST_AUTO_TEST_CASE(rpc_rawparams)
|
||||||
BOOST_CHECK_THROW(CallRPC(string("sendrawtransaction ")+rawtx+" extra"), runtime_error);
|
BOOST_CHECK_THROW(CallRPC(string("sendrawtransaction ")+rawtx+" extra"), runtime_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(rpc_togglenetwork)
|
||||||
|
{
|
||||||
|
UniValue r;
|
||||||
|
|
||||||
|
r = CallRPC("getnetworkinfo");
|
||||||
|
int netState = find_value(r.get_obj(), "networkactive").get_int();
|
||||||
|
BOOST_CHECK_EQUAL(netState, 1);
|
||||||
|
|
||||||
|
BOOST_CHECK_NO_THROW(CallRPC("setnetworkactive false"));
|
||||||
|
r = CallRPC("getnetworkinfo");
|
||||||
|
int numConnection = find_value(r.get_obj(), "connections").get_int();
|
||||||
|
BOOST_CHECK_EQUAL(numConnection, 0);
|
||||||
|
|
||||||
|
netState = find_value(r.get_obj(), "networkactive").get_int();
|
||||||
|
BOOST_CHECK_EQUAL(netState, 0);
|
||||||
|
|
||||||
|
BOOST_CHECK_NO_THROW(CallRPC("setnetworkactive true"));
|
||||||
|
r = CallRPC("getnetworkinfo");
|
||||||
|
netState = find_value(r.get_obj(), "networkactive").get_int();
|
||||||
|
BOOST_CHECK_EQUAL(netState, 1);
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(rpc_rawsign)
|
BOOST_AUTO_TEST_CASE(rpc_rawsign)
|
||||||
{
|
{
|
||||||
UniValue r;
|
UniValue r;
|
||||||
|
|
Loading…
Reference in a new issue