Keep a list of used install ISO paths.

Store these in gconf on a per hostname basis, since a local path likely
isn't relevant for a connection on another host.
This commit is contained in:
Cole Robinson 2009-05-11 11:00:03 -04:00
parent b619961f29
commit 3ad177128c
4 changed files with 61 additions and 36 deletions

View File

@ -457,29 +457,27 @@ class vmmConfig:
def set_url_list_length(self, length): def set_url_list_length(self, length):
self.conf.set_int(self.conf_dir + "/urls/url-list-length", length) self.conf.set_int(self.conf_dir + "/urls/url-list-length", length)
def add_media_url(self, url): def _url_add_helper(self, gconf_path, url):
urls = self.conf.get_list(self.conf_dir + "/urls/media", gconf.VALUE_STRING) urls = self.conf.get_list(gconf_path, gconf.VALUE_STRING)
if urls == None: if urls == None:
urls = [] urls = []
if urls.count(url) == 0 and len(url) > 0 and not url.isspace(): if urls.count(url) == 0 and len(url) > 0 and not url.isspace():
#the url isn't already in the list, so add it # The url isn't already in the list, so add it
urls.insert(0,url) urls.insert(0,url)
length = self.get_url_list_length() length = self.get_url_list_length()
if len(urls) > length: if len(urls) > length:
del urls[len(urls) -1] del urls[len(urls) -1]
self.conf.set_list(self.conf_dir + "/urls/media", gconf.VALUE_STRING, urls) self.conf.set_list(gconf_path, gconf.VALUE_STRING, urls)
def add_media_url(self, url):
self._url_add_helper(self.conf_dir + "/urls/media", url)
def add_kickstart_url(self, url): def add_kickstart_url(self, url):
urls = self.conf.get_list(self.conf_dir + "/urls/kickstart", gconf.VALUE_STRING) self._url_add_helper(self.conf_dir + "/urls/kickstart", url)
if urls == None:
urls = [] def add_iso_path(self, path):
if urls.count(url) == 0: self._url_add_helper(self.conf_dir + "/urls/local_media", path)
# the url isn't already in the list, so add it
urls.insert(0,url)
length = self.get_url_list_length()
if len(urls) > length:
del urls[len(urls) -1]
self.conf.set_list(self.conf_dir + "/urls/kickstart", gconf.VALUE_STRING, urls)
def add_connection(self, uri): def add_connection(self, uri):
uris = self.conf.get_list(self.conf_dir + "/connections/uris", gconf.VALUE_STRING) uris = self.conf.get_list(self.conf_dir + "/connections/uris", gconf.VALUE_STRING)
@ -524,10 +522,15 @@ class vmmConfig:
gconf.VALUE_STRING, uris) gconf.VALUE_STRING, uris)
def get_media_urls(self): def get_media_urls(self):
return self.conf.get_list(self.conf_dir + "/urls/media", gconf.VALUE_STRING) return self.conf.get_list(self.conf_dir + "/urls/media",
gconf.VALUE_STRING)
def get_kickstart_urls(self): def get_kickstart_urls(self):
return self.conf.get_list(self.conf_dir + "/urls/kickstart", gconf.VALUE_STRING) return self.conf.get_list(self.conf_dir + "/urls/kickstart",
gconf.VALUE_STRING)
def get_iso_paths(self):
return self.conf.get_list(self.conf_dir + "/urls/local_media",
gconf.VALUE_STRING)
def get_connections(self): def get_connections(self):
return self.conf.get_list(self.conf_dir + "/connections/uris", gconf.VALUE_STRING) return self.conf.get_list(self.conf_dir + "/connections/uris", gconf.VALUE_STRING)

View File

@ -1263,5 +1263,12 @@ class vmmConnection(gobject.GObject):
return True return True
return False return False
# Per-Connection preferences
def config_add_iso_path(self, path):
self.config.set_perhost(self.get_uri(), self.config.add_iso_path, path)
def config_get_iso_paths(self):
return self.config.get_perhost(self.get_uri(),
self.config.get_iso_paths)
gobject.type_register(vmmConnection) gobject.type_register(vmmConnection)

View File

