[gnome-boxes] Make use of 'title' node in libvirt XML



commit 91fe7f3a7ff258efc23ceb6879642bec6028ba87
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Mon Jun 4 16:58:47 2012 +0300

    Make use of 'title' node in libvirt XML
    
    This is mainly done to fix Windows 7 express installation as it requires
    the host/computer name to be less than 16 characters[1]. Although we
    could just work around that issue for Windows 7 but looking at the
    libvirt documentation[2], the more verbose string we currently use as
    domain's name is really more like its title and we better use a short
    name as domain's name in general.
    
    [1] http://technet.microsoft.com/en-us/library/cc749460%28v=ws.10%29
    [2] http://libvirt.org/formatdomain.html#elementsMetadata
    
    https://bugzilla.gnome.org/show_bug.cgi?id=677391

 configure.ac             |    2 +-
 src/collection-view.vala |    4 ++--
 src/collection.vala      |   11 +++++++++++
 src/libvirt-machine.vala |    3 ++-
 src/machine.vala         |    4 ++--
 src/vm-configurator.vala |    3 +--
 src/vm-creator.vala      |   27 +++++++++++++++++++--------
 src/win7-installer.vala  |    3 +++
 8 files changed, 41 insertions(+), 16 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index b834119..64581d2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -47,7 +47,7 @@ GOBJECT_INTROSPECTION_MIN_VERSION=0.9.6
 GTK_MIN_VERSION=3.3.5
 GTK_VNC_MIN_VERSION=0.4.4
 LIBVIRT_GLIB_MIN_VERSION=0.0.8
-LIBVIRT_GCONFIG_MIN_VERSION=0.0.8
+LIBVIRT_GCONFIG_MIN_VERSION=0.0.9
 LIBXML2_MIN_VERSION=2.7.8
 SPICE_GTK_MIN_VERSION=0.9
 GUDEV_MIN_VERSION=165
diff --git a/src/collection-view.vala b/src/collection-view.vala
index b60156c..7f7a6c0 100644
--- a/src/collection-view.vala
+++ b/src/collection-view.vala
@@ -133,7 +133,7 @@ private class Boxes.CollectionView: Boxes.UI {
             return;
         }
 
