[gnome-boxes] vm-creator: Save number of reboots for VM under installation



commit fa1d58d4864ee9513c2f46bdc84160f17033f2bb
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Wed Nov 21 02:04:44 2012 +0200

    vm-creator: Save number of reboots for VM under installation
    
    This means that now we don't lose means to detect completion of
    installation just because user quit Boxes before installation was
    completed.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=688770

 src/vm-configurator.vala |   20 ++++++++++++++++++--
 src/vm-creator.vala      |   13 ++++++++++++-
 2 files changed, 30 insertions(+), 3 deletions(-)
---
diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala
index ee17298..973163d 100644
--- a/src/vm-configurator.vala
+++ b/src/vm-configurator.vala
@@ -20,6 +20,7 @@ private class Boxes.VMConfigurator {
 
     private const string OS_ID_XML = "<os-id>%s</os-id>";
     private const string MEDIA_ID_XML = "<media-id>%s</media-id>";
+    private const string NUM_REBOOTS_XML = "<num-reboots>%u</num-reboots>";
 
     public static Domain create_domain_config (InstallerMedia install_media, string target_path, Capabilities caps)
                                         throws VMConfiguratorError {
@@ -174,8 +175,17 @@ private class Boxes.VMConfigurator {
         return get_custom_xml_node (domain, "media-id");
     }
 
+    public static uint get_num_reboots (Domain domain) {
+        var str = get_custom_xml_node (domain, "num-reboots");
+        return (str != null)? int.parse (str) : 0;
+    }
+
+    public static void set_num_reboots (Domain domain, InstallerMedia install_media, uint num_reboots) {
+        update_custom_xml (domain, install_media, num_reboots);
+    }
+
     private static void mark_as_installed (Domain domain, InstallerMedia install_media) {
-        update_custom_xml (domain, install_media, true);
+        update_custom_xml (domain, install_media, 0, true);
     }
 
     private static void set_cpu_config (Domain domain, Capabilities caps) {
@@ -335,7 +345,10 @@ private class Boxes.VMConfigurator {
         return null;
     }
 
-    private static void update_custom_xml (Domain domain, InstallerMedia install_media, bool installed = false) {
+    private static void update_custom_xml (Domain domain,
+                                           InstallerMedia install_media,
+                                           uint num_reboots = 0,
+                                           bool installed = false) {
         string custom_xml;
 
         if (installed)
@@ -348,6 +361,9 @@ private class Boxes.VMConfigurator {
         if (install_media.os_media != null)
             custom_xml += Markup.printf_escaped (MEDIA_ID_XML, install_media.os_media.id);
 
+        if (num_reboots != 0)
+            custom_xml += NUM_REBOOTS_XML.printf (num_reboots);
+
         custom_xml = BOXES_XML.printf (custom_xml);
         try {
             domain.set_custom_xml (custom_xml, BOXES_NS, BOXES_NS_URI);
diff --git a/src/vm-creator.vala b/src/vm-creator.vala
index e056767..e876d5a 100644
--- a/src/vm-creator.vala
+++ b/src/vm-creator.vala
@@ -79,6 +79,7 @@ private class Boxes.VMCreator {
 
     private async void continue_installation (LibvirtMachine machine) {
         install_media = yield MediaManager.get_instance ().create_installer_media_from_config (machine.domain_config);
+        num_reboots = VMConfigurator.get_num_reboots (machine.domain_config);
 
         state_changed_id = machine.notify["state"].connect (on_machine_state_changed);
         machine.vm_creator = this;
@@ -119,7 +120,7 @@ private class Boxes.VMCreator {
             return;
         }
 
-        num_reboots++;
+        increment_num_reboots (machine);
 
         if (guest_installed_os (machine)) {
             set_post_install_config (machine);
@@ -166,6 +167,16 @@ private class Boxes.VMCreator {
         }
     }
 
+    private void increment_num_reboots (LibvirtMachine machine) {
+        num_reboots++;
+        try {
+            var config = machine.domain.get_config (GVir.DomainXMLFlags.INACTIVE);
+            VMConfigurator.set_num_reboots (config, install_media, num_reboots);
+            machine.domain.set_config (config);
+        } catch (GLib.Error error) {
+            warning ("Failed to update configuration on '%s': %s", machine.name, error.message);
+        }
+    }
 
     private bool guest_installed_os (LibvirtMachine machine) {
         var volume = machine.storage_volume;



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