Blame SOURCES/0042-proxy-Set-detailed-error-message-for-async-call.patch

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