[libgovirt] Implement ovirt_resource_refresh{_async}



commit 063513697ed73220dd420be600075f319f407d5c
Author: Christophe Fergeau <cfergeau redhat com>
Date:   Tue Apr 29 13:20:06 2014 +0200

    Implement ovirt_resource_refresh{_async}
    
    Calling these functions will refetch the XML corresponding to the
    current resource and reparse it. This will sync the local OVirtResource
    state with the remote state.

 govirt/govirt.sym       |    4 ++
 govirt/ovirt-resource.c |   86 +++++++++++++++++++++++++++++++++++++++++++++++
 govirt/ovirt-resource.h |   12 ++++++
 3 files changed, 102 insertions(+), 0 deletions(-)
---
diff --git a/govirt/govirt.sym b/govirt/govirt.sym
index 4700446..760e0f1 100644
--- a/govirt/govirt.sym
+++ b/govirt/govirt.sym
@@ -90,6 +90,10 @@ GOVIRT_0.2.1 {
 GOVIRT_0.3.1 {
         ovirt_api_get_vm_pools;
 
+        ovirt_resource_refresh;
+        ovirt_resource_refresh_async;
+        ovirt_resource_refresh_finish;
+
         ovirt_vm_pool_get_type;
         ovirt_vm_pool_new;
         ovirt_vm_pool_allocate_vm;
diff --git a/govirt/ovirt-resource.c b/govirt/ovirt-resource.c
index 172caa3..3d223f4 100644
--- a/govirt/ovirt-resource.c
+++ b/govirt/ovirt-resource.c
@@ -840,3 +840,89 @@ ovirt_resource_action_finish(OvirtResource *resource,
 
     return ovirt_rest_call_finish(result, err);
 }
+
+
+static gboolean ovirt_resource_refresh_async_cb(OvirtProxy *proxy,
+                                                RestProxyCall *call,
+                                                gpointer user_data,
+                                                GError **error)
+{
+    OvirtResource *resource;
+    RestXmlNode *root;
+    gboolean refreshed;
+
+    g_return_val_if_fail(REST_IS_PROXY_CALL(call), FALSE);
+    g_return_val_if_fail(OVIRT_IS_RESOURCE(user_data), FALSE);
+
+    root = ovirt_rest_xml_node_from_call(call);
+    resource = OVIRT_RESOURCE(user_data);
+    refreshed = ovirt_resource_init_from_xml(resource, root, error);
+
+    rest_xml_node_unref(root);
+
+    return refreshed;
+}
+
+void ovirt_resource_refresh_async(OvirtResource *resource,
+                                  OvirtProxy *proxy,
+                                  GCancellable *cancellable,
+                                  GAsyncReadyCallback callback,
+                                  gpointer user_data)
+{
+    OvirtResourceRestCall *call;
+    GSimpleAsyncResult *result;
+
+    g_return_if_fail(OVIRT_IS_RESOURCE(resource));
+    g_return_if_fail(OVIRT_IS_PROXY(proxy));
+    g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
+    result = g_simple_async_result_new(G_OBJECT(resource), callback,
+                                       user_data,
+                                       ovirt_resource_refresh_async);
+    call = ovirt_resource_rest_call_new(REST_PROXY(proxy),
+                                        OVIRT_RESOURCE(resource));
+    /* FIXME: to set or not to set ?? */
+    rest_proxy_call_add_header(REST_PROXY_CALL(call),
+                               "All-Content", "true");
+    rest_proxy_call_set_method(REST_PROXY_CALL(call), "GET");
+    ovirt_rest_call_async(OVIRT_REST_CALL(call), result, cancellable,
+                          ovirt_resource_refresh_async_cb, resource,
+                          NULL);
+    g_object_unref(G_OBJECT(call));
+}
+
+
+gboolean ovirt_resource_refresh_finish(OvirtResource *resource,
+                                       GAsyncResult *result,
+                                       GError **err)
+{
+    g_return_val_if_fail(OVIRT_IS_RESOURCE(resource), FALSE);
+    g_return_val_if_fail(g_simple_async_result_is_valid(result,
+                                                        G_OBJECT(resource),
+                                                        ovirt_resource_refresh_async),
+                         FALSE);
+
+    return ovirt_rest_call_finish(result, err);
+}
+
+
+gboolean ovirt_resource_refresh(OvirtResource *resource,
+                                OvirtProxy *proxy,
+                                GError **error)
+{
+    RestXmlNode *root_node;
+    gboolean success;
+
+    g_return_val_if_fail(OVIRT_IS_RESOURCE(resource), FALSE);
+    g_return_val_if_fail(OVIRT_IS_PROXY(proxy), FALSE);
+
+    root_node = ovirt_resource_rest_call(resource, proxy, "GET", error);
+    if (root_node == NULL) {
+        return FALSE;
+    }
+
+    success = ovirt_resource_init_from_xml(resource, root_node, error);
+    rest_xml_node_unref(root_node);
+
+    return success;
+}
diff --git a/govirt/ovirt-resource.h b/govirt/ovirt-resource.h
index 805d53e..23e019c 100644
--- a/govirt/ovirt-resource.h
+++ b/govirt/ovirt-resource.h
@@ -78,6 +78,18 @@ gboolean ovirt_resource_update_finish(OvirtResource *resource,
                                       GAsyncResult *result,
                                       GError **err);
 
+gboolean ovirt_resource_refresh(OvirtResource *resource,
+                                OvirtProxy *proxy,
+                                GError **error);
+void ovirt_resource_refresh_async(OvirtResource *resource,
+                                  OvirtProxy *proxy,
+                                  GCancellable *cancellable,
+                                  GAsyncReadyCallback callback,
+                                  gpointer user_data);
+gboolean ovirt_resource_refresh_finish(OvirtResource *resource,
+                                       GAsyncResult *result,
+                                       GError **err);
+
 G_END_DECLS
 
 #endif /* __OVIRT_RESOURCE_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]