s/optical/mediadev/g for many internal routines

Make the move towards generalizing these for not just CDROM media, but also
floppy devices (and others in the future).
This commit is contained in:
Cole Robinson 2009-12-10 20:04:26 -05:00
parent b9bf03b896
commit ed911036f1
6 changed files with 99 additions and 78 deletions

View File

@ -24,14 +24,20 @@ import virtinst
import virtManager.uihelpers as uihelpers
import virtManager.util as util
from virtManager.mediadev import MEDIA_CDROM
from virtManager.storagebrowse import vmmStorageBrowser
from virtManager.error import vmmErrorDialog
class vmmChooseCD(gobject.GObject):
__gsignals__ = {"cdrom-chosen": (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE,
(str, str, str)), # type, source, target
}
__gsignals__ = {
"cdrom-chosen": (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE,
(str, str, str)), # type, source, target
}
IS_FLOPPY = 1
IS_CDROM = 2
def __init__(self, config, dev_id_info, connection):
self.__gobject_init__()
self.window = gtk.glade.XML(config.get_glade_dir() + "/vmm-choose-cd.glade", "vmm-choose-cd", domain="virt-manager")
@ -133,10 +139,10 @@ class vmmChooseCD(gobject.GObject):
def initialize_opt_media(self):
widget = self.window.get_widget("cd-path")
warn = self.window.get_widget("cd-path-warn")
error = self.conn.optical_error
uihelpers.init_optical_combo(widget)
uihelpers.populate_optical_combo(self.conn, widget)
error = self.conn.mediadev_error
uihelpers.init_mediadev_combo(widget)
uihelpers.populate_mediadev_combo(self.conn, widget, MEDIA_CDROM)
if error:
warn.show()

View File

