diff options
author | Christophe Fergeau <cfergeau@redhat.com> | 2015-07-24 13:58:09 +0200 |
---|---|---|
committer | Christophe Fergeau <cfergeau@redhat.com> | 2015-08-06 18:30:02 +0200 |
commit | 23bb59e459177c3928c53a607c5082a3b7c0257b (patch) | |
tree | dc75f6e8045dc91af6ff74a50bfb77f95f85182e /govirt | |
parent | a42cb029bc21ffef2dd45e5e088c3c75835237ce (diff) |
proxy: Reimplement deprecated API using newer API
ovirt_proxy_fetch_vms{_async,}/ovirt_proxy_get_vms/ovirt_proxy_lookup_vm
can be reimplemented using the newer OvirtApi API.
While these methods are deprecated, using non-deprecated API to
implement them rather than duplicating the code from the non-deprecated
APIs should be an improvement from a maintainability point of view.
Diffstat (limited to 'govirt')
-rw-r--r-- | govirt/ovirt-proxy-deprecated.c | 141 | ||||
-rw-r--r-- | govirt/ovirt-proxy-private.h | 1 | ||||
-rw-r--r-- | govirt/ovirt-proxy.c | 5 |
3 files changed, 67 insertions, 80 deletions
diff --git a/govirt/ovirt-proxy-deprecated.c b/govirt/ovirt-proxy-deprecated.c index 0e8f9a0..34394bc 100644 --- a/govirt/ovirt-proxy-deprecated.c +++ b/govirt/ovirt-proxy-deprecated.c @@ -28,57 +28,54 @@ #include <rest/rest-xml-node.h> - -static gboolean -ovirt_proxy_parse_vms_xml(OvirtProxy *proxy, RestXmlNode *root, GError **error) -{ - OvirtCollection *collection; - GHashTable *resources; - - collection = ovirt_collection_new_from_xml(root, OVIRT_TYPE_COLLECTION, "vms", - OVIRT_TYPE_VM, "vm", error); - if (collection == NULL) { - return FALSE; - } - - resources = ovirt_collection_get_resources(collection); - - if (proxy->priv->vms != NULL) { - g_hash_table_unref(proxy->priv->vms); - proxy->priv->vms = NULL; - } - if (resources != NULL) { - proxy->priv->vms = g_hash_table_ref(resources); - } - - return TRUE; -} - - gboolean ovirt_proxy_fetch_vms(OvirtProxy *proxy, GError **error) { - RestXmlNode *vms_node; - - g_return_val_if_fail(OVIRT_IS_PROXY(proxy), FALSE); + OvirtCollection *vms; + OvirtApi *api; - vms_node = ovirt_proxy_get_collection_xml(proxy, "/ovirt-engine/api/vms", error); - if (vms_node == NULL) + api = ovirt_proxy_fetch_api(proxy, error); + if (api == NULL) return FALSE; - ovirt_proxy_parse_vms_xml(proxy, vms_node, error); - - rest_xml_node_unref(vms_node); + vms = ovirt_api_get_vms(api); + if (vms == NULL) + return FALSE; - return TRUE; + return ovirt_collection_fetch(vms, proxy, error); } -static gboolean fetch_vms_async_cb(OvirtProxy* proxy, - RestXmlNode *root_node, - gpointer user_data, - GError **error) +typedef struct { + GCancellable *cancellable; + GAsyncReadyCallback callback; + gpointer user_data; +} ApiAsyncData; + +static void fetch_api_async_cb(GObject *source_object, + GAsyncResult *result, + gpointer user_data) { - return ovirt_proxy_parse_vms_xml(proxy, root_node, error); + ApiAsyncData *data = user_data; + OvirtProxy *proxy = OVIRT_PROXY(source_object); + OvirtApi *api; + GError *error = NULL; + + api = ovirt_proxy_fetch_api_finish(proxy, result, &error); + if (api == NULL) { + g_simple_async_report_error_in_idle(source_object, + data->callback, data->user_data, + OVIRT_ERROR, OVIRT_ERROR_FAILED, + "Could not fetch API endpoint"); + } else { + OvirtCollection *vms; + + vms = ovirt_api_get_vms(api); + g_return_if_fail(vms != NULL); + + ovirt_collection_fetch_async(vms, proxy, data->cancellable, + data->callback, data->user_data); + } + g_free(data); } /** @@ -92,22 +89,31 @@ void ovirt_proxy_fetch_vms_async(OvirtProxy *proxy, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *result; + OvirtApi *api; + OvirtCollection *vms; 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(proxy), callback, - user_data, - /* Not using the _async function - * name as is customary as this - * would trigger a deprecation - * warning */ - fetch_vms_async_cb); - ovirt_proxy_get_collection_xml_async(proxy, "/ovirt-engine/api/vms", result, cancellable, - fetch_vms_async_cb, NULL, NULL); + api = ovirt_proxy_get_api(proxy); + if (api == NULL) { + ApiAsyncData *data = g_new0(ApiAsyncData, 1); + data->cancellable = cancellable; + data->callback = callback; + data->user_data = user_data; + ovirt_proxy_fetch_api_async(proxy, cancellable, + fetch_api_async_cb, data); + return; + } + + vms = ovirt_api_get_vms(api); + g_return_if_fail(vms != NULL); + + return ovirt_collection_fetch_async(vms, proxy, cancellable, + callback, user_data); } + /** * ovirt_proxy_fetch_vms_finish: * @proxy: a #OvirtProxy @@ -124,20 +130,14 @@ ovirt_proxy_fetch_vms_finish(OvirtProxy *proxy, GError **err) { g_return_val_if_fail(OVIRT_IS_PROXY(proxy), NULL); - g_return_val_if_fail(g_simple_async_result_is_valid(result, G_OBJECT(proxy), - fetch_vms_async_cb), - NULL); if (g_simple_async_result_propagate_error(G_SIMPLE_ASYNC_RESULT(result), err)) return NULL; - if (proxy->priv->vms != NULL) { - return g_hash_table_get_values(proxy->priv->vms); - } - - return NULL; + return ovirt_proxy_get_vms_internal(proxy); } + /** * ovirt_proxy_lookup_vm: * @proxy: a #OvirtProxy @@ -152,22 +152,21 @@ ovirt_proxy_fetch_vms_finish(OvirtProxy *proxy, */ OvirtVm *ovirt_proxy_lookup_vm(OvirtProxy *proxy, const char *vm_name) { - OvirtVm *vm; + OvirtApi *api; + OvirtCollection *vm_collection; g_return_val_if_fail(OVIRT_IS_PROXY(proxy), NULL); g_return_val_if_fail(vm_name != NULL, NULL); - if (proxy->priv->vms == NULL) { + api = ovirt_proxy_get_api(proxy); + if (api == NULL) return NULL; - } - vm = g_hash_table_lookup(proxy->priv->vms, vm_name); - - if (vm == NULL) { + vm_collection = ovirt_api_get_vms(api); + if (vm_collection == NULL) return NULL; - } - return g_object_ref(vm); + return OVIRT_VM(ovirt_collection_lookup_resource(vm_collection, vm_name)); } @@ -186,11 +185,5 @@ OvirtVm *ovirt_proxy_lookup_vm(OvirtProxy *proxy, const char *vm_name) */ GList *ovirt_proxy_get_vms(OvirtProxy *proxy) { - g_return_val_if_fail(OVIRT_IS_PROXY(proxy), NULL); - - if (proxy->priv->vms != NULL) { - return g_hash_table_get_values(proxy->priv->vms); - } - - return NULL; + return ovirt_proxy_get_vms_internal(proxy); } diff --git a/govirt/ovirt-proxy-private.h b/govirt/ovirt-proxy-private.h index 45c84b0..19c9763 100644 --- a/govirt/ovirt-proxy-private.h +++ b/govirt/ovirt-proxy-private.h @@ -32,7 +32,6 @@ G_BEGIN_DECLS struct _OvirtProxyPrivate { - GHashTable *vms; char *tmp_ca_file; gboolean admin_mode; OvirtApi *api; diff --git a/govirt/ovirt-proxy.c b/govirt/ovirt-proxy.c index 7241f11..fedaf81 100644 --- a/govirt/ovirt-proxy.c +++ b/govirt/ovirt-proxy.c @@ -770,11 +770,6 @@ ovirt_proxy_dispose(GObject *obj) { OvirtProxy *proxy = OVIRT_PROXY(obj); - if (proxy->priv->vms) { - g_hash_table_unref(proxy->priv->vms); - proxy->priv->vms = NULL; - } - if (proxy->priv->cookie_jar) { g_object_unref(G_OBJECT(proxy->priv->cookie_jar)); proxy->priv->cookie_jar = NULL; |