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@xxxxxxxxxx> > --- > 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@xxxxxxxxxx> Christophe
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list