[gnome-boxes] Make use of 'title' node in libvirt XML
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-boxes] Make use of 'title' node in libvirt XML
- Date: Fri, 8 Jun 2012 13:08:33 +0000 (UTC)
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]