Qt/RPCConsole: Make it possible to parse a command without executing it
This commit is contained in:
parent
1755c04576
commit
e2d9213c32
2 changed files with 17 additions and 12 deletions
|
@ -136,10 +136,10 @@ public:
|
||||||
#include "rpcconsole.moc"
|
#include "rpcconsole.moc"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Split shell command line into a list of arguments and execute the command(s).
|
* Split shell command line into a list of arguments and optionally execute the command(s).
|
||||||
* Aims to emulate \c bash and friends.
|
* Aims to emulate \c bash and friends.
|
||||||
*
|
*
|
||||||
* - Command nesting is possible with brackets [example: validateaddress(getnewaddress())]
|
* - Command nesting is possible with parenthesis; for example: validateaddress(getnewaddress())
|
||||||
* - Arguments are delimited with whitespace or comma
|
* - Arguments are delimited with whitespace or comma
|
||||||
* - Extra whitespace at the beginning and end and between arguments will be ignored
|
* - Extra whitespace at the beginning and end and between arguments will be ignored
|
||||||
* - Text can be "double" or 'single' quoted
|
* - Text can be "double" or 'single' quoted
|
||||||
|
@ -150,9 +150,10 @@ public:
|
||||||
*
|
*
|
||||||
* @param[out] result stringified Result from the executed command(chain)
|
* @param[out] result stringified Result from the executed command(chain)
|
||||||
* @param[in] strCommand Command line to split
|
* @param[in] strCommand Command line to split
|
||||||
|
* @param[in] fExecute set true if you want the command to be executed
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string &strCommand)
|
bool RPCConsole::RPCParseCommandLine(std::string &strResult, const std::string &strCommand, const bool fExecute)
|
||||||
{
|
{
|
||||||
std::vector< std::vector<std::string> > stack;
|
std::vector< std::vector<std::string> > stack;
|
||||||
stack.push_back(std::vector<std::string>());
|
stack.push_back(std::vector<std::string>());
|
||||||
|
@ -196,7 +197,7 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
|
||||||
curarg += ch;
|
curarg += ch;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (curarg.size())
|
if (curarg.size() && fExecute)
|
||||||
{
|
{
|
||||||
// if we have a value query, query arrays with index and objects with a string key
|
// if we have a value query, query arrays with index and objects with a string key
|
||||||
UniValue subelement;
|
UniValue subelement;
|
||||||
|
@ -271,13 +272,14 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
|
||||||
}
|
}
|
||||||
if ((ch == ')' || ch == '\n') && stack.size() > 0)
|
if ((ch == ')' || ch == '\n') && stack.size() > 0)
|
||||||
{
|
{
|
||||||
std::string strPrint;
|
if (fExecute) {
|
||||||
// Convert argument list to JSON objects in method-dependent way,
|
// Convert argument list to JSON objects in method-dependent way,
|
||||||
// and pass it along with the method name to the dispatcher.
|
// and pass it along with the method name to the dispatcher.
|
||||||
JSONRPCRequest req;
|
JSONRPCRequest req;
|
||||||
req.params = RPCConvertValues(stack.back()[0], std::vector<std::string>(stack.back().begin() + 1, stack.back().end()));
|
req.params = RPCConvertValues(stack.back()[0], std::vector<std::string>(stack.back().begin() + 1, stack.back().end()));
|
||||||
req.strMethod = stack.back()[0];
|
req.strMethod = stack.back()[0];
|
||||||
lastResult = tableRPC.execute(req);
|
lastResult = tableRPC.execute(req);
|
||||||
|
}
|
||||||
|
|
||||||
state = STATE_COMMAND_EXECUTED;
|
state = STATE_COMMAND_EXECUTED;
|
||||||
curarg.clear();
|
curarg.clear();
|
||||||
|
|
|
@ -36,7 +36,10 @@ public:
|
||||||
explicit RPCConsole(const PlatformStyle *platformStyle, QWidget *parent);
|
explicit RPCConsole(const PlatformStyle *platformStyle, QWidget *parent);
|
||||||
~RPCConsole();
|
~RPCConsole();
|
||||||
|
|
||||||
static bool RPCExecuteCommandLine(std::string &strResult, const std::string &strCommand);
|
static bool RPCParseCommandLine(std::string &strResult, const std::string &strCommand, bool fExecute);
|
||||||
|
static bool RPCExecuteCommandLine(std::string &strResult, const std::string &strCommand) {
|
||||||
|
return RPCParseCommandLine(strResult, strCommand, true);
|
||||||
|
}
|
||||||
|
|
||||||
void setClientModel(ClientModel *model);
|
void setClientModel(ClientModel *model);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue