[gnome-boxes/download-oses-page: 11/12] wizard-source: Hardcode the front-page downloads list



commit 9eeffe62fa2a1333d2f255511bf9b7158444e814
Author: Felipe Borges <felipeborges gnome org>
Date:   Wed Jan 24 12:37:03 2018 +0100

    wizard-source: Hardcode the front-page downloads list

 data/ui/wizard-source.ui |  1 +
 src/wizard-source.vala   | 32 ++++++++++++++++++++++++++++----
 2 files changed, 29 insertions(+), 4 deletions(-)
---
diff --git a/data/ui/wizard-source.ui b/data/ui/wizard-source.ui
index 47dab2c9..7565317c 100644
--- a/data/ui/wizard-source.ui
+++ b/data/ui/wizard-source.ui
@@ -49,6 +49,7 @@
         <child>
           <object class="BoxesWizardScrolled" id="downloads_scrolled">
             <property name="visible">False</property>
+            <signal name="show" handler="on_downloads_scrolled_shown"/>
           </object>
         </child>
 
diff --git a/src/wizard-source.vala b/src/wizard-source.vala
index 09190bd8..10a6c813 100644
--- a/src/wizard-source.vala
+++ b/src/wizard-source.vala
@@ -312,6 +312,12 @@ private void on_notify_estimated_load_progress () {
 
     public string filename { get; set; }
 
+    private string[] recommended_downloads = {
+        "http://ubuntu.com/ubuntu/16.04";,
+        "http://opensuse.org/opensuse/42.2";,
+        "http://fedoraproject.org/fedora/27";,
+    };
+
     public bool download_required {
         get {
             string scheme = Uri.parse_scheme (uri);
@@ -383,6 +389,7 @@ private void on_notify_estimated_load_progress () {
 
         downloads_scrolled.setup (num_visible);
         downloads_vbox = downloads_scrolled.vbox;
+        downloads_vbox.row_activated.connect (on_downloadable_entry_clicked);
 
         media_scrolled.bind_property ("visible", downloads_scrolled, "visible", BindingFlags.INVERT_BOOLEAN);
 
@@ -408,10 +415,6 @@ public void setup_ui (AppWindow window) {
 
         var os_db = media_manager.os_db;
 
-        var available_downloads_model = new GLib.ListStore (typeof (Osinfo.Media));
-        downloads_vbox.bind_model (available_downloads_model, create_downloadable_entry);
-        downloads_vbox.row_activated.connect (on_downloadable_entry_clicked);
-
         // We need a Shadowman logo and libosinfo mandates that we specify an
         // OsinfoOs to get a logo. However, we don't have an OsinfoOs to begin
         // with, and by the time we get one from the Red Hat developer portal
@@ -441,6 +444,27 @@ public void setup_ui (AppWindow window) {
         });
     }
 
+    [GtkCallback]
+    private void on_downloads_scrolled_shown () {
+        var os_db = media_manager.os_db;
+        foreach (var os_id in recommended_downloads) {
+            os_db.get_os_by_id.begin (os_id, (obj, res) => {
+                try {
+                    var os = os_db.get_os_by_id.end (res);
+
+                    // TODO: Select the desktop/workstation variant.
+                    var media = os.get_media_list ().get_nth (0) as Osinfo.Media;
+                    var entry = create_downloadable_entry (media);
+
+                    downloads_vbox.insert (entry, -1);
+                } catch (OSDatabaseError error) {
+                    warning ("Failed to find OS with ID '%s': %s", os_id, error.message);
+                    return;
+                }
+            });
+        }
+    }
+
     private Gtk.Widget create_downloadable_entry (Object item) {
         var media = item as Osinfo.Media;
 


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