[virt-tools-list] [PATCH virt-viewer 1/9] ovirt-foreign-menu: Set new ISO name using GTask API

Christophe Fergeau cfergeau at redhat.com
Wed Jan 18 16:31:05 UTC 2017


On Wed, Jan 18, 2017 at 12:16:52PM -0200, Eduardo Lima (Etrunko) wrote:
> This is done with the new ovirt_foreign_menu_set_current_iso_name_async
> function.
> 
> Signed-off-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>
> ---
>  src/ovirt-foreign-menu.c | 117 ++++++++++++++++++++++++++++++++++-------------
>  src/ovirt-foreign-menu.h |  10 ++++
>  2 files changed, 96 insertions(+), 31 deletions(-)
> 
> diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c
> index a51f2c9..366259a 100644
> --- a/src/ovirt-foreign-menu.c
> +++ b/src/ovirt-foreign-menu.c
> @@ -344,38 +344,102 @@ menu_item_set_active_no_signal(GtkMenuItem *menuitem,
>  }
>  
>  
> -static void updated_cdrom_cb(GObject *source_object,
> -                             GAsyncResult *result,
> -                             gpointer user_data)
> +static void iso_name_set_cb(GObject *source_object,
> +                            GAsyncResult *result,
> +                            gpointer user_data)
>  {
>      GError *error = NULL;
> -    OvirtForeignMenu *foreign_menu;
> +    GTask *task = G_TASK(user_data);
> +    OvirtForeignMenu *foreign_menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task));
>      gboolean updated;
>  
> -    foreign_menu = OVIRT_FOREIGN_MENU(user_data);
>      updated = ovirt_cdrom_update_finish(OVIRT_CDROM(source_object),
>                                          result, &error);
> -    g_debug("Finished updating cdrom content");
>      if (updated) {
> +        g_debug("Finished updating cdrom content: %s", foreign_menu->priv->next_iso_name);
>          g_free(foreign_menu->priv->current_iso_name);
>          foreign_menu->priv->current_iso_name = foreign_menu->priv->next_iso_name;
>          foreign_menu->priv->next_iso_name = NULL;
> -        g_object_notify(G_OBJECT(foreign_menu), "file");
> +        g_task_return_boolean(task, TRUE);
> +        goto end;
> +    }
> +
> +    /* Reset old state back as we were not successful in switching to
> +     * the new ISO */
> +    g_debug("setting OvirtCdrom:file back to '%s'",
> +            foreign_menu->priv->current_iso_name);
> +    g_object_set(foreign_menu->priv->cdrom, "file",
> +                 foreign_menu->priv->current_iso_name, NULL);
> +    g_clear_pointer(&foreign_menu->priv->next_iso_name, g_free);
> +
> +    if (error != NULL) {
> +        g_warning("failed to update cdrom resource: %s", error->message);
> +        g_task_return_error(task, error);
>      } else {
> -        /* Reset old state back as we were not successful in switching to
> -         * the new ISO */
> -        const char *current_file = foreign_menu->priv->current_iso_name;
> +        g_warn_if_reached();
> +        g_task_return_new_error(task, OVIRT_ERROR, OVIRT_ERROR_FAILED,
> +                                "failed to update cdrom resource");
> +    }
>  
> -        if (error != NULL) {
> -            g_warning("failed to update cdrom resource: %s", error->message);
> -            g_clear_error(&error);
> -        }
> -        g_debug("setting OvirtCdrom:file back to '%s'",
> -                current_file?current_file:NULL);
> -        g_object_set(foreign_menu->priv->cdrom, "file", current_file, NULL);
> +end:
> +    g_object_unref(task);
> +}
> +
> +
> +void ovirt_foreign_menu_set_current_iso_name_async(OvirtForeignMenu *foreign_menu,
> +                                                   const char *name,
> +                                                   GCancellable *cancellable,
> +                                                   GAsyncReadyCallback callback,
> +                                                   gpointer user_data)
> +{
> +    GTask *task;
> +
> +    g_return_if_fail(foreign_menu->priv->cdrom != NULL);
> +    g_return_if_fail(foreign_menu->priv->next_iso_name == NULL);
> +
> +    if (name) {
> +        g_debug("Updating VM cdrom image to '%s'", name);
> +        foreign_menu->priv->next_iso_name = g_strdup(name);
> +    } else {
> +        g_debug("Removing current cdrom image");
> +        foreign_menu->priv->next_iso_name = NULL;
>      }
>  
> -    g_clear_pointer(&foreign_menu->priv->next_iso_name, g_free);
> +    g_object_set(foreign_menu->priv->cdrom,
> +                 "file", name,
> +                 NULL);
> +
> +    task = g_task_new(foreign_menu, cancellable, callback, user_data);
> +    ovirt_cdrom_update_async(foreign_menu->priv->cdrom, TRUE,
> +                             foreign_menu->priv->proxy, NULL,
> +                             iso_name_set_cb, task);

I think you can pass 'cancellable' to that method.

Apart from this small thing, looks good to me,

Acked-by: Christophe Fergeau <cfergeau at redhat.com>

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/virt-tools-list/attachments/20170118/9211be0b/attachment.sig>


More information about the virt-tools-list mailing list