@ -108,7 +108,7 @@ class vmmCreate(gobject.GObject):
"on_install_url_box_changed": self.url_box_changed, "on_install_url_box_changed": self.url_box_changed,
"on_install_local_cdrom_toggled": self.local_cdrom_toggled, "on_install_local_cdrom_toggled": self.local_cdrom_toggled,
"on_install_local_cdrom_combo_changed": self.detect_media_os, "on_install_local_cdrom_combo_changed": self.detect_media_os,
"on_install_local_entry_activate": self.detect_media_os, "on_install_local_box_changed": self.detect_media_os,
"on_install_local_browse_clicked": self.browse_iso, "on_install_local_browse_clicked": self.browse_iso,
"on_install_detect_os_toggled": self.toggle_detect_os, "on_install_detect_os_toggled": self.toggle_detect_os,
@ -183,6 +183,13 @@ class vmmCreate(gobject.GObject):
conn_list.pack_start(text, True) conn_list.pack_start(text, True)
conn_list.add_attribute(text, 'text', 1) conn_list.add_attribute(text, 'text', 1)
# ISO media list
iso_list = self.window.get_widget("install-local-box")
iso_model = gtk.ListStore(str)
iso_list.set_model(iso_model)
iso_list.set_text_column(0)
self.window.get_widget("install-local-box").child.connect("activate", self.detect_media_os)
# Lists for the install urls # Lists for the install urls
media_url_list = self.window.get_widget("install-url-box") media_url_list = self.window.get_widget("install-url-box")
media_url_model = gtk.ListStore(str) media_url_model = gtk.ListStore(str)
@ -287,7 +294,9 @@ class vmmCreate(gobject.GObject):
self.window.get_widget("install-os-type").set_active(0) self.window.get_widget("install-os-type").set_active(0)
# Install local/iso # Install local/iso
self.window.get_widget("install-local-entry").set_text("") self.window.get_widget("install-local-box").child.set_text("")
iso_model = self.window.get_widget("install-local-box").get_model()
self.populate_media_model(iso_model, self.conn.config_get_iso_paths())
# Install URL # Install URL
self.window.get_widget("install-urlopts-entry").set_text("") self.window.get_widget("install-urlopts-entry").set_text("")
@ -295,8 +304,8 @@ class vmmCreate(gobject.GObject):
self.window.get_widget("install-url-box").child.set_text("") self.window.get_widget("install-url-box").child.set_text("")
urlmodel = self.window.get_widget("install-url-box").get_model() urlmodel = self.window.get_widget("install-url-box").get_model()
ksmodel = self.window.get_widget("install-ks-box").get_model() ksmodel = self.window.get_widget("install-ks-box").get_model()
self.populate_url_model(urlmodel, self.config.get_media_urls()) self.populate_media_model(urlmodel, self.config.get_media_urls())
self.populate_url_model(ksmodel, self.config.get_kickstart_urls()) self.populate_media_model(ksmodel, self.config.get_kickstart_urls())
# Mem / CPUs # Mem / CPUs
self.window.get_widget("config-mem").set_value(512) self.window.get_widget("config-mem").set_value(512)
@ -604,7 +613,7 @@ class vmmCreate(gobject.GObject):
model.append([variant, model.append([variant,
virtinst.FullVirtGuest.get_os_variant_label(_type, virtinst.FullVirtGuest.get_os_variant_label(_type,
variant)]) variant)])
def populate_url_model(self, model, urls): def populate_media_model(self, model, urls):
model.clear() model.clear()
for url in urls: for url in urls:
model.append([url]) model.append([url])
@ -789,11 +798,14 @@ class vmmCreate(gobject.GObject):
return (distro, variant, dlabel, vlabel) return (distro, variant, dlabel, vlabel)
def get_config_local_media(self): def get_config_local_media(self, store_media=False):
if self.window.get_widget("install-local-cdrom").get_active(): if self.window.get_widget("install-local-cdrom").get_active():
return self.window.get_widget("install-local-cdrom-combo").get_active_text() return self.window.get_widget("install-local-cdrom-combo").get_active_text()
else: else:
return self.window.get_widget("install-local-entry").get_text() ret = self.window.get_widget("install-local-box").child.get_text()
if ret and store_media:
self.conn.config_add_iso_path(ret)
return ret
def get_config_detectable_media(self): def get_config_detectable_media(self):
instpage = self.get_config_install_page() instpage = self.get_config_install_page()
@ -806,14 +818,14 @@ class vmmCreate(gobject.GObject):
return media return media
def get_config_url_info(self): def get_config_url_info(self, store_media=False):
media = self.window.get_widget("install-url-box").get_active_text().strip() media = self.window.get_widget("install-url-box").get_active_text().strip()
extra = self.window.get_widget("install-urlopts-entry").get_text().strip() extra = self.window.get_widget("install-urlopts-entry").get_text().strip()
ks = self.window.get_widget("install-ks-box").get_active_text().strip() ks = self.window.get_widget("install-ks-box").get_active_text().strip()
if media: if media and store_media:
self.config.add_media_url(media) self.config.add_media_url(media)
if ks: if ks and store_media:
self.config.add_kickstart_url(ks) self.config.add_kickstart_url(ks)
return (media.strip(), extra.strip(), ks.strip()) return (media.strip(), extra.strip(), ks.strip())
@ -974,7 +986,7 @@ class vmmCreate(gobject.GObject):
def toggle_local_iso(self, src): def toggle_local_iso(self, src):
uselocal = src.get_active() uselocal = src.get_active()
self.window.get_widget("install-local-entry").set_sensitive(uselocal) self.window.get_widget("install-local-box").set_sensitive(uselocal)
self.window.get_widget("install-local-browse").set_sensitive(uselocal) self.window.get_widget("install-local-browse").set_sensitive(uselocal)
def detect_visibility_changed(self, src, ignore=None): def detect_visibility_changed(self, src, ignore=None):
@ -993,8 +1005,8 @@ class vmmCreate(gobject.GObject):
def browse_iso(self, ignore1=None, ignore2=None): def browse_iso(self, ignore1=None, ignore2=None):
f = self._browse_file(_("Locate ISO Image"), is_media=True) f = self._browse_file(_("Locate ISO Image"), is_media=True)
if f != None: if f != None:
self.window.get_widget("install-local-entry").set_text(f) self.window.get_widget("install-local-box").child.set_text(f)
self.window.get_widget("install-local-entry").activate() self.window.get_widget("install-local-box").activate()
def toggle_enable_storage(self, src): def toggle_enable_storage(self, src):
self.window.get_widget("config-storage-box").set_sensitive(src.get_active()) self.window.get_widget("config-storage-box").set_sensitive(src.get_active())
@ -1015,7 +1027,7 @@ class vmmCreate(gobject.GObject):
notebook = self.window.get_widget("create-pages") notebook = self.window.get_widget("create-pages")
curpage = notebook.get_current_page() curpage = notebook.get_current_page()
if curpage == PAGE_INSTALL: if curpage == PAGE_INSTALL:
self.window.get_widget("install-local-entry").set_text(path) self.window.get_widget("install-local-box").child.set_text(path)
elif curpage == PAGE_STORAGE: elif curpage == PAGE_STORAGE:
self.window.get_widget("config-storage-entry").set_text(path) self.window.get_widget("config-storage-entry").set_text(path)
@ -1225,6 +1237,11 @@ class vmmCreate(gobject.GObject):
except ValueError, e: except ValueError, e:
return self.err.val_err(_("Error setting OS information."), return self.err.val_err(_("Error setting OS information."),
str(e)) str(e))
# Validation passed, store the install path (if there is one) in
# gconf
self.get_config_local_media(store_media=True)
self.get_config_url_info(store_media=True)
return True return True
def validate_mem_page(self): def validate_mem_page(self):

View File

@ -410,11 +410,9 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="left_padding">20</property> <property name="left_padding">20</property>
<child> <child>
<widget class="GtkEntry" id="install-local-entry"> <widget class="GtkComboBoxEntry" id="install-local-box">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property> <signal name="changed" handler="on_install_local_box_changed"/>
<property name="can_focus">True</property>
<signal name="activate" handler="on_install_local_entry_activate"/>
</widget> </widget>
</child> </child>
</widget> </widget>