[gnome-boxes] wizard: Display OS info & logo ASAP during preparation



commit cc4a8bb5607bc11d62de93fcb83a038d054d9fde
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Mon Dec 17 04:41:07 2012 +0200

    wizard: Display OS info & logo ASAP during preparation
    
    https://bugzilla.gnome.org/show_bug.cgi?id=690321

 src/media-manager.vala |   22 ++++++++++++++++------
 src/wizard.vala        |   33 +++++++++++++++++----------------
 2 files changed, 33 insertions(+), 22 deletions(-)
---
diff --git a/src/media-manager.vala b/src/media-manager.vala
index 6c00adf..877b6e5 100644
--- a/src/media-manager.vala
+++ b/src/media-manager.vala
@@ -12,6 +12,8 @@ private class Boxes.MediaManager : Object {
     public OSDatabase os_db { get; private set; }
     public Client client { get; private set; }
 
+    public delegate void InstallerRecognized (Osinfo.Media os_media, Osinfo.Os os);
+
     private Sparql.Connection connection;
 
     public static MediaManager get_instance () {
@@ -21,11 +23,13 @@ private class Boxes.MediaManager : Object {
         return media_manager;
     }
 
-    public async InstallerMedia create_installer_media_for_path (string       path,
-                                                                 Cancellable? cancellable) throws GLib.Error {
+    public async InstallerMedia create_installer_media_for_path
+                                (string               path,
+                                 InstallerRecognized? on_installer_recognized = null,
+                                 Cancellable?         cancellable = null) throws GLib.Error {
         var media = yield InstallerMedia.create_for_path (path, this, cancellable);
 
-        return yield create_installer_media_from_media (media);
+        return yield create_installer_media_from_media (media, on_installer_recognized, progress);
     }
 
     public async InstallerMedia create_installer_media_from_config (GVirConfig.Domain config) {
@@ -76,7 +80,7 @@ private class Boxes.MediaManager : Object {
 
             var path = device.get_device_file ();
             try {
-                var media = yield create_installer_media_for_path (path, null);
+                var media = yield create_installer_media_for_path (path);
 
                 list.append (media);
             } catch (GLib.Error error) {
@@ -137,7 +141,7 @@ private class Boxes.MediaManager : Object {
             throw new Boxes.Error.INVALID (_("No such file %s").printf (path));
 
         if (label == null || os_id == null || media_id == null)
-            return yield create_installer_media_for_path (path, null);
+            return yield create_installer_media_for_path (path);
 
         var os = yield os_db.get_os_by_id (os_id);
         var os_media = os_db.get_media_by_id (os, media_id);
@@ -147,10 +151,16 @@ private class Boxes.MediaManager : Object {
         return yield create_installer_media_from_media (media);
     }
 
-    private async InstallerMedia create_installer_media_from_media (InstallerMedia media) throws GLib.Error {
+    private async InstallerMedia create_installer_media_from_media
+                                (InstallerMedia       media,
+                                 InstallerRecognized? on_installer_recognized = null,
+                                 Cancellable?         cancellable = null) throws GLib.Error {
         if (media.os == null)
             return media;
 
+        if (on_installer_recognized != null)
+            on_installer_recognized (media.os_media, media.os);
+
         var install_scripts = media.os.get_install_script_list ();
         var filter = new Filter ();
         filter.add_constraint (INSTALL_SCRIPT_PROP_PROFILE, INSTALL_SCRIPT_PROFILE_DESKTOP);
diff --git a/src/wizard.vala b/src/wizard.vala
index 05c8695..39add96 100644
--- a/src/wizard.vala
+++ b/src/wizard.vala
@@ -266,7 +266,19 @@ private class Boxes.Wizard: Boxes.UI {
 
     private void prepare_for_installer (string path) throws GLib.Error {
         next_button.sensitive = false;
-        media_manager.create_installer_media_for_path.begin (path, null, on_installer_media_instantiated);
+
+        prep_media_label.label = _("Unknown installer media");
+        prep_status_label.label = _("Analyzing..."); // Translators: Analyzing installer media
+
+        media_manager.create_installer_media_for_path.begin (path,
+                                                             on_installer_recognized,
+                                                             null,
+                                                             on_installer_media_instantiated);
+    }
+
+    private void on_installer_recognized (Osinfo.Media os_media, Osinfo.Os os) {
+        prep_media_label.label = os.name;
+        Downloader.fetch_os_logo.begin (installer_image, os, 128);
     }
 
     private void on_installer_media_instantiated (Object? source_object, AsyncResult result) {
@@ -275,19 +287,8 @@ private class Boxes.Wizard: Boxes.UI {
         try {
             var install_media = media_manager.create_installer_media_for_path.end (result);
             vm_creator = new VMCreator (install_media);
-            if (install_media.os == null) {
-                 prep_progress.fraction = 1.0;
-                 page = WizardPage.SETUP;
-
-                return;
-            }
-
-            Downloader.fetch_os_logo.begin (installer_image, install_media.os, 128, (object, result) => {
-                Downloader.fetch_os_logo.end (result);
-
-                prep_progress.fraction = 1.0;
-                page = WizardPage.SETUP;
-            });
+            prep_progress.fraction = 1.0;
+            page = WizardPage.SETUP;
         } catch (IOError.CANCELLED cancel_error) { // We did this, so no warning!
         } catch (GLib.Error error) {
             debug("Failed to analyze installer image: %s", error.message);
@@ -578,11 +579,11 @@ private class Boxes.Wizard: Boxes.UI {
         var prep_vbox = new Gtk.VBox (true, 10);
         prep_vbox.valign = Gtk.Align.CENTER;
         hbox.pack_start (prep_vbox, true, true);
-        prep_media_label = new Gtk.Label (_("Unknown installer media"));
+        prep_media_label = new Gtk.Label (null);
         prep_media_label.get_style_context ().add_class ("boxes-wizard-media-os-label");
         prep_media_label.halign = Gtk.Align.START;
         prep_vbox.pack_start (prep_media_label, false, false);
-        prep_status_label = new Gtk.Label (_("Analyzing...")); // Translators: Analyzing installer media
+        prep_status_label = new Gtk.Label (null);
         prep_status_label.get_style_context ().add_class ("boxes-wizard-label");
         prep_status_label.halign = Gtk.Align.START;
         prep_vbox.pack_start (prep_status_label, false, false);



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