[gnome-boxes] machine: can_delete prop now public settable
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-boxes] machine: can_delete prop now public settable
- Date: Wed, 4 May 2016 15:14:35 +0000 (UTC)
commit 5b4cfdaba656b4ac7f27b27b495fa72d87705c45
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date: Wed May 4 15:45:15 2016 +0100
machine: can_delete prop now public settable
https://bugzilla.gnome.org/show_bug.cgi?id=710307
src/libvirt-broker.vala | 52 +++++++++++++++++++++++++++++++++++++++++----
src/libvirt-machine.vala | 10 ++++----
src/machine.vala | 2 +-
src/media-manager.vala | 2 +
src/vm-configurator.vala | 4 +-
5 files changed, 57 insertions(+), 13 deletions(-)
---
diff --git a/src/libvirt-broker.vala b/src/libvirt-broker.vala
index d7d81c2..04ba131 100644
--- a/src/libvirt-broker.vala
+++ b/src/libvirt-broker.vala
@@ -85,9 +85,9 @@ private class Boxes.LibvirtBroker : Boxes.Broker {
}
// Existing == Existed before Boxes was launched
- private async void try_add_existing_domain (CollectionSource source,
- GVir.Connection connection,
- GVir.Domain domain) {
+ private async LibvirtMachine? try_add_existing_domain (CollectionSource source,
+ GVir.Connection connection,
+ GVir.Domain domain) {
try {
var machine = yield add_domain (source, connection, domain);
var config = machine.domain_config;
@@ -106,8 +106,12 @@ private class Boxes.LibvirtBroker : Boxes.Broker {
debug ("Continuing cloning of '%s', ..", machine.name);
new LibvirtVMCloner.for_cloning_completion (machine);
}
+
+ return machine;
} catch (GLib.Error error) {
warning ("Failed to create source '%s': %s", source.name, error.message);
+
+ return null;
}
}
@@ -124,8 +128,46 @@ private class Boxes.LibvirtBroker : Boxes.Broker {
connections.insert (source.name, connection);
- foreach (var domain in connection.get_domains ())
- yield try_add_existing_domain (source, connection, domain);
+ var clones = new GLib.List<LibvirtMachine> ();
+ foreach (var domain in connection.get_domains ()) {
+ var machine = yield try_add_existing_domain (source, connection, domain);
+
+ if (VMConfigurator.is_libvirt_cloning_config (machine.domain_config))
+ clones.append (machine);
+ }
+
+ foreach (var clone in clones) {
+ var disk_path = (clone.vm_creator as VMImporter).source_media.device_file;
+ LibvirtMachine? cloned = null;
+
+ foreach (var item in App.app.collection.items.data) {
+ if (!(item is LibvirtMachine))
+ continue;
+
+ var machine = item as LibvirtMachine;
+ var volume = machine.storage_volume;
+ if (volume != null && volume.get_path () == disk_path) {
+ cloned = machine;
+
+ break;
+ }
+ }
+
+ if (cloned == null) {
+ warning ("Failed to find source machine of clone %s", clone.name);
+
+ continue;
+ }
+
+ cloned.can_delete = false;
+ ulong under_construct_id = 0;
+ under_construct_id = clone.notify["under-construction"].connect (() => {
+ if (!clone.under_construction) {
+ cloned.can_delete = true;
+ clone.disconnect (under_construct_id);
+ }
+ });
+ }
connection.domain_removed.connect ((connection, domain) => {
var machine = domain.get_data<LibvirtMachine> ("machine");
diff --git a/src/libvirt-machine.vala b/src/libvirt-machine.vala
index b9506ff..5536980 100644
--- a/src/libvirt-machine.vala
+++ b/src/libvirt-machine.vala
@@ -694,14 +694,14 @@ private class Boxes.LibvirtMachine: Boxes.Machine {
var media = new LibvirtClonedMedia (storage_volume.get_path (), config);
var vm_cloner = media.get_vm_creator ();
- var cloned = yield vm_cloner.create_vm (null);
- vm_cloner.launch_vm (cloned);
+ var clone_machine = yield vm_cloner.create_vm (null);
+ vm_cloner.launch_vm (clone_machine);
ulong under_construct_id = 0;
- under_construct_id = cloned.notify["under-construction"].connect (() => {
- if (!cloned.under_construction) {
+ under_construct_id = clone_machine.notify["under-construction"].connect (() => {
+ if (!clone_machine.under_construction) {
can_delete = true;
- cloned.disconnect (under_construct_id);
+ clone_machine.disconnect (under_construct_id);
}
});
} catch (GLib.Error error) {
diff --git a/src/machine.vala b/src/machine.vala
index 5903200..5440c5e 100644
--- a/src/machine.vala
+++ b/src/machine.vala
@@ -17,7 +17,7 @@ private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesPro
public virtual bool can_save { get { return false; } }
public abstract bool can_restart { get; }
public abstract bool can_clone { get; }
- public bool can_delete { get; protected set; default = true; }
+ public bool can_delete { get; set; default = true; }
public bool under_construction { get; protected set; default = false; }
public signal void got_error (string message);
diff --git a/src/media-manager.vala b/src/media-manager.vala
index 88803b3..c02a870 100644
--- a/src/media-manager.vala
+++ b/src/media-manager.vala
@@ -44,6 +44,8 @@ private class Boxes.MediaManager : Object {
return yield new InstalledMedia.guess_os (path, this);
else if (VMConfigurator.is_libvirt_system_import_config (config))
return new LibvirtMedia (path, config);
+ else if (VMConfigurator.is_libvirt_cloning_config (config))
+ return new LibvirtClonedMedia (path, config);
} catch (GLib.Error error) {
debug ("%s", error.message);
diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala
index 6cb4756..4b8918f 100644
--- a/src/vm-configurator.vala
+++ b/src/vm-configurator.vala
@@ -424,10 +424,10 @@ private class Boxes.VMConfigurator {
if (installed)
custom_xml = INSTALLED_XML;
- else if (install_media is LibvirtMedia)
- custom_xml = LIBVIRT_SYS_IMPORT_XML;
else if (install_media is LibvirtClonedMedia)
custom_xml = LIBVIRT_CLONING_XML;
+ else if (install_media is LibvirtMedia)
+ custom_xml = LIBVIRT_SYS_IMPORT_XML;
else if (install_media is InstalledMedia)
custom_xml = IMPORT_XML;
else
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]