From 226e683cfabadcbd63a2b3e87a46ae5a67ad21e5 Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Nov 21 2017 10:24:19 +0000 Subject: Update to 3.27.1 Can't be built because: nothing provides libwoff2dec.so.1.0.1()(64bit) needed by webkitgtk4-devel-2.19.1-2.fc28.x86_64 --- diff --git a/gnome-boxes-3.26.1-rhel-developer-suite.patch b/gnome-boxes-3.26.1-rhel-developer-suite.patch deleted file mode 100644 index 1a6142d..0000000 --- a/gnome-boxes-3.26.1-rhel-developer-suite.patch +++ /dev/null @@ -1,1942 +0,0 @@ -From 751ec95e3517cb1221903da4fe6571d12ab75ca3 Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Mon, 11 Sep 2017 19:37:47 +0200 -Subject: [PATCH 01/18] os-database: Specify the OS corresponding to each URI - -In the following patch, we will use this to show the OS' logo while -waiting for its image to be downloaded. - -https://bugzilla.gnome.org/show_bug.cgi?id=777133 ---- - src/os-database.vala | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/os-database.vala b/src/os-database.vala -index d927e2940bf1..e5af73df3e35 100644 ---- a/src/os-database.vala -+++ b/src/os-database.vala -@@ -135,7 +135,7 @@ else if (release_b == null) - if (!yield ensure_db_loaded ()) - throw new OSDatabaseError.DB_LOADING_FAILED ("Failed to load OS database"); - -- var store = new Gtk.ListStore (1, typeof (string)); -+ var store = new Gtk.ListStore (2, typeof (string), typeof (Osinfo.Os)); - foreach (var entity in db.get_os_list ().get_elements ()) { - var os = entity as Os; - -@@ -146,7 +146,7 @@ else if (release_b == null) - Gtk.TreeIter iter; - - store.append (out iter); -- store.set (iter, 0, media.url); -+ store.set (iter, 0, media.url, 1, os); - } - } - } --- -2.13.6 - - -From 9947cb08c614751cc6ff52685138166fda3b7fd2 Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Mon, 11 Sep 2017 19:39:31 +0200 -Subject: [PATCH 02/18] wizard, wizard-source: Try to show a logo while - downloading - -https://bugzilla.gnome.org/show_bug.cgi?id=777133 ---- - src/wizard-source.vala | 20 +++++++++++++++++--- - src/wizard.vala | 6 ++++++ - 2 files changed, 23 insertions(+), 3 deletions(-) - -diff --git a/src/wizard-source.vala b/src/wizard-source.vala -index eb9988299425..8545363ce2d4 100644 ---- a/src/wizard-source.vala -+++ b/src/wizard-source.vala -@@ -128,6 +128,8 @@ public WizardMediaEntry (InstallerMedia media) { - - private Gtk.Box media_vbox; - -+ private Gtk.ListStore? media_urls_store; -+ - public MediaManager media_manager; - - public bool download_required { -@@ -139,6 +141,18 @@ public WizardMediaEntry (InstallerMedia media) { - } - } - -+ public Osinfo.Os? get_os_from_uri (string uri) { -+ Osinfo.Os? os = null; -+ -+ media_urls_store.foreach ((store, path, iter) => { -+ string? os_uri; -+ media_urls_store.get (iter, 0, out os_uri, 1, out os); -+ return os_uri == uri; -+ }); -+ -+ return os; -+ } -+ - private SourcePage _page; - public SourcePage page { - get { return _page; } -@@ -185,16 +199,16 @@ public void setup_ui (AppWindow window) { - var os_db = media_manager.os_db; - os_db.get_all_media_urls_as_store.begin ((db, result) => { - try { -- var url_store = os_db.get_all_media_urls_as_store.end (result); -+ media_urls_store = os_db.get_all_media_urls_as_store.end (result); - var completion = new Gtk.EntryCompletion (); - completion.text_column = 0; -- completion.model = url_store; -+ completion.model = media_urls_store; - weak Gtk.CellRendererText cell = completion.get_cells ().nth_data (0) as Gtk.CellRendererText; - cell.ellipsize = Pango.EllipsizeMode.MIDDLE; - completion.set_match_func ((store, key, iter) => { - string url; - -- url_store.get (iter, 0, out url); -+ media_urls_store.get (iter, 0, out url); - - return url.contains (key); - }); -diff --git a/src/wizard.vala b/src/wizard.vala -index c4cacb211d12..b13f7df38159 100644 ---- a/src/wizard.vala -+++ b/src/wizard.vala -@@ -403,6 +403,12 @@ private bool prepare (ActivityProgress progress) { - continue_button.sensitive = false; - download_media.begin (wizard_source.uri, progress); - -+ var os = wizard_source.get_os_from_uri (wizard_source.uri); -+ if (os == null) -+ debug ("Failed to find Osinfo.Os for %s", wizard_source.uri); -+ else -+ Downloader.fetch_os_logo.begin (installer_image, os, 128); -+ - return true; - } - --- -2.13.6 - - -From b052bd3ee983e80fe0cc9c99791b0a69dd3b1059 Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Wed, 13 Sep 2017 19:33:25 +0200 -Subject: [PATCH 03/18] os-database, wizard-source: Use named constants - -... instead of magic numbers. - -https://bugzilla.gnome.org/show_bug.cgi?id=787678 ---- - src/os-database.vala | 11 +++++++++-- - src/wizard-source.vala | 8 +++++--- - 2 files changed, 14 insertions(+), 5 deletions(-) - -diff --git a/src/os-database.vala b/src/os-database.vala -index e5af73df3e35..e595a37dc34d 100644 ---- a/src/os-database.vala -+++ b/src/os-database.vala -@@ -10,6 +10,13 @@ - } - - private class Boxes.OSDatabase : GLib.Object { -+ public enum MediaURLsColumns { -+ URL = 0, // string -+ OS = 1, // Osinfo.Os -+ -+ LAST -+ } -+ - private const int DEFAULT_VCPUS = 1; - private const int64 DEFAULT_RAM = 2 * (int64) GIBIBYTES; - -@@ -135,7 +142,7 @@ else if (release_b == null) - if (!yield ensure_db_loaded ()) - throw new OSDatabaseError.DB_LOADING_FAILED ("Failed to load OS database"); - -- var store = new Gtk.ListStore (2, typeof (string), typeof (Osinfo.Os)); -+ var store = new Gtk.ListStore (MediaURLsColumns.LAST, typeof (string), typeof (Osinfo.Os)); - foreach (var entity in db.get_os_list ().get_elements ()) { - var os = entity as Os; - -@@ -146,7 +153,7 @@ else if (release_b == null) - Gtk.TreeIter iter; - - store.append (out iter); -- store.set (iter, 0, media.url, 1, os); -+ store.set (iter, MediaURLsColumns.URL, media.url, MediaURLsColumns.OS, os); - } - } - } -diff --git a/src/wizard-source.vala b/src/wizard-source.vala -index 8545363ce2d4..7beef6c92603 100644 ---- a/src/wizard-source.vala -+++ b/src/wizard-source.vala -@@ -146,7 +146,9 @@ public WizardMediaEntry (InstallerMedia media) { - - media_urls_store.foreach ((store, path, iter) => { - string? os_uri; -- media_urls_store.get (iter, 0, out os_uri, 1, out os); -+ media_urls_store.get (iter, -+ OSDatabase.MediaURLsColumns.URL, out os_uri, -+ OSDatabase.MediaURLsColumns.OS, out os); - return os_uri == uri; - }); - -@@ -201,14 +203,14 @@ public void setup_ui (AppWindow window) { - try { - media_urls_store = os_db.get_all_media_urls_as_store.end (result); - var completion = new Gtk.EntryCompletion (); -- completion.text_column = 0; -+ completion.text_column = OSDatabase.MediaURLsColumns.URL; - completion.model = media_urls_store; - weak Gtk.CellRendererText cell = completion.get_cells ().nth_data (0) as Gtk.CellRendererText; - cell.ellipsize = Pango.EllipsizeMode.MIDDLE; - completion.set_match_func ((store, key, iter) => { - string url; - -- media_urls_store.get (iter, 0, out url); -+ media_urls_store.get (iter, OSDatabase.MediaURLsColumns.URL, out url); - - return url.contains (key); - }); --- -2.13.6 - - -From 83ffa3ca023a61df665f6ebfd71fa3e36ee1c310 Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Wed, 23 Aug 2017 20:29:10 +0200 -Subject: [PATCH 04/18] wizard-source: Group the sources into local files, and - everything else - -... by swapping the order of the "Enter URL" and "Select a file" -buttons. - -https://bugzilla.gnome.org/show_bug.cgi?id=786679 ---- - data/ui/wizard-source.ui | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/data/ui/wizard-source.ui b/data/ui/wizard-source.ui -index d85376c2084d..03f812fbe164 100644 ---- a/data/ui/wizard-source.ui -+++ b/data/ui/wizard-source.ui -@@ -39,14 +39,14 @@ - - - -- -+ - True -- -+ - - -- -+ - True - 10 - 10 -@@ -55,11 +55,11 @@ - 20 - horizontal - -- -+ - True - start - True -- _Enter URL -+ _Select a file - - - True -@@ -67,7 +67,7 @@ - - - -- -+ - True - - -@@ -82,14 +82,14 @@ - - - -- -+ - True -- -+ - - -- -+ - True - 10 - 10 -@@ -98,11 +98,11 @@ - 20 - horizontal - -- -+ - True - start - True -- _Select a file -+ _Enter URL - - - True -@@ -110,7 +110,7 @@ - - - -- -+ - True - - --- -2.13.6 - - -From c9f875e962f74bdf021b5761b375a51844ab2de4 Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Thu, 24 Aug 2017 15:44:25 +0200 -Subject: [PATCH 05/18] wizard-source: Separate the groups of sources using - headings - -This increases the height of the WizardWindow, so the WizardScrolled -needs to scroll more aggressively. - -Note that the vertical height of the window is still more than what it -used to be. That will be addressed in the following patch by moving the -file selection button next to the heading label. - -https://bugzilla.gnome.org/show_bug.cgi?id=786679 ---- - data/ui/wizard-source.ui | 29 ++++++++++++++++++++++++++++- - src/wizard-source.vala | 2 +- - 2 files changed, 29 insertions(+), 2 deletions(-) - -diff --git a/data/ui/wizard-source.ui b/data/ui/wizard-source.ui -index 03f812fbe164..6a0f0aed29ca 100644 ---- a/data/ui/wizard-source.ui -+++ b/data/ui/wizard-source.ui -@@ -26,7 +26,7 @@ - Insert operating system installation media or select a source below - True - start -- 20 -+ 30 - - - False -@@ -35,6 +35,19 @@ - - - -+ -+ True -+ start -+ 20 -+ True -+ Downloaded -+ -+ -+ -+ -+ -+ -+ - - - -@@ -82,6 +95,20 @@ - - - -+ -+ True -+ start -+ 30 -+ 20 -+ True -+ Available to Download -+ -+ -+ -+ -+ -+ -+ - - True - -diff --git a/src/wizard-source.vala b/src/wizard-source.vala -index 7beef6c92603..1abfd480b8ca 100644 ---- a/src/wizard-source.vala -+++ b/src/wizard-source.vala -@@ -183,7 +183,7 @@ public WizardMediaEntry (InstallerMedia media) { - media_manager = MediaManager.get_instance (); - main_vbox.grab_focus (); - -- var num_visible = (Gdk.Screen.height () > 800)? 5 : 4; -+ var num_visible = (Gdk.Screen.height () > 800)? 3 : 2; - media_scrolled.setup (num_visible); - media_vbox = media_scrolled.vbox; - draw_as_css_box (url_entry_vbox); --- -2.13.6 - - -From a4b02c0f1a9e1e3d21f46bd23355aef1a3219e3e Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Thu, 7 Sep 2017 14:35:55 +0200 -Subject: [PATCH 06/18] wizard-source: Move the file selection button next to - the heading - -This reduces the vertical height of the window to approximately what -it was before the previous patch. - -https://bugzilla.gnome.org/show_bug.cgi?id=786679 ---- - data/ui/wizard-source.ui | 100 +++++++++++++++++++++++++---------------------- - 1 file changed, 54 insertions(+), 46 deletions(-) - -diff --git a/data/ui/wizard-source.ui b/data/ui/wizard-source.ui -index 6a0f0aed29ca..ce7d3c70d098 100644 ---- a/data/ui/wizard-source.ui -+++ b/data/ui/wizard-source.ui -@@ -35,59 +35,63 @@ - - - -- -+ - True -- start - 20 -- True -- Downloaded -- -- -- -- -- -- -- -- -- -- -- -- -- True -- -- -+ 50 -+ horizontal - -- -+ - True -- 10 -- 10 -- 20 -- 20 -- 20 -- horizontal -- -- -- True -- start -- True -- _Select a file -- -- -- True -- True -- -- -+ start -+ True -+ True -+ False -+ Downloaded -+ -+ -+ -+ -+ -+ True -+ True -+ -+ -+ -+ -+ True -+ False -+ - -- -+ - True -- -+ 10 -+ 10 -+ 50 -+ horizontal -+ -+ -+ True -+ start -+ True -+ _Select a file -+ -+ -+ True -+ True -+ -+ -+ -+ -+ True -+ -+ -+ -+ False -+ False -+ -+ - -- -- False -- False -- - - - -@@ -95,6 +99,10 @@ - - - -+ -+ -+ -+ - - True - start --- -2.13.6 - - -From 06f6552343e4c55feb10742a631f461f52146aa7 Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Tue, 29 Aug 2017 21:25:52 +0200 -Subject: [PATCH 07/18] wizard-source: Align each page separately, instead of - the whole widget - -In a following patch, we will add a separate page with a WebKitWebView -to let the user log into their Red Hat developer account. It should -expand to fill the whole dialog instead of being centre aligned like -the existing pages. Therefore, each page needs to be aligned -separately. - -https://bugzilla.gnome.org/show_bug.cgi?id=786679 ---- - data/ui/wizard-source.ui | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/data/ui/wizard-source.ui b/data/ui/wizard-source.ui -index ce7d3c70d098..19e1df37a165 100644 ---- a/data/ui/wizard-source.ui -+++ b/data/ui/wizard-source.ui -@@ -5,12 +5,12 @@ - True - slide-left-right - 400 -- True -- center - - - - -+ center -+ True - True - vertical - 0 -@@ -228,6 +228,8 @@ - - - -+ center -+ True - True - vertical - 0 --- -2.13.6 - - -From b7d9dd553038b2c72d9ea53255b2f3ff0bc76015 Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Tue, 29 Aug 2017 21:29:24 +0200 -Subject: [PATCH 08/18] wizard: Let the WizardSource expand if it wants to - -In a following patch, we will add a separate page with a WebKitWebView -to the WizardSource. When used, this page should expand to fill the -whole dialog instead of staying centre aligned like the existing pages. -Therefore, the WizardSource should be allowed to expand when it wants -to. - -https://bugzilla.gnome.org/show_bug.cgi?id=786679 ---- - data/ui/wizard.ui | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/data/ui/wizard.ui b/data/ui/wizard.ui -index 78a2943cbcde..e04437196ca0 100644 ---- a/data/ui/wizard.ui -+++ b/data/ui/wizard.ui -@@ -25,8 +25,8 @@ - - - -- False -- False -+ True -+ True - - - --- -2.13.6 - - -From c867b322882be8cd0d89ca025cb44118ffdedc98 Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Thu, 14 Sep 2017 18:42:54 +0200 -Subject: [PATCH 09/18] wizard, wizard-source: Don't align & margin - WizardSource - -In a following patch, we will add a separate page with a WebKitWebView -to the WizardSource. When used, this page should expand to fill the -whole dialog instead of staying centre aligned like the existing pages. -Therefore, each page in WizardSource needs to be margined and aligned -separately, which is already the case for the horizontal alignment. - -This fixes the vertical alignment and the horizontal margins. - -Note that this has a subtle effect on the layout of the WizardSource -pages. So far, WizardSource was vertically centred and url_menubox -was set to fill, and WizardSource was vertically taller than the URL -page. This meant that url_menubox would expand vertically to fill the -entire WizardSource, but due to its semantics as a vertically oriented -GtkBox, it's contents would stick to it's top edge. This gave the -GtkLabel and GtkEntry widgets in the page their slightly off-centred -positioning on the vertical axis. - -Moving the valign=CENTER from the WizardSource to url_menubox would -spoil the layout because it will force url_menubox to be strictly -centred and non-expanding. Therefore, top and bottom margins have been -used instead of alignment. The existing top margin was increased to -match that of the main page. - -To prevent the top edge of the widgets from jumping when changing -pages, the main page now has a similar layout as the URL page. It is -no longer centred and has a similarly off-centred positioning on the -vertical axis. However, this is much more subtle and barely -discernible. - -https://bugzilla.gnome.org/show_bug.cgi?id=786679 ---- - data/ui/wizard-source.ui | 6 +++++- - data/ui/wizard.ui | 3 --- - 2 files changed, 5 insertions(+), 4 deletions(-) - -diff --git a/data/ui/wizard-source.ui b/data/ui/wizard-source.ui -index 19e1df37a165..b16292a113d6 100644 ---- a/data/ui/wizard-source.ui -+++ b/data/ui/wizard-source.ui -@@ -14,6 +14,8 @@ - True - vertical - 0 -+ 10 -+ 10 - 30 - 30 - -+ -+ -+ -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/src/wizard-source.vala b/src/wizard-source.vala -index 1abfd480b8ca..27afcf9ffc39 100644 ---- a/src/wizard-source.vala -+++ b/src/wizard-source.vala -@@ -94,6 +94,112 @@ public WizardMediaEntry (InstallerMedia media) { - } - } - -+[GtkTemplate (ui = "/org/gnome/Boxes/ui/wizard-web-view.ui")] -+private class Boxes.WizardWebView : Gtk.Bin { -+ [GtkChild] -+ private Gtk.ProgressBar progress_bar; -+ [GtkChild] -+ private WebKit.WebView web_view; -+ -+ private uint hide_progress_bar_id; -+ private const uint progress_bar_id_timeout = 500; // 500ms -+ -+ construct { -+ var context = web_view.get_context (); -+ var language_names = GLib.Intl.get_language_names (); -+ context.set_preferred_languages (language_names); -+ } -+ -+ public WebKit.WebView view { -+ get { return web_view; } -+ } -+ -+ public override void dispose () { -+ if (hide_progress_bar_id != 0) { -+ GLib.Source.remove (hide_progress_bar_id); -+ hide_progress_bar_id = 0; -+ } -+ -+ base.dispose (); -+ } -+ -+ [GtkCallback] -+ private bool on_context_menu (WebKit.WebView web_view, -+ WebKit.ContextMenu context_menu, -+ Gdk.Event event, -+ WebKit.HitTestResult hit_test_result) { -+ var items_to_remove = new GLib.List (); -+ -+ foreach (var item in context_menu.get_items ()) { -+ var action = item.get_stock_action (); -+ if (action == WebKit.ContextMenuAction.GO_BACK || -+ action == WebKit.ContextMenuAction.GO_FORWARD || -+ action == WebKit.ContextMenuAction.DOWNLOAD_AUDIO_TO_DISK || -+ action == WebKit.ContextMenuAction.DOWNLOAD_IMAGE_TO_DISK || -+ action == WebKit.ContextMenuAction.DOWNLOAD_LINK_TO_DISK || -+ action == WebKit.ContextMenuAction.DOWNLOAD_VIDEO_TO_DISK || -+ action == WebKit.ContextMenuAction.OPEN_AUDIO_IN_NEW_WINDOW || -+ action == WebKit.ContextMenuAction.OPEN_FRAME_IN_NEW_WINDOW || -+ action == WebKit.ContextMenuAction.OPEN_IMAGE_IN_NEW_WINDOW || -+ action == WebKit.ContextMenuAction.OPEN_LINK_IN_NEW_WINDOW || -+ action == WebKit.ContextMenuAction.OPEN_VIDEO_IN_NEW_WINDOW || -+ action == WebKit.ContextMenuAction.RELOAD || -+ action == WebKit.ContextMenuAction.STOP) { -+ items_to_remove.prepend (item); -+ } -+ } -+ -+ foreach (var item in items_to_remove) { -+ context_menu.remove (item); -+ } -+ -+ var separators_to_remove = new GLib.List (); -+ WebKit.ContextMenuAction previous_action = WebKit.ContextMenuAction.NO_ACTION; // same as a separator -+ -+ foreach (var item in context_menu.get_items ()) { -+ var action = item.get_stock_action (); -+ if (action == WebKit.ContextMenuAction.NO_ACTION && action == previous_action) -+ separators_to_remove.prepend (item); -+ -+ previous_action = action; -+ } -+ -+ foreach (var item in separators_to_remove) { -+ context_menu.remove (item); -+ } -+ -+ var n_items = context_menu.get_n_items (); -+ return n_items == 0; -+ } -+ -+ [GtkCallback] -+ private void on_notify_estimated_load_progress () { -+ if (hide_progress_bar_id != 0) { -+ GLib.Source.remove (hide_progress_bar_id); -+ hide_progress_bar_id = 0; -+ } -+ -+ string? uri = web_view.get_uri (); -+ if (uri == null || uri == "about:blank") -+ return; -+ -+ var progress = web_view.get_estimated_load_progress (); -+ bool loading = web_view.is_loading; -+ -+ if (progress == 1.0 || !loading) { -+ hide_progress_bar_id = GLib.Timeout.add (progress_bar_id_timeout, () => { -+ progress_bar.hide (); -+ hide_progress_bar_id = 0; -+ return GLib.Source.REMOVE; -+ }); -+ } else { -+ progress_bar.show (); -+ } -+ -+ progress_bar.set_fraction (loading || progress == 1.0 ? progress : 0.0); -+ } -+} -+ - [GtkTemplate (ui = "/org/gnome/Boxes/ui/wizard-source.ui")] - private class Boxes.WizardSource: Gtk.Stack { - private const string[] page_names = { "main-page", "url-page" }; --- -2.13.6 - - -From df4503fd0aa224ecc948fa96074a4b9eb59fe89b Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Tue, 26 Sep 2017 20:02:20 +0200 -Subject: [PATCH 17/18] wizard: Rename a method - -In a following patch, this method will be used to update the back -button in addition to the next button. - -https://bugzilla.gnome.org/show_bug.cgi?id=786679 ---- - src/wizard.vala | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/wizard.vala b/src/wizard.vala -index 64eb89bfac24..5c051af3e62a 100644 ---- a/src/wizard.vala -+++ b/src/wizard.vala -@@ -138,7 +138,7 @@ - visible_child_name = page_names[value]; - - if (value == WizardPage.SOURCE) -- wizard_source_update_next (); -+ wizard_source_update_buttons (); - } - } - -@@ -153,7 +153,7 @@ private ActivityProgress create_preparation_progress () { - return progress; - } - -- private void wizard_source_update_next () { -+ private void wizard_source_update_buttons () { - if (page != WizardPage.SOURCE) - return; - -@@ -188,9 +188,9 @@ private void wizard_source_update_next () { - - construct { - media_manager = MediaManager.get_instance (); -- wizard_source.notify["page"].connect(wizard_source_update_next); -- wizard_source.notify["selected"].connect(wizard_source_update_next); -- wizard_source.url_entry.changed.connect (wizard_source_update_next); -+ wizard_source.notify["page"].connect(wizard_source_update_buttons); -+ wizard_source.notify["selected"].connect(wizard_source_update_buttons); -+ wizard_source.url_entry.changed.connect (wizard_source_update_buttons); - notify["ui-state"].connect (ui_state_changed); - - wizard_source.activated.connect(() => { --- -2.13.6 - - -From e308a755332de61825badab6afc54363a22702df Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Thu, 24 Aug 2017 18:19:50 +0200 -Subject: [PATCH 18/18] wizard, wizard-source: Support gratis RHEL boxes - -Since March 2016, it is possible to obtain an unsupported copy of Red -Hat Enterprise Linux (or RHEL) for gratis [1] that's covered by the -RHEL Developer Suite subscription. This makes it easier to set up such -VMs by teaching the wizard how to download the ISOs. - -[1] https://developers.redhat.com/blog/2016/03/31/no-cost-rhel-developer-subscription-now-available/ - -https://bugzilla.gnome.org/show_bug.cgi?id=786679 ---- - data/ui/wizard-source.ui | 105 ++++++++++++++ - src/wizard-source.vala | 356 ++++++++++++++++++++++++++++++++++++++++++++++- - src/wizard.vala | 35 ++++- - 3 files changed, 489 insertions(+), 7 deletions(-) - -diff --git a/data/ui/wizard-source.ui b/data/ui/wizard-source.ui -index b16292a113d6..b4054d98f52b 100644 ---- a/data/ui/wizard-source.ui -+++ b/data/ui/wizard-source.ui -@@ -119,6 +119,78 @@ - - - -+ -+ True -+ -+ -+ -+ -+ True -+ 15 -+ 15 -+ 20 -+ horizontal -+ -+ -+ 0 -+ True -+ 64 -+ -+ -+ False -+ False -+ -+ -+ -+ -+ True -+ True -+ vertical -+ -+ -+ True -+ end -+ start -+ end -+ True -+ Red Hat Enterprise Linux -+ -+ -+ True -+ True -+ -+ -+ -+ -+ True -+ end -+ start -+ start -+ Available with a free Red Hat developer account -+ -+ -+ -+ True -+ True -+ -+ -+ -+ -+ True -+ True -+ -+ -+ -+ -+ -+ -+ -+ - - True - -@@ -227,6 +299,39 @@ - - - -+ -+ -+ -+ True -+ -+ -+ center -+ center -+ True -+ 32 -+ 32 -+ -+ -+ spinner -+ -+ -+ -+ -+ True -+ True -+ True -+ -+ -+ web-view -+ -+ -+ -+ -+ -+ rhel-web-view-page -+ -+ -+ - - - -diff --git a/src/wizard-source.vala b/src/wizard-source.vala -index 27afcf9ffc39..4b54686748e4 100644 ---- a/src/wizard-source.vala -+++ b/src/wizard-source.vala -@@ -2,6 +2,7 @@ - - private enum Boxes.SourcePage { - MAIN, -+ RHEL_WEB_VIEW, - URL, - - LAST, -@@ -202,7 +203,7 @@ private void on_notify_estimated_load_progress () { - - [GtkTemplate (ui = "/org/gnome/Boxes/ui/wizard-source.ui")] - private class Boxes.WizardSource: Gtk.Stack { -- private const string[] page_names = { "main-page", "url-page" }; -+ private const string[] page_names = { "main-page", "rhel-web-view-page", "url-page" }; - - public Gtk.Widget? selected { get; set; } - public string uri { -@@ -229,6 +230,16 @@ private void on_notify_estimated_load_progress () { - private Gtk.Button libvirt_sys_import_button; - [GtkChild] - private Gtk.Label libvirt_sys_import_label; -+ [GtkChild] -+ private Gtk.Button install_rhel_button; -+ [GtkChild] -+ private Gtk.Image install_rhel_image; -+ [GtkChild] -+ private Boxes.WizardWebView rhel_web_view; -+ [GtkChild] -+ private Gtk.Spinner rhel_web_view_spinner; -+ [GtkChild] -+ private Gtk.Stack rhel_web_view_stack; - - private AppWindow window; - -@@ -236,8 +247,14 @@ private void on_notify_estimated_load_progress () { - - private Gtk.ListStore? media_urls_store; - -+ private Cancellable? rhel_cancellable; -+ private Gtk.TreeRowReference? rhel_os_row_reference; -+ private Osinfo.Os? rhel_os; -+ - public MediaManager media_manager; - -+ public string filename { get; set; } -+ - public bool download_required { - get { - const string[] supported_schemes = { "http", "https" }; -@@ -267,6 +284,12 @@ private void on_notify_estimated_load_progress () { - set { - _page = value; - -+ rhel_web_view_spinner.stop (); -+ if (rhel_cancellable != null) { -+ rhel_cancellable.cancel (); -+ rhel_cancellable = null; -+ } -+ - visible_child_name = page_names[value]; - - if (selected != null) -@@ -277,6 +300,9 @@ private void on_notify_estimated_load_progress () { - // FIXME: grab first element in the menu list - main_vbox.grab_focus (); - break; -+ case SourcePage.RHEL_WEB_VIEW: -+ rhel_web_view_stack.set_visible_child_name ("spinner"); -+ break; - case SourcePage.URL: - url_entry.changed (); - url_entry.grab_focus (); -@@ -297,6 +323,17 @@ private void on_notify_estimated_load_progress () { - update_libvirt_sytem_entry_visibility.begin (); - add_media_entries.begin (); - transition_type = Gtk.StackTransitionType.SLIDE_LEFT_RIGHT; // FIXME: Why this won't work from .ui file? -+ -+ rhel_web_view.view.decide_policy.connect (on_rhel_web_view_decide_policy); -+ } -+ -+ public override void dispose () { -+ if (rhel_cancellable != null) { -+ rhel_cancellable.cancel (); -+ rhel_cancellable = null; -+ } -+ -+ base.dispose (); - } - - public void setup_ui (AppWindow window) { -@@ -305,6 +342,7 @@ public void setup_ui (AppWindow window) { - this.window = window; - - var os_db = media_manager.os_db; -+ - 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); -@@ -325,14 +363,48 @@ public void setup_ui (AppWindow window) { - debug ("Failed to get all known media URLs: %s", error.message); - } - }); -+ -+ // 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 -+ // it will be too late. -+ // -+ // To work around this, we specify the ID of a RHEL release and use it -+ // to get an OsinfoOs. Since all RHEL releases have the same Shadowman, -+ // the exact version of the RHEL release doesn't matter. -+ // -+ // Ideally, distributions would be a first-class object in libosinfo, so -+ // that we could query for RHEL instead of a specific version of it. -+ var rhel_id = "http://redhat.com/rhel/7.4"; -+ -+ os_db.get_os_by_id.begin (rhel_id, (obj, res) => { -+ try { -+ rhel_os = os_db.get_os_by_id.end (res); -+ } catch (OSDatabaseError error) { -+ warning ("Failed to find OS with ID '%s': %s", rhel_id, error.message); -+ return; -+ } -+ -+ Downloader.fetch_os_logo.begin (install_rhel_image, rhel_os, 64, (obj, res) => { -+ Downloader.fetch_os_logo.end (res); -+ var pixbuf = install_rhel_image.pixbuf; -+ install_rhel_image.visible = pixbuf != null; -+ }); -+ }); - } - - public void cleanup () { -+ filename = null; - install_media = null; - libvirt_sys_import = false; - selected = null; - if(page != SourcePage.URL) - uri = ""; -+ -+ if (rhel_cancellable != null) { -+ rhel_cancellable.cancel (); -+ rhel_cancellable = null; -+ } - } - - [GtkCallback] -@@ -443,4 +515,286 @@ private void on_media_selected (InstallerMedia media) { - warning ("Failed to setup installation media '%s': %s", media.device_file, error.message); - } - } -+ -+ private string rhel_get_authentication_uri_from_json (string contents) throws GLib.Error -+ requires (contents.length > 0) { -+ -+ var parser = new Json.Parser (); -+ parser.load_from_data (contents, -1); -+ -+ Json.NodeType node_type = Json.NodeType.NULL; -+ -+ var root_node = parser.get_root (); -+ node_type = root_node.get_node_type (); -+ if (node_type != Json.NodeType.ARRAY) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: couldn’t find root array"); -+ -+ var root_array = root_node.get_array (); -+ if (root_array == null) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: couldn’t find root array"); -+ if (root_array.get_length () == 0) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: root array is empty"); -+ -+ var root_array_node_0 = root_array.get_element (0); -+ node_type = root_array_node_0.get_node_type (); -+ if (node_type != Json.NodeType.OBJECT) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: root array doesn’t have an object"); -+ -+ var root_array_object_0 = root_array_node_0.get_object (); -+ -+ var product_code_node = root_array_object_0.get_member ("productCode"); -+ if (product_code_node == null) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: couldn’t find productCode"); -+ node_type = product_code_node.get_node_type (); -+ if (node_type != Json.NodeType.VALUE) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: productCode is not a VALUE"); -+ -+ var product_code = product_code_node.get_string (); -+ if (product_code != "rhel") -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: productCode is not rhel"); -+ -+ var featured_artifact_node = root_array_object_0.get_member ("featuredArtifact"); -+ if (featured_artifact_node == null) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: couldn’t find featuredArtifact"); -+ node_type = featured_artifact_node.get_node_type (); -+ if (node_type != Json.NodeType.OBJECT) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: featuredArtifact is not an OBJECT"); -+ -+ var featured_artifact_object = featured_artifact_node.get_object (); -+ -+ var url_node = featured_artifact_object.get_member ("url"); -+ if (url_node == null) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: couldn’t find featuredArtifact.url"); -+ node_type = url_node.get_node_type (); -+ if (node_type != Json.NodeType.VALUE) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: featuredArtifact.url is not a VALUE"); -+ -+ var url = url_node.get_string (); -+ if (url == null || url.length == 0) -+ throw new Boxes.Error.INVALID ("Failed to parse JSON: featuredArtifact.url is empty"); -+ -+ return url; -+ } -+ -+ private string rhel_get_authentication_uri_from_xml (string contents) throws GLib.Error -+ requires (contents.length > 0) { -+ -+ var product_code = extract_xpath (contents, "string(/products/product/productCode)", true); -+ if (product_code != "rhel") -+ throw new Boxes.Error.INVALID ("Failed to parse XML: productCode is not rhel"); -+ -+ var url = extract_xpath (contents, "string(/products/product/featuredArtifact/url)", true); -+ if (url.length == 0) -+ throw new Boxes.Error.INVALID ("Failed to parse XML: featuredArtifact.url is empty"); -+ -+ return url; -+ } -+ -+ private void rhel_show_web_view (string cached_path, bool use_cache) { -+ if (!use_cache) { -+ GLib.FileUtils.unlink (cached_path); -+ rhel_web_view_spinner.start (); -+ } -+ -+ var downloader = Downloader.get_instance (); -+ var file = GLib.File.new_for_uri ("https://developers.redhat.com/download-manager/rest/available/rhel"); -+ string[] cached_paths = { cached_path }; -+ var progress = new ActivityProgress (); -+ downloader.download.begin (file, cached_paths, progress, rhel_cancellable, (obj, res) => { -+ try { -+ file = downloader.download.end (res); -+ } catch (GLib.IOError.CANCELLED error) { -+ return; -+ } catch (GLib.Error error) { -+ page = SourcePage.MAIN; -+ window.notificationbar.display_error (_("Failed to get authentication URI")); -+ warning (error.message); -+ return; -+ } -+ -+ file.load_contents_async.begin (rhel_cancellable, (obj, res) => { -+ uint8[] contents; -+ try { -+ file.load_contents_async.end (res, out contents, null); -+ } catch (GLib.IOError.CANCELLED error) { -+ return; -+ } catch (GLib.Error error) { -+ page = SourcePage.MAIN; -+ window.notificationbar.display_error (_("Failed to parse response from redhat.com")); -+ warning (error.message); -+ return; -+ } -+ -+ if (contents.length <= 0) { -+ if (use_cache) { -+ rhel_show_web_view (cached_path, false); -+ } else { -+ page = SourcePage.MAIN; -+ window.notificationbar.display_error (_("Failed to parse response from redhat.com")); -+ warning ("Empty response from redhat.com"); -+ } -+ return; -+ } -+ -+ string? authentication_uri; -+ try { -+ authentication_uri = rhel_get_authentication_uri_from_json ((string) contents); -+ } catch (Boxes.Error error) { -+ if (use_cache) { -+ rhel_show_web_view (cached_path, false); -+ } else { -+ page = SourcePage.MAIN; -+ window.notificationbar.display_error (_("Failed to parse response from redhat.com")); -+ warning (error.message); -+ } -+ return; -+ } catch (GLib.Error json_error) { -+ debug ("Failed to parse as JSON, could be XML: %s", json_error.message); -+ try { -+ authentication_uri = rhel_get_authentication_uri_from_xml ((string) contents); -+ } catch (GLib.Error xml_error) { -+ if (use_cache) { -+ rhel_show_web_view (cached_path, false); -+ } else { -+ page = SourcePage.MAIN; -+ window.notificationbar.display_error (_("Failed to parse response from redhat.com")); -+ warning (xml_error.message); -+ } -+ return; -+ } -+ } -+ -+ debug ("RHEL ISO authentication URI: %s", authentication_uri); -+ -+ rhel_cancellable = new GLib.Cancellable (); -+ rhel_cancellable.connect(() => { -+ rhel_web_view.view.stop_loading (); -+ rhel_web_view.view.load_uri ("about:blank"); -+ -+ var data_manager = rhel_web_view.view.get_website_data_manager (); -+ data_manager.clear.begin (WebKit.WebsiteDataTypes.COOKIES, 0, null); -+ }); -+ -+ if (rhel_web_view_spinner.active) { -+ rhel_web_view_stack.set_visible_child_full ("web-view", Gtk.StackTransitionType.CROSSFADE); -+ rhel_web_view_spinner.stop (); -+ } else { -+ rhel_web_view_stack.set_visible_child_name ("web-view"); -+ } -+ -+ rhel_web_view.view.load_uri (authentication_uri); -+ filename = GLib.Path.get_basename (authentication_uri); -+ }); -+ }); -+ } -+ -+ [GtkCallback] -+ private void on_install_rhel_button_clicked () { -+ page = SourcePage.RHEL_WEB_VIEW; -+ rhel_cancellable = new GLib.Cancellable (); -+ -+ var cached_path = get_cache ("developers.redhat.com", "rhel"); -+ var cached_file = GLib.File.new_for_path (cached_path); -+ cached_file.query_info_async.begin (GLib.FileAttribute.TIME_MODIFIED, -+ GLib.FileQueryInfoFlags.NONE, -+ GLib.Priority.DEFAULT, -+ rhel_cancellable, -+ (obj, res) => { -+ GLib.FileInfo? info; -+ try { -+ info = cached_file.query_info_async.end (res); -+ } catch (GLib.IOError.CANCELLED error) { -+ return; -+ } catch (GLib.IOError.NOT_FOUND error) { -+ debug ("No cached response from redhat.com"); -+ rhel_show_web_view (cached_path, false); -+ return; -+ } catch (GLib.Error error) { -+ warning ("Failed to find cached response from redhat.com: %s", error.message); -+ rhel_show_web_view (cached_path, false); -+ return; -+ } -+ -+ var mtime_timeval = info.get_modification_time (); -+ GLib.DateTime? mtime = new GLib.DateTime.from_timeval_utc (mtime_timeval); -+ if (mtime == null) { -+ warning ("Cached response from redhat.com has invalid modification time"); -+ rhel_show_web_view (cached_path, false); -+ return; -+ } -+ -+ GLib.DateTime? now = new GLib.DateTime.now_utc (); -+ if (now == null) { -+ warning ("Failed to read current time"); -+ rhel_show_web_view (cached_path, false); -+ return; -+ } -+ -+ var time_difference = now.difference (mtime); -+ if (time_difference > GLib.TimeSpan.DAY) { -+ debug ("Cached response from redhat.com is more than a day old"); -+ rhel_show_web_view (cached_path, false); -+ return; -+ } -+ -+ debug ("Cached response from redhat.com is less than a day old"); -+ rhel_show_web_view (cached_path, true); -+ }); -+ } -+ -+ private bool on_rhel_web_view_decide_policy (WebKit.WebView web_view, -+ WebKit.PolicyDecision decision, -+ WebKit.PolicyDecisionType decision_type) { -+ if (decision_type != WebKit.PolicyDecisionType.NAVIGATION_ACTION) -+ return false; -+ -+ var action = (decision as WebKit.NavigationPolicyDecision).get_navigation_action (); -+ var request = action.get_request (); -+ var request_uri = request.get_uri (); -+ if (!request_uri.has_prefix ("https://developers.redhat.com/products/rhel")) -+ return false; -+ -+ var soup_uri = new Soup.URI (request_uri); -+ var query = soup_uri.get_query (); -+ if (query == null) -+ return false; -+ -+ var key_value_pairs = Soup.Form.decode (query); -+ var download_uri = key_value_pairs.lookup ("tcDownloadURL"); -+ if (download_uri == null) -+ return false; -+ -+ debug ("RHEL ISO download URI: %s", download_uri); -+ -+ if (rhel_os != null) { -+ Gtk.TreeIter iter; -+ Gtk.TreePath? path; -+ bool iter_is_valid = false; -+ -+ if (rhel_os_row_reference == null) { -+ media_urls_store.append (out iter); -+ iter_is_valid = true; -+ -+ path = media_urls_store.get_path (iter); -+ rhel_os_row_reference = new Gtk.TreeRowReference (media_urls_store, path); -+ } else { -+ path = rhel_os_row_reference.get_path (); -+ iter_is_valid = media_urls_store.get_iter (out iter, path); -+ } -+ -+ if (iter_is_valid) { -+ media_urls_store.set (iter, -+ OSDatabase.MediaURLsColumns.URL, download_uri, -+ OSDatabase.MediaURLsColumns.OS, rhel_os); -+ } -+ } -+ -+ uri = download_uri; -+ activated (); -+ -+ selected = install_rhel_button; -+ -+ decision.ignore (); -+ return true; -+ } - } -diff --git a/src/wizard.vala b/src/wizard.vala -index 5c051af3e62a..78a9c1464a9f 100644 ---- a/src/wizard.vala -+++ b/src/wizard.vala -@@ -119,6 +119,13 @@ - return; - } - } else { -+ switch (value) { -+ case WizardPage.SOURCE: -+ if (wizard_source.page == SourcePage.RHEL_WEB_VIEW) -+ wizard_source.page = SourcePage.MAIN; -+ break; -+ } -+ - switch (page) { - case WizardPage.REVIEW: - create_button.visible = false; -@@ -133,7 +140,7 @@ - return; - - _page = value; -- back_button.sensitive = (value != WizardPage.SOURCE); -+ update_back_button_sensitivity (); - wizard_window.topbar.set_title_for_page (value); - visible_child_name = page_names[value]; - -@@ -154,6 +161,7 @@ private ActivityProgress create_preparation_progress () { - } - - private void wizard_source_update_buttons () { -+ update_back_button_sensitivity (); - if (page != WizardPage.SOURCE) - return; - -@@ -165,6 +173,10 @@ private void wizard_source_update_buttons () { - source = null; - break; - -+ case Boxes.SourcePage.RHEL_WEB_VIEW: -+ next_button.sensitive = false; -+ break; -+ - case Boxes.SourcePage.URL: - next_button.sensitive = false; - if (wizard_source.uri.length == 0) -@@ -186,6 +198,12 @@ private void wizard_source_update_buttons () { - } - } - -+ private void update_back_button_sensitivity () { -+ var disable_back_button = page == WizardPage.SOURCE && -+ (wizard_source.page == SourcePage.MAIN || wizard_source.page == SourcePage.URL); -+ back_button.sensitive = !disable_back_button; -+ } -+ - construct { - media_manager = MediaManager.get_instance (); - wizard_source.notify["page"].connect(wizard_source_update_buttons); -@@ -397,7 +415,7 @@ private bool prepare (ActivityProgress progress) { - - try { - // Validate URI -- prepare_for_location (wizard_source.uri, null, true); -+ prepare_for_location (wizard_source.uri, wizard_source.filename, true); - } catch (GLib.Error error) { - window.notificationbar.display_error (error.message); - -@@ -408,7 +426,7 @@ private bool prepare (ActivityProgress progress) { - - if (wizard_source.download_required) { - continue_button.sensitive = false; -- download_media.begin (wizard_source.uri, null, progress); -+ download_media.begin (wizard_source.uri, wizard_source.filename, progress); - - var os = wizard_source.get_os_from_uri (wizard_source.uri); - if (os == null) -@@ -641,9 +659,14 @@ public void setup_ui (AppWindow window, WizardWindow wizard_window) { - cancel_button.clicked.connect (cancel); - back_button = wizard_window.topbar.back_btn; - back_button.clicked.connect (() => { -- prepare_cancellable.cancel (); -- -- page = page - 1; -+ if (page == WizardPage.SOURCE) { -+ return_if_fail (wizard_source.page == SourcePage.RHEL_WEB_VIEW); -+ wizard_source.page = SourcePage.MAIN; -+ wizard_source.cleanup (); -+ } else { -+ prepare_cancellable.cancel (); -+ page = page - 1; -+ } - }); - continue_button = wizard_window.topbar.continue_btn; - continue_button.clicked.connect (() => { --- -2.13.6 - diff --git a/gnome-boxes.spec b/gnome-boxes.spec index c0800a0..cb5af96 100644 --- a/gnome-boxes.spec +++ b/gnome-boxes.spec @@ -26,7 +26,7 @@ ExclusiveArch: x86_64 %global url_ver %%(echo %{version}|cut -d. -f1,2) Name: gnome-boxes -Version: 3.26.2 +Version: 3.27.1 Release: 1%{?dist} Summary: A simple GNOME 3 application to access remote or virtual systems @@ -34,18 +34,15 @@ License: LGPLv2+ URL: https://wiki.gnome.org/Apps/Boxes Source0: http://download.gnome.org/sources/%{name}/%{url_ver}/%{name}-%{version}.tar.xz -# https://bugzilla.gnome.org/show_bug.cgi?id=786679 -Patch0: gnome-boxes-3.26.1-rhel-developer-suite.patch - -BuildRequires: gettext -BuildRequires: vala-devel -BuildRequires: vala +BuildRequires: gettext >= 0.19.8 +BuildRequires: vala-devel >= 0.36.0 +BuildRequires: vala >= 0.36.0 BuildRequires: yelp-tools BuildRequires: pkgconfig(clutter-gtk-1.0) -BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(glib-2.0) >= 2.52 BuildRequires: pkgconfig(gobject-introspection-1.0) BuildRequires: pkgconfig(govirt-1.0) -BuildRequires: pkgconfig(gtk+-3.0) +BuildRequires: pkgconfig(gtk+-3.0) >= 3.22.20 BuildRequires: pkgconfig(gtk-vnc-2.0) BuildRequires: pkgconfig(libarchive) BuildRequires: pkgconfig(json-glib-1.0) @@ -54,15 +51,15 @@ BuildRequires: pkgconfig(libvirt-gobject-1.0) BuildRequires: pkgconfig(libvirt-gconfig-1.0) BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(gudev-1.0) -BuildRequires: pkgconfig(libosinfo-1.0) -BuildRequires: pkgconfig(libsoup-2.4) +BuildRequires: pkgconfig(libosinfo-1.0) >= 1.1.0 +BuildRequires: pkgconfig(libsoup-2.4) >= 2.44 BuildRequires: pkgconfig(libusb-1.0) BuildRequires: pkgconfig(tracker-sparql-2.0) BuildRequires: pkgconfig(webkit2gtk-4.0) BuildRequires: spice-gtk3-vala BuildRequires: libosinfo-vala BuildRequires: desktop-file-utils -BuildRequires: autoconf automake gettext-devel libtool +#BuildRequires: autoconf automake gettext-devel libtool # Pulls in libvirtd + KVM, but no NAT / firewall configs %if %{with_qemu_kvm} @@ -92,10 +89,9 @@ gnome-boxes lets you easily create, setup, access, and use: %prep %setup -q -%patch0 -p1 %build -autoreconf --force --install --verbose +#autoreconf --force --install --verbose %configure --enable-vala make %{?_smp_mflags} V=1 @@ -144,6 +140,9 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : %{_datadir}/gnome-shell/search-providers/gnome-boxes-search-provider.ini %changelog +* Tue Nov 21 2017 Debarshi Ray - 3.27.1-1 +- Update to 3.27.1 + * Wed Nov 01 2017 Kalev Lember - 3.26.2-1 - Update to 3.26.2 diff --git a/sources b/sources index af2b218..d1986f9 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (gnome-boxes-3.26.2.tar.xz) = 385568b8e1306cf8517f44eb49536f3a5edb38d8d2832abe66b956b7df2f44f6f74ea9d66edbb38dd417690fc67aefa6736e071f55944c3f0c5198b459560393 +SHA512 (gnome-boxes-3.27.1.tar.xz) = 341f675676ad524697f95ec520c1f6a463b5e662392aacabfc474737989561ba6406373778e71b2376b1b1d20d545082b0f3f13eb51b18cc3cf25beb5936856c