@ -79,9 +79,9 @@ class vmmConnection(gobject.GObject):
"nodedev-removed": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
[str, str]),
"optical-added": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
"mediadev-added": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
[object]),
"optical-removed": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
"mediadev-removed": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
[str]),
"resources-sampled": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
@ -126,7 +126,7 @@ class vmmConnection(gobject.GObject):
# Physical network interfaces: name (eth0) -> vmmNetDevice
self.netdevs = {}
# Physical media devices: vmmMediaDevice.key -> vmmMediaDevice
self.opticaldevs = {}
self.mediadevs = {}
# Connection Storage pools: name -> vmmInterface
self.interfaces = {}
# Connection Storage pools: UUID -> vmmStoragePool
@ -147,9 +147,9 @@ class vmmConnection(gobject.GObject):
self.netdev_error = ""
self.netdev_use_libvirt = False
self.optical_initialized = False
self.optical_error = ""
self.optical_use_libvirt = False
self.mediadev_initialized = False
self.mediadev_error = ""
self.mediadev_use_libvirt = False
#################
# Init routines #
@ -206,22 +206,22 @@ class vmmConnection(gobject.GObject):
else:
logging.debug("Using HAL for netdev enumeration")
def _init_optical(self):
def _init_mediadev(self):
if self.is_nodedev_capable():
try:
self.connect("nodedev-added", self._nodedev_optical_added)
self.connect("nodedev-removed", self._nodedev_optical_removed)
self.optical_use_libvirt = True
self.connect("nodedev-added", self._nodedev_mediadev_added)
self.connect("nodedev-removed", self._nodedev_mediadev_removed)
self.mediadev_use_libvirt = True
except Exception, e:
self.optical_error = _("Could not build media "
"list via libvirt: %s") % str(e)
self.mediadev_error = _("Could not build media "
"list via libvirt: %s") % str(e)
elif self.get_hal_helper():
hal_helper = self.get_hal_helper()
if self.is_remote():
self.optical_error = _("Libvirt version does not support "
"media listing.")
self.mediadev_error = _("Libvirt version does not support "
"media listing.")
else:
error = hal_helper.get_init_error()
@ -230,20 +230,20 @@ class vmmConnection(gobject.GObject):
self._set_hal_remove_sig(hal_helper)
else:
self.optical_error = _("Could not initialize HAL for "
"media listing: %s") % error
self.mediadev_error = _("Could not initialize HAL for "
"media listing: %s") % error
else:
self.optical_error = _("Libvirt version does not support "
"media listing.")
self.mediadev_error = _("Libvirt version does not support "
"media listing.")
self.optical_initialized = True
if self.optical_error:
logging.debug(self.optical_error)
self.mediadev_initialized = True
if self.mediadev_error:
logging.debug(self.mediadev_error)
else:
if self.optical_use_libvirt:
logging.debug("Using libvirt API for optical enumeration")
if self.mediadev_use_libvirt:
logging.debug("Using libvirt API for mediadev enumeration")
else:
logging.debug("Using HAL for optical enumeration")
logging.debug("Using HAL for mediadev enumeration")
########################
# General data getters #
@ -300,9 +300,9 @@ class vmmConnection(gobject.GObject):
if name == "vm-added":
for uuid in self.vms.keys():
self.emit("vm-added", self.uri, uuid)
elif name == "optical-added":
for dev in self.opticaldevs.values():
self.emit("optical-added", dev)
elif name == "mediadev-added":
for dev in self.mediadevs.values():
self.emit("mediadev-added", dev)
elif name == "nodedev-added":
for key in self.nodedevs.keys():
self.emit("nodedev-added", self.get_uri(), key)
@ -667,12 +667,13 @@ class vmmConnection(gobject.GObject):
# Update listeners #
####################
def _remove_optical(self, key):
del(self.opticaldevs[key])
self.emit("optical-removed", key)
def _add_optical(self, key, dev):
self.opticaldevs[key] = dev
self.emit("optical-added", dev)
# Generic media device helpers
def _remove_mediadev(self, key):
del(self.mediadevs[key])
self.emit("mediadev-removed", key)
def _add_mediadev(self, key, dev):
self.mediadevs[key] = dev
self.emit("mediadev-added", dev)
def _haldev_removed(self, ignore, hal_path):
# Physical net device
@ -681,9 +682,9 @@ class vmmConnection(gobject.GObject):
del self.netdevs[name]
return
for key, obj in self.opticaldevs.items():
for key, obj in self.mediadevs.items():
if key == hal_path:
self._remove_optical(key)
self._remove_mediadev(key)
def _netdev_added(self, ignore, netdev):
name = netdev.get_name()
@ -692,15 +693,16 @@ class vmmConnection(gobject.GObject):
self.netdevs[name] = netdev
# Optical HAL listener
def _optical_added(self, ignore, dev):
key = dev.get_key()
if self.opticaldevs.has_key(key):
if self.mediadevs.has_key(key):
return
self._add_optical(key, dev)
self._add_mediadev(key, dev)
def _nodedev_optical_added(self, ignore1, ignore2, name):
if self.opticaldevs.has_key(name):
def _nodedev_mediadev_added(self, ignore1, ignore2, name):
if self.mediadevs.has_key(name):
return
vobj = self.get_nodedev(name)
@ -708,13 +710,13 @@ class vmmConnection(gobject.GObject):
if not mediadev:
return
self._add_optical(name, mediadev)
self._add_mediadev(name, mediadev)
def _nodedev_optical_removed(self, ignore1, ignore2, name):
if not self.opticaldevs.has_key(name):
def _nodedev_mediadev_removed(self, ignore1, ignore2, name):
if not self.mediadevs.has_key(name):
return
self._remove_optical(name)
self._remove_mediadev(name)
######################################
# Connection closing/opening methods #
@ -1340,8 +1342,8 @@ class vmmConnection(gobject.GObject):
if not self.netdev_initialized:
self._init_netdev()
if not self.optical_initialized:
self._init_optical()
if not self.mediadev_initialized:
self._init_mediadev()
def tick_send_signals():
"""

View File

@ -32,6 +32,7 @@ import virtinst
import virtManager.uihelpers as uihelpers
from virtManager import util
from virtManager.mediadev import MEDIA_CDROM
from virtManager.error import vmmErrorDialog
from virtManager.asyncjob import vmmAsyncJob
from virtManager.createmeter import vmmCreateMeter
@ -244,7 +245,7 @@ class vmmCreate(gobject.GObject):
# Physical CD-ROM model
cd_list = self.window.get_widget("install-local-cdrom-combo")
uihelpers.init_optical_combo(cd_list)
uihelpers.init_mediadev_combo(cd_list)
# Networking
# [ interface type, device name, label, sensitive ]
@ -410,13 +411,14 @@ class vmmCreate(gobject.GObject):
cdrom_list = self.window.get_widget("install-local-cdrom-combo")
cdrom_warn = self.window.get_widget("install-local-cdrom-warn")
sigs = uihelpers.populate_optical_combo(self.conn, cdrom_list)
sigs = uihelpers.populate_mediadev_combo(self.conn, cdrom_list,
MEDIA_CDROM)
self.conn_signals.extend(sigs)
if self.conn.optical_error:
if self.conn.mediadev_error:
cdrom_warn.show()
cdrom_option.set_sensitive(False)
util.tooltip_wrapper(cdrom_warn, self.conn.optical_error)
util.tooltip_wrapper(cdrom_warn, self.conn.mediadev_error)
else:
cdrom_warn.hide()

View File

@ -23,6 +23,9 @@ import logging
import virtinst
MEDIA_FLOPPY = "floppy"
MEDIA_CDROM = "cdrom"
MEDIA_TIMEOUT = 3
class vmmMediaDevice(gobject.GObject):
@ -38,9 +41,10 @@ class vmmMediaDevice(gobject.GObject):
if nodedev.device_type != "storage":
return None
if nodedev.drive_type != "cdrom":
if nodedev.drive_type not in [ MEDIA_CDROM, MEDIA_FLOPPY]:
return None
drvtype = nodedev.drive_type
path = nodedev.block
key = nodedev.name
has_media = nodedev.media_available
@ -49,13 +53,13 @@ class vmmMediaDevice(gobject.GObject):
nodedev_obj = conn.vmm.nodeDeviceLookupByName(key)
obj = vmmMediaDevice(path, key, has_media, media_label, media_key,
nodedev_obj)
nodedev_obj, drvtype)
obj.enable_poll_for_media()
return obj
def __init__(self, path, key, has_media, media_label, media_key,
nodedev_obj = None):
nodedev_obj = None, media_type = MEDIA_CDROM):
self.__gobject_init__()
self.path = path
@ -63,6 +67,7 @@ class vmmMediaDevice(gobject.GObject):
self._has_media = has_media
self.media_label = media_label
self.media_key = media_key
self.media_type = media_type
self.nodedev_obj = nodedev_obj
self.poll_signal = None
@ -73,6 +78,9 @@ class vmmMediaDevice(gobject.GObject):
def get_key(self):
return self.key
def get_media_type(self):
return self.media_type
def has_media(self):
return self._has_media
def get_media_label(self):

View File

@ -285,11 +285,11 @@ def generate_macaddr(conn):
return newmac
##############################################
# Populate optical widget (choosecd, create) #
##############################################
############################################
# Populate media widget (choosecd, create) #
############################################
def init_optical_combo(widget, empty_sensitive=False):
def init_mediadev_combo(widget, empty_sensitive=False):
# [Device path, pretty label, has_media?, device key, media key,
# vmmMediaDevice]
model = gtk.ListStore(str, str, bool, str, str)
@ -302,16 +302,16 @@ def init_optical_combo(widget, empty_sensitive=False):
if not empty_sensitive:
widget.add_attribute(text, 'sensitive', 2)
def populate_optical_combo(conn, widget):
def populate_mediadev_combo(conn, widget, devtype):
sigs = []
widget.get_model().clear()
sigs.append(conn.connect("optical-added", optical_added, widget))
sigs.append(conn.connect("optical-removed", optical_removed, widget))
sigs.append(conn.connect("mediadev-added", mediadev_added, widget, devtype))
sigs.append(conn.connect("mediadev-removed", mediadev_removed, widget))
widget.set_active(-1)
optical_set_default_selection(widget)
mediadev_set_default_selection(widget)
return sigs
@ -322,7 +322,7 @@ def set_row_from_object(row, obj):
row[OPTICAL_DEV_KEY] = obj.get_key()
row[OPTICAL_MEDIA_KEY] = obj.get_media_key()
def optical_removed(ignore_helper, key, widget):
def mediadev_removed(ignore_helper, key, widget):
model = widget.get_model()
active = widget.get_active()
idx = 0
@ -339,22 +339,25 @@ def optical_removed(ignore_helper, key, widget):
idx += 1
optical_set_default_selection(widget)
mediadev_set_default_selection(widget)
def optical_added(ignore_helper, newobj, widget):
def mediadev_added(ignore_helper, newobj, widget, devtype):
model = widget.get_model()
newobj.connect("media-added", optical_media_changed, widget)
newobj.connect("media-removed", optical_media_changed, widget)
if newobj.get_media_type() != devtype:
return
newobj.connect("media-added", mediadev_media_changed, widget)
newobj.connect("media-removed", mediadev_media_changed, widget)
# Brand new device
row = [None, None, None, None, None]
set_row_from_object(row, newobj)
model.append(row)
optical_set_default_selection(widget)
mediadev_set_default_selection(widget)
def optical_media_changed(newobj, widget):
def mediadev_media_changed(newobj, widget):
model = widget.get_model()
active = widget.get_active()
idx = 0
@ -374,9 +377,9 @@ def optical_media_changed(newobj, widget):
idx = idx + 1
optical_set_default_selection(widget)
mediadev_set_default_selection(widget)
def optical_set_default_selection(widget):
def mediadev_set_default_selection(widget):
# Set the first active cdrom device as selected, otherwise none
model = widget.get_model()
idx = 0

View File

@ -125,7 +125,7 @@
<widget class="GtkLabel" id="label36">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">ISO _Location:</property>
<property name="label" translatable="yes">_Location:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">iso-path</property>
</widget>
@ -194,7 +194,7 @@
</widget>
</child>
<child>
<widget class="GtkLabel" id="label35">
<widget class="GtkLabel" id="title-label">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;CD Source Device Or File&lt;/b&gt;</property>
<property name="use_markup">True</property>