On 03/25/2014 09:45 AM, Giuseppe Scrivano wrote: > Enhance the media detection with the data provided by libosinfo, now > the installation media detection is enabled for CD/ISO images too. > > Signed-off-by: Giuseppe Scrivano <gscrivan@xxxxxxxxxx> > --- > virtManager/create.py | 55 ++++++++++++++++++++++++++++++++++++--------------- > 1 file changed, 39 insertions(+), 16 deletions(-) > > diff --git a/virtManager/create.py b/virtManager/create.py > index a368eff..1b97187 100644 > --- a/virtManager/create.py > +++ b/virtManager/create.py > @@ -132,7 +132,7 @@ class vmmCreate(vmmGObjectUI): > "on_install_url_box_changed": self.url_box_changed, > "on_install_local_cdrom_toggled": self.toggle_local_cdrom, > "on_install_local_cdrom_combo_changed": self.detect_media_os, > - "on_install_local_box_changed": self.detect_media_os, > + "on_install_local_box_changed": self.local_box_changed, > "on_install_local_browse_clicked": self.browse_iso, > "on_install_import_browse_clicked": self.browse_import, > "on_install_app_browse_clicked": self.browse_app, > @@ -551,6 +551,11 @@ class vmmCreate(vmmGObjectUI): > > self.mediacombo = vmmMediaCombo(self.conn, self.builder, self.topwin, > MEDIA_CDROM) > + def mediacombo_changed(src): > + ignore = src > + self.mediaDetected = False > + self.detect_media_os(only_local=True) > + self.mediacombo.combo.connect("changed", mediacombo_changed) > self.mediacombo.reset_state() > self.widget("install-local-cdrom-align").add( > self.mediacombo.top_box) > @@ -1117,25 +1122,31 @@ class vmmCreate(vmmGObjectUI): > > self.change_caps(self.capsguest.os_type, arch) > > - def url_box_changed(self, ignore): > + def media_box_changed(self, widget, only_local): > self.mediaDetected = False > > - # If the url_entry has focus, don't fire detect_media_os, it means > + # If the widget has focus, don't fire detect_media_os, it means > # the user is probably typing > - if self.widget("install-url-box").get_child().has_focus(): > + if self.widget(widget).get_child().has_focus(): > return > > - self.detect_media_os() > + self.detect_media_os(only_local=only_local) > + > + def url_box_changed(self, ignore): > + self.media_box_changed("install-url-box", False) > + > + def local_box_changed(self, ignore): > + self.media_box_changed("install-local-box", True) > > def should_detect_media(self): > return (self.is_detect_active() and not self.mediaDetected) > > - def detect_media_os(self, ignore1=None, forward=False): > + def detect_media_os(self, ignore1=None, forward=False, only_local=False): > if not self.should_detect_media(): > return > if not self.is_install_page(): > return > - self.start_detection(forward=forward) > + self.start_detection(forward=forward, only_local=only_local) > > def toggle_detect_os(self, src): > dodetect = src.get_active() > @@ -1190,7 +1201,8 @@ class vmmCreate(vmmGObjectUI): > is_active = src.get_active() > if is_active and self.mediacombo.get_path(): > # Local CDROM was selected with media preset, detect distro > - self.detect_media_os() > + self.mediaDetected = False > + self.detect_media_os(only_local=True) > > self.widget("install-local-cdrom-align").set_sensitive(is_active) > > @@ -1198,6 +1210,8 @@ class vmmCreate(vmmGObjectUI): > uselocal = src.get_active() > self.widget("install-local-box").set_sensitive(uselocal) > self.widget("install-local-browse").set_sensitive(uselocal) > + self.mediaDetected = False > + self.detect_media_os(only_local=True) > > def detect_visibility_changed(self, src, ignore=None): > is_visible = src.get_visible() > @@ -1249,11 +1263,7 @@ class vmmCreate(vmmGObjectUI): > INSTALL_PAGE_CONTAINER_OS] > osbox.set_visible(iscontainer) > > - # Detection only works/ is valid for URL, > - # FIXME: Also works for CDROM if running as root (since we need to > - # mount the iso/cdrom), but we should probably make this work for > - # more distros (like windows) before we enable it > - if (instpage == INSTALL_PAGE_URL): > + if instpage in (INSTALL_PAGE_ISO, INSTALL_PAGE_URL): > detectbox.show() > else: > detectbox.hide() > @@ -1968,7 +1978,7 @@ class vmmCreate(vmmGObjectUI): > if forward: > self.idle_add(self.forward, ()) > > - def start_detection(self, forward): > + def start_detection(self, forward, only_local): > if self.detectedDistro == DETECT_INPROGRESS: > return > > @@ -1983,13 +1993,26 @@ class vmmCreate(vmmGObjectUI): > > detectThread = threading.Thread(target=self.actually_detect, > name="Actual media detection", > - args=(media,)) > + args=(media, only_local,)) > detectThread.setDaemon(True) > detectThread.start() > > self.check_detection(0, forward) > > - def actually_detect(self, media): > + def actually_detect(self, media, only_local): > + # First try with libosinfo detection > + try: > + os = virtinst.osdict.lookup_os_by_media(media) > + if os: > + self.detectedDistro = os > + return > + except: > + pass > + > + if only_local: > + self.detectedDistro = DETECT_FAILED > + return > + > try: > installer = virtinst.DistroInstaller(self.conn.get_backend()) > installer.location = media > I think we should try and move this into DistroInstaller, since we will want to do basically the same thing from virt-install eventually. - Cole _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list