-        var iter = append (machine.pixbuf, machine.name, item);
+        var iter = append (machine.pixbuf, item.title, item);
         var pixbuf_id = machine.notify["pixbuf"].connect (() => {
             // apparently iter is stable after insertion/removal/sort
             model.set (iter, ModelColumns.SCREENSHOT, machine.pixbuf);
@@ -194,7 +194,7 @@ private class Boxes.CollectionView: Boxes.UI {
             if (item_a == null || item_b == null) // FIXME?!
                 return 0;
 
-            return strcmp (item_a.name.down (), item_b.name.down ());
+            return strcmp (item_a.title.down (), item_b.title.down ());
         });
         model.set_sort_column_id (Gtk.SortColumn.DEFAULT, Gtk.SortType.ASCENDING);
 
diff --git a/src/collection.vala b/src/collection.vala
index 9cea481..aa141db 100644
--- a/src/collection.vala
+++ b/src/collection.vala
@@ -2,6 +2,17 @@
 
 private abstract class Boxes.CollectionItem: Boxes.UI {
     public string name { set; get; }
+    public string title {
+        set {
+            _title = value;
+        }
+
+        owned get {
+            return _title ?? name;
+        }
+    }
+
+    private string? _title;
 }
 
 private class Boxes.Collection: GLib.Object {
diff --git a/src/libvirt-machine.vala b/src/libvirt-machine.vala
index f37444b..82bf3ac 100644
--- a/src/libvirt-machine.vala
+++ b/src/libvirt-machine.vala
@@ -98,7 +98,7 @@ private class Boxes.LibvirtMachine: Boxes.Machine {
 
     public LibvirtMachine (CollectionSource source,
                            GVir.Connection connection,
-                           GVir.Domain domain) throws GLib.Error {
+                           GVir.Domain     domain) throws GLib.Error {
         base (source, domain.get_name ());
 
         debug ("new libvirt machine: " + name);
@@ -136,6 +136,7 @@ private class Boxes.LibvirtMachine: Boxes.Machine {
         domain.stopped.connect (() => { state = MachineState.STOPPED; });
 
         update_domain_config ();
+        title = domain_config.get_title () ?? name;
         domain.updated.connect (update_domain_config);
 
         set_screenshot_enable (true);
diff --git a/src/machine.vala b/src/machine.vala
index 3c50bf5..cb1d39d 100644
--- a/src/machine.vala
+++ b/src/machine.vala
@@ -297,9 +297,9 @@ private class Boxes.MachineActor: Boxes.UI {
 
         gtk_vbox.get_widget ().get_style_context ().add_class ("boxes-bg");
 
-        label = new Gtk.Label (machine.name);
+        label = new Gtk.Label (machine.title);
         label.modify_fg (Gtk.StateType.NORMAL, get_color ("white"));
-        machine.bind_property ("name", label, "label", BindingFlags.DEFAULT);
+        machine.bind_property ("title", label, "label", BindingFlags.DEFAULT);
         vbox.add (label);
         vbox.set_valign (Gtk.Align.START);
         password_entry = new Gtk.Entry ();
diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala
index d9335f5..53b61b7 100644
--- a/src/vm-configurator.vala
+++ b/src/vm-configurator.vala
@@ -13,9 +13,8 @@ private class Boxes.VMConfigurator {
     private const string INSTALLATION_XML = "<os-state>" + INSTALLATION_STATE + "</os-state>";
     private const string INSTALLED_XML = "<os-state>" + INSTALLED_STATE + "</os-state>";
 
-    public Domain create_domain_config (InstallerMedia install_media, string name, string target_path) {
+    public Domain create_domain_config (InstallerMedia install_media, string target_path) {
         var domain = new Domain ();
-        domain.name = name;
 
         var xml = (install_media.live) ? LIVE_XML : INSTALLATION_XML;
 
diff --git a/src/vm-creator.vala b/src/vm-creator.vala
index 9be5ab2..806d6cf 100644
--- a/src/vm-creator.vala
+++ b/src/vm-creator.vala
@@ -52,18 +52,20 @@ private class Boxes.VMCreator {
             yield;
         }
 
-        var name = yield create_domain_name_from_media (install_media);
+        string title;
+        var name = yield create_domain_name_and_title_from_media (install_media, out title);
         var fullscreen = true;
         if (install_media is UnattendedInstaller) {
             var unattended = install_media as UnattendedInstaller;
 
-            var hostname = name.replace (" ", "-");
-            yield unattended.setup (hostname, cancellable);
+            yield unattended.setup (name, cancellable);
             fullscreen = !unattended.express_install;
         }
 
         var volume = yield create_target_volume (name, install_media.resources.storage);
-        var config = configurator.create_domain_config (install_media, name, volume.get_path ());
+        var config = configurator.create_domain_config (install_media, volume.get_path ());
+        config.name = name;
+        config.title = title;
 
         var domain = connection.create_domain (config);
         domain.start (0);
@@ -148,13 +150,22 @@ private class Boxes.VMCreator {
         }
     }
 
-    private async string create_domain_name_from_media (InstallerMedia install_media) throws GLib.Error {
-        var base_name = install_media.label;
+    private async string create_domain_name_and_title_from_media (InstallerMedia install_media,
+                                                                  out string     title) throws GLib.Error {
+        var base_title = install_media.label;
+        title = base_title;
+        var base_name = (install_media.os != null) ? install_media.os.short_id : base_title;
         var name = base_name;
 
         var pool = yield get_storage_pool ();
-        for (var i = 2; connection.find_domain_by_name (name) != null || pool.get_volume (name) != null; i++)
-            name = base_name + " " + i.to_string ();
+        for (var i = 2;
+             connection.find_domain_by_name (name) != null ||
+             connection.find_domain_by_name (title) != null || // We used to use title as name
+             pool.get_volume (name) != null; i++) {
+            // If you change the naming logic, you must address the issue of duplicate titles you'll be introducing
+            name = base_name + "-" + i.to_string ();
+            title = base_title + " " + i.to_string ();
+        }
 
         return name;
     }
diff --git a/src/win7-installer.vala b/src/win7-installer.vala
index f4c5157..9276d11 100644
--- a/src/win7-installer.vala
+++ b/src/win7-installer.vala
@@ -40,5 +40,8 @@ private class Boxes.Win7Installer: WindowsInstaller {
         lang = lang.replace ("_", "-");
         // Remove '.' and everything after it
         lang = /\..*/i.replace (lang, -1, 0, "");
+
+        if (label.length > 15)
+            critical ("'%s' is longer than 15 characters, expect %s express installation to fail!", label, os.name);
     }
 }



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