changeset 3436:fc3bff935e89 draft

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.
author Wladimir J. van der Laan <laanwj@gmail.com>
date Fri, 31 Aug 2012 17:40:13 +0200
parents 142c12e4e66b
children 96f2ba242285
files src/qt/rpcconsole.cpp
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/qt/rpcconsole.cpp
+++ b/src/qt/rpcconsole.cpp
@@ -153,7 +153,8 @@
     }
     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 @@
     }
     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)
     {