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



commit 0e6605c4b7c0ba02754a763144dccc7aadc7df8f
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   | 33 ++++++++++++++++++++++++++++-----
 2 files changed, 29 insertions(+), 5 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 a6cc1c2d..c13d045e 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);
 
@@ -407,11 +414,6 @@ public void setup_ui (AppWindow window) {
         this.window = 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);
-
         os_db.get_all_media_urls_as_store.begin ((db, result) => {
             try {
                 media_urls_store = os_db.get_all_media_urls_as_store.end (result);
@@ -462,6 +464,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]