| From 01563a00550dd001f080aeddd8c6bbc35c676991 Mon Sep 17 00:00:00 2001 |
| From: "Eduardo Lima (Etrunko)" <etrunko@redhat.com> |
| Date: Wed, 11 Jul 2018 15:42:16 -0300 |
| Subject: [PATCH] proxy: Set detailed error message for async call |
| |
| The rest API returns more detailed error messages with the result, not |
| only the literal corresponding to the value. If this is the case, we set |
| a new error message and return it. |
| |
| For example, before this change, virt-viewer showed a dialog with a |
| vague 'Bad Request' message, and now a much more detailed 'Operation |
| Failed: query execution failed due to insufficient permissions.' |
| |
| Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com> |
| |
| govirt/ovirt-proxy.c | 20 ++++++++++++++++++-- |
| 1 file changed, 18 insertions(+), 2 deletions(-) |
| |
| diff --git a/govirt/ovirt-proxy.c b/govirt/ovirt-proxy.c |
| index 921e22e..f8e629e 100644 |
| |
| |
| @@ -240,6 +240,22 @@ call_async_cancelled_cb (G_GNUC_UNUSED GCancellable *cancellable, |
| } |
| |
| |
| +static void rest_call_async_set_error(RestProxyCall *call, GSimpleAsyncResult *result, const GError *error) |
| +{ |
| + GError *local_error = NULL; |
| + RestXmlNode *root = ovirt_rest_xml_node_from_call(call); |
| + |
| + if (root != NULL && ovirt_utils_gerror_from_xml_fault(root, &local_error)) { |
| + g_debug("ovirt_rest_call_async(): %s", local_error->message); |
| + g_simple_async_result_set_from_error(result, local_error); |
| + g_clear_error(&local_error); |
| + } else { |
| + g_simple_async_result_set_from_error(result, error); |
| + } |
| + |
| + rest_xml_node_unref(root); |
| +} |
| + |
| static void |
| call_async_cb(RestProxyCall *call, const GError *error, |
| G_GNUC_UNUSED GObject *weak_object, |
| @@ -249,7 +265,7 @@ call_async_cb(RestProxyCall *call, const GError *error, |
| GSimpleAsyncResult *result = data->result; |
| |
| if (error != NULL) { |
| - g_simple_async_result_set_from_error(result, error); |
| + rest_call_async_set_error(call, result, error); |
| } else { |
| GError *call_error = NULL; |
| gboolean callback_result = TRUE; |
| @@ -259,7 +275,7 @@ call_async_cb(RestProxyCall *call, const GError *error, |
| data->call_user_data, |
| &call_error); |
| if (call_error != NULL) { |
| - g_simple_async_result_set_from_error(result, call_error); |
| + rest_call_async_set_error(call, result, call_error); |
| } |
| } |
| |
| -- |
| 2.20.1 |
| |