Re: [PATCH] virt-manager: Make virt-manager remember last image directory

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

 



On 06/16/2009 10:26 AM, Michal Novotny wrote:
> # HG changeset patch
> # User Michal Novotny <minovotn@xxxxxxxxxx>
> # Date 1245162093 -7200
> # Node ID 73427fcfc222006d7f74ce79277f8432d74d7c52
> # Parent  74f1f8309b139af9d84edfb1f0186c2306c0f332
> Make virt-manager remember last chosen image directory
> 
> Virt-manager never remembers last image directory after choosing file an image
> file to be appended to any domain. Since I am having all the domain image files
> in the same directory that is not default, this patch saves the last image path
> to gconf configuration file and offers it as startfolder next time.
> 

I like the idea in principle, but I think it needs to be a bit smarter.

I have a fix pending that will enable the storage browser for install media on
a local connection. We won't want the storage browser squashing the
default_image_path in that case, since there's a good chance that their media
directory and image directory are not the same.

We should have two gconf entries: /paths/last_image_path and
/paths/last_media_path, and give the storage_browser a flag or something to
allow the caller to opt in on which gconf entry we want to store. There's
probably a smarter way to do it but I can't think right now.

A general comment: the gconf entries should change the virt-manager.schema.in.
You can probably just use a default value of "", that way gconf won't throw an
exception the first time you try to access the key.

Some comments in line
> diff -r 74f1f8309b13 -r 73427fcfc222 src/virtManager/addhardware.py
> --- a/src/virtManager/addhardware.py	Mon Jun 15 15:54:56 2009 +0200
> +++ b/src/virtManager/addhardware.py	Tue Jun 16 16:21:33 2009 +0200
> @@ -674,7 +674,7 @@
>  
>      def browse_storage_file_address(self, src, ignore=None):
>          textent = self.window.get_widget("storage-file-address")
> -        folder = self.config.get_default_image_dir(self.vm.get_connection())
> +        folder = self.config.get_user_default_image_dir(self.vm.get_connection())
>          filename = self._browse_file(_("Locate or Create New Storage File"),
>                                       textent, folder=folder,
>                                       confirm_overwrite=True)
> diff -r 74f1f8309b13 -r 73427fcfc222 src/virtManager/config.py
> --- a/src/virtManager/config.py	Mon Jun 15 15:54:56 2009 +0200
> +++ b/src/virtManager/config.py	Tue Jun 16 16:21:33 2009 +0200
> @@ -237,7 +237,15 @@
>      def is_vmlist_network_traffic_visible(self):
>          return self.conf.get_bool(self.conf_dir + "/vmlist-fields/network_traffic")
>  
> +    def get_user_default_image_dir(self, conn):
> +        try:
> +            return self.conf.get_value(self.conf_dir + "/paths/default_image_path")
> +        except ValueError:
> +            return self.get_default_image_dir(conn)
>  
> +    def set_user_default_image_dir(self, dir):
> +        self.conf.set_value(self.conf_dir + "/paths/default_image_path", dir)
> +        logging.debug("Setting path to %s", dir)
>  
>      def set_vmlist_domain_id_visible(self, state):
>          self.conf.set_bool(self.conf_dir + "/vmlist-fields/domain_id", state)
> @@ -556,6 +564,14 @@
>  
>  
>      def get_default_image_dir(self, connection):
> +        # Exception for case connection argument is str (happens when
> +        # creating new domains because we don't have connection object)
> +        if str(connection) == connection:
> +            if connection == "Xen":
> +                return DEFAULT_XEN_IMAGE_DIR
> +            else:
> +                return DEFAULT_VIRT_IMAGE_DIR
> +
>          if connection.get_type() == "Xen":
>              return DEFAULT_XEN_IMAGE_DIR
>  

The hack shouldn't be necessary (see below).

> diff -r 74f1f8309b13 -r 73427fcfc222 src/virtManager/create.py
> --- a/src/virtManager/create.py	Mon Jun 15 15:54:56 2009 +0200
> +++ b/src/virtManager/create.py	Tue Jun 16 16:21:33 2009 +0200
> @@ -1004,7 +1004,8 @@
>          self.window.get_widget("config-storage-box").set_sensitive(src.get_active())
>  
>      def browse_storage(self, ignore1):
> -        f = self._browse_file(_("Locate existing storage"))
> +        folder = self.config.get_user_default_image_dir( self.capsdomain.hypervisor_type )
> +        f = self._browse_file(_("Locate existing storage"), folder=folder)
>          if f != None:
>              self.window.get_widget("config-storage-entry").set_text(f)
> 

'self.conn' contains the active connection, so you should use that rather than
self.capsdomain...

> @@ -1653,7 +1654,6 @@
>              self.detectedDistro = (None, None)
>  
>      def _browse_file(self, dialog_name, folder=None, is_media=False):
> -
>          if self.conn.is_remote() or not is_media:
>              if self.storage_browser == None:
>                  self.storage_browser = vmmStorageBrowser(self.config,
> diff -r 74f1f8309b13 -r 73427fcfc222 src/virtManager/storagebrowse.py
> --- a/src/virtManager/storagebrowse.py	Mon Jun 15 15:54:56 2009 +0200
> +++ b/src/virtManager/storagebrowse.py	Tue Jun 16 16:21:33 2009 +0200
> @@ -20,6 +20,7 @@
>  
>  import gobject
>  import gtk.glade
> +import os.path
>  
>  import traceback
>  import logging
> @@ -242,6 +243,11 @@
>      def _do_finish(self, path=None):
>          if not path:
>              path = self.current_vol().get_path()
> +
> +        # Save path to config if we use file as storage
> +        if "/dev" not in path:
> +            self.config.set_user_default_image_dir( os.path.dirname(path) )
> +

A couple things here: This will match any path which contains "/dev", you
probably want path.startswith(). Also, this will store the directory of a
chosen storage volume, which isn't what we want. If you make this chunk the
first thing that happens in the function, it should be fine.

>          self.emit("storage-browse-finish", path)
>          self.close()

Thanks,
Cole

_______________________________________________
et-mgmt-tools mailing list
et-mgmt-tools@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/et-mgmt-tools

[Index of Archives]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux