aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2012-08-31 17:40:13 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2012-08-31 17:41:58 +0200
commitb5c1467a7d7d261de5f87d6f26a00cf5ab230dfb (patch)
tree5c8b9337c242909db709c80e55ffaf76ee6d0536
parent576b5efe93cdcd544c205f4c4f8f1696e6e907ee (diff)
downloadbitcoin-b5c1467a7d7d261de5f87d6f26a00cf5ab230dfb.tar.xz
In RPC console, attempt to format errors
Try to display a nicer message instead of dumping raw JSON object when possible. If the error somehow doesn't have the required 'code' and 'message' fields, fall back to printing raw JSON object.
-rw-r--r--src/qt/rpcconsole.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp
index 470eba732c..6e48fbe8da 100644
--- a/src/qt/rpcconsole.cpp
+++ b/src/qt/rpcconsole.cpp
@@ -153,7 +153,8 @@ void RPCExecutor::request(const QString &command)
}
if(args.empty())
return; // Nothing to do
- try {
+ try
+ {
std::string strPrint;
// Convert argument list to JSON objects in method-dependent way,
// and pass it along with the method name to the dispatcher.
@@ -173,7 +174,17 @@ void RPCExecutor::request(const QString &command)
}
catch (json_spirit::Object& objError)
{
- emit reply(RPCConsole::CMD_ERROR, QString::fromStdString(write_string(json_spirit::Value(objError), false)));
+ try // Nice formatting for standard-format error
+ {
+ int code = find_value(objError, "code").get_int();
+ std::string message = find_value(objError, "message").get_str();
+ emit reply(RPCConsole::CMD_ERROR, QString::fromStdString(message) + " (code " + QString::number(code) + ")");
+ }
+ catch(std::runtime_error &) // raised when converting to invalid type, i.e. missing code or message
+ {
+ // Show raw JSON object
+ emit reply(RPCConsole::CMD_ERROR, QString::fromStdString(write_string(json_spirit::Value(objError), false)));
+ }
}
catch (std::exception& e)
{