class DeviceListener: """ [es] Esta es la clase principal de Hermes. Desde aqui se monitoriza el sistema y cuando se detectan alertas sobre la conexión, desconexón o modificación de algún componente hardware del sistema se ejecutan las acciones correspondientes, dependiendo del caso. Por ejemplo, si se detecta la conexion "en caliente" de un nuevo dispositivo, se lanza un procedimiento de reconocimiento por comparación con la base de hardware reconocido (actores) y si se identifica positivamente el nuevo dispositivo, se ponen en marcha las actuaciones definidas para simplificar la inserción del nuevo hardware en el entorno de usuario. --------------------------------------------------------------------------- [en] This is Hermes main class. It does the system monitoring so when changes on the state of any of the system hardware components are detected, it executes the proer actions, depending on the case. For example, if the connection of a new hardware is detected, it launches an identification process by comparing with the known hardware base (named actors) and if a matching is found it starts the proper procedure to simplify the insertion of the hardware in the user environment. """ def __init__(self, message_render, with_cold=True): """ [es] Registramos el monitor de cambios en el hardware y lo conectamos a las señales del bus que alertan de la conexión o desconexión de dispositivos. Parametros: message_render: interfaz a la que enviar las notificaciones with_cold: booleano para indicar si se lanza el Monitor de dispositivos conectados en frio ----------------------------------------------------------------------- [en] Register the device listener and attaches it to the corresponding bus signals that alert about devices connection or discnnection. Params: message_render: interface for sending notifications through with_cold: boolean indicating wether we launch the Cold Plug Listener """ self.message_render = message_render self.logger = logging.getLogger() self.bus = dbus.SystemBus() obj = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') self.hal_manager = dbus.Interface(obj, 'org.freedesktop.Hal.Manager') self.hal_manager.connect_to_signal('DeviceAdded', self.on_device_added) self.hal_manager.connect_to_signal('DeviceRemoved', self.on_device_removed) self.udi_dict = {} self.modify_handler_dict = {} self.devicelist = DeviceList() self.__init_actors() if with_cold: coldplug = ColdPlugListener(self) coldplug.start() self.logger.info(_("Device Listener started")) def on_device_added(self, udi, *args): """ [es] Cuando se detecta la conexión de un nuevo dispositivo se identifica el actor y se invoca el metodo on_added del mismo. Si no se reconoce el dispositivo se muestra un mensaje generico de "Dispositivo Desconocido Conectado" ----------------------------------------------------------------------- [en] When a new device connection is detected we try to identify the corresponding actor and we launch its on_added method. If device is not recognized then we show up a generic "Unknown Device Connected" message """ self.logger.debug(_("Device Added") + ": " + str(udi)) self.devicelist.save() obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') properties = obj.GetAllProperties() actor = self.get_actor_from_properties(properties) if actor: print print print _("Connected") + " ################################" self.__print_properties(properties) try: actor.on_added() except: self.logger.warning(str(traceback.format_exc())) # else: # self.message_render.show_warning(_("Warning"), # _("Unknown Device Connected") + ".") def on_device_removed(self, udi, *args): """ [es] Cuando se detecta la desconexion de un dispositivo se invoca el metodo on_removed definido para el actor correspondiente. Si no se reconoce el dispositivo se da un mensaje genérico de "Dispositivo Desconocido Desconectado" ----------------------------------------------------------------------- [en] When a device disconnection is detected we launch the on_removed method defined for the corresponding actor. If device is not recognized then we show up a generic "Unknown Device Removed" message """ self.logger.debug(_("Device Removed") + ": " + str(udi)) self.devicelist.save() if self.udi_dict.has_key(udi): disp = self.udi_dict[udi] try: disp.on_removed() except: self.logger.warning(str(traceback.format_exc())) print print print _("Disconnected") + " ################################" self.__print_properties(disp.properties) del self.udi_dict[udi] # else: # self.message_render.show_warning(_("Warning"), # _("Unknown Device Removed") + ".") def on_property_modified(self, udi, num, values): """ [es] Cuando se detecta la modificación de una propiedad de un dispositivo conectado se invoca el metodo on_property_modified definido para el actor correspondiente ----------------------------------------------------------------------- [en] When a property modification from a connected device is detected we launch the on_property_modified method defined for the corresponding actor """ for ele in values: key = ele[0] if self.udi_dict.has_key(udi): # [es] Actualizamos las propiedades del objeto actor # [en] Actualize actor object properties actor = self.udi_dict[udi] obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') actor.properties = obj.GetAllProperties() print print print "#############################################" print _("Property Modified:") print _("udi:"), udi print key, ':', actor.properties[key] print "#############################################" try: actor.on_modified(key) except Exception, e: self.logger.warning(str(traceback.format_exc()))
class DeviceListener: def __init__(self, message_render, with_cold=True): self.message_render = message_render self.logger = logging.getLogger() # Inicialize self.bus = dbus.SystemBus() obj = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') self.hal_manager = dbus.Interface(obj, 'org.freedesktop.Hal.Manager') self.hal_manager.connect_to_signal('DeviceAdded', self.on_device_added) self.hal_manager.connect_to_signal('DeviceRemoved', self.on_device_removed) self.udi_dict = {} self.modify_handler_dict = {} self.devicelist = DeviceList() self.__init_actors() if with_cold: coldplug = ColdPlugListener(self) coldplug.start() self.logger.info("DeviceListener iniciado") def on_device_added(self, udi, *args): self.logger.debug("DeviceAdded: " + str(udi)) self.devicelist.save() obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') properties = obj.GetAllProperties() print print print "#############################################" print "CONNECTED ################################" print "#############################################" self.__print_properties(properties) actor = self.get_actor_from_properties(properties) if actor: try: actor.on_added() except: self.logger.warning(str(traceback.format_exc())) #from actors.deviceactor import DeviceActor #if actor.__class__ == DeviceActor: # if properties.has_key('info.product') and \ # properties['info.product'] != '': # product = properties['info.product'] # self.message_render.show_info(_("Information"), # _("Device CONNECTED:") + "\:n %s" % (product,)) # else: # self.message_render.show_warning(_("Warning"), # _("Device detected, but unidentificated")) def on_device_removed(self, udi, *args): self.logger.debug("DeviceRemoved: " + str(udi)) self.devicelist.save() if self.udi_dict.has_key(udi): disp = self.udi_dict[udi] try: disp.on_removed() except: self.logger.warning(str(traceback.format_exc())) print print print "#############################################" print "DISCONNECTED ################################" print "#############################################" self.__print_properties(disp.properties) #from actors.deviceactor import DeviceActor #if disp.__class__ == DeviceActor: # properties = disp.properties # if properties.has_key('info.product') and \ # properties['info.product'] != '': # product = properties['info.product'] # self.message_render.show_info(_("Information"), # _("Device DISCONNECTED:") + "\n %s" % product) del self.udi_dict[udi] else: self.message_render.show_warning(_("Warning"), _("Device REMOVED.")) def on_property_modified(self, udi, num, values): for ele in values: key = ele[0] if self.udi_dict.has_key(udi): # Actualizamos las propiedades del objeto actor actor = self.udi_dict[udi] obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') actor.properties = obj.GetAllProperties() print print print "#############################################" print "MODIFIED PROPERTY:" print "udi:", udi print key, ':', actor.properties[key] print "#############################################" try: actor.on_modified(key) except Exception, e: self.logger.warning(str(traceback.format_exc()))
class DeviceListener: def __init__(self, message_render, with_cold = True): self.message_render = message_render self.logger = logging.getLogger() # Inicialize self.bus = dbus.SystemBus() obj = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') self.hal_manager = dbus.Interface(obj, 'org.freedesktop.Hal.Manager') self.hal_manager.connect_to_signal('DeviceAdded', self.on_device_added) self.hal_manager.connect_to_signal('DeviceRemoved', self.on_device_removed) self.udi_dict = {} self.modify_handler_dict = {} self.devicelist = DeviceList() self.__init_actors() if with_cold: coldplug = ColdPlugListener(self) coldplug.start() self.logger.info("DeviceListener iniciado") def on_device_added(self, udi, *args): self.logger.debug("DeviceAdded: " + str(udi)) self.devicelist.save() obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') properties = obj.GetAllProperties() print print print "#############################################" print "CONNECTED ################################" print "#############################################" self.__print_properties(properties) actor = self.get_actor_from_properties(properties) if actor: try: actor.on_added() except: self.logger.warning(str(traceback.format_exc())) def on_device_removed(self, udi, *args): self.logger.debug("DeviceRemoved: " + str(udi)) self.devicelist.save() if self.udi_dict.has_key(udi): disp = self.udi_dict[udi] try: disp.on_removed() except: self.logger.warning(str(traceback.format_exc())) print print print "#############################################" print "DISCONNECTED ################################" print "#############################################" self.__print_properties(disp.properties) del self.udi_dict[udi] else: self.message_render.show_warning(_("Warning"), _("Device REMOVED.")) def on_property_modified(self, udi, num, values): for ele in values: key = ele[0] if self.udi_dict.has_key(udi): # Actualizamos las propiedades del objeto actor actor = self.udi_dict[udi] obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') actor.properties = obj.GetAllProperties() print print print "#############################################" print "MODIFIED PROPERTY:" print "udi:", udi print key, ':', actor.properties[key] print "#############################################" try: actor.on_modified(key) except Exception, e: self.logger.warning(str(traceback.format_exc()))
class DeviceListener: """ [es] Esta es la clase principal de Hermes. Desde aqui se monitoriza el sistema y cuando se detectan alertas sobre la conexión, desconexón o modificación de algún componente hardware del sistema se ejecutan las acciones correspondientes, dependiendo del caso. Por ejemplo, si se detecta la conexion "en caliente" de un nuevo dispositivo, se lanza un procedimiento de reconocimiento por comparación con la base de hardware reconocido (actores) y si se identifica positivamente el nuevo dispositivo, se ponen en marcha las actuaciones definidas para simplificar la inserción del nuevo hardware en el entorno de usuario. --------------------------------------------------------------------------- [en] This is Hermes main class. It does the system monitoring so when changes on the state of any of the system hardware components are detected, it executes the proer actions, depending on the case. For example, if the connection of a new hardware is detected, it launches an identification process by comparing with the known hardware base (named actors) and if a matching is found it starts the proper procedure to simplify the insertion of the hardware in the user environment. """ def __init__(self, message_render, with_cold = True): """ [es] Registramos el monitor de cambios en el hardware y lo conectamos a las señales del bus que alertan de la conexión o desconexión de dispositivos. Parametros: message_render: interfaz a la que enviar las notificaciones with_cold: booleano para indicar si se lanza el Monitor de dispositivos conectados en frio ----------------------------------------------------------------------- [en] Register the device listener and attaches it to the corresponding bus signals that alert about devices connection or discnnection. Params: message_render: interface for sending notifications through with_cold: boolean indicating wether we launch the Cold Plug Listener """ self.message_render = message_render self.logger = logging.getLogger() self.bus = dbus.SystemBus() obj = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') self.hal_manager = dbus.Interface(obj, 'org.freedesktop.Hal.Manager') self.hal_manager.connect_to_signal('DeviceAdded', self.on_device_added) self.hal_manager.connect_to_signal('DeviceRemoved', self.on_device_removed) self.udi_dict = {} self.modify_handler_dict = {} self.devicelist = DeviceList() self.__init_actors() if with_cold: coldplug = ColdPlugListener(self) coldplug.start() self.logger.info(_("Device Listener started")) def on_device_added(self, udi, *args): """ [es] Cuando se detecta la conexión de un nuevo dispositivo se identifica el actor y se invoca el metodo on_added del mismo. Si no se reconoce el dispositivo se muestra un mensaje generico de "Dispositivo Desconocido Conectado" ----------------------------------------------------------------------- [en] When a new device connection is detected we try to identify the corresponding actor and we launch its on_added method. If device is not recognized then we show up a generic "Unknown Device Connected" message """ self.logger.debug(_("Device Added") + ": " + str(udi)) self.devicelist.save() obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') properties = obj.GetAllProperties() print print print _("Connected") + " ################################" self.__print_properties(properties) actor = self.get_actor_from_properties(properties) if actor: try: actor.on_added() except: self.logger.warning(str(traceback.format_exc())) self.message_render.show_warning(_("Warning"), _("Unknown Device Connected")+".") def on_device_removed(self, udi, *args): """ [es] Cuando se detecta la desconexion de un dispositivo se invoca el metodo on_removed definido para el actor correspondiente. Si no se reconoce el dispositivo se da un mensaje genérico de "Dispositivo Desconocido Desconectado" ----------------------------------------------------------------------- [en] When a device disconnection is detected we launch the on_removed method defined for the corresponding actor. If device is not recognized then we show up a generic "Unknown Device Removed" message """ self.logger.debug(_("Device Removed") + ": " + str(udi)) self.devicelist.save() if self.udi_dict.has_key(udi): disp = self.udi_dict[udi] try: disp.on_removed() except: self.logger.warning(str(traceback.format_exc())) print print print _("Disconnected") + " ################################" self.__print_properties(disp.properties) del self.udi_dict[udi] else: self.message_render.show_warning(_("Warning"), _("Unknown Device Removed") + ".") def on_property_modified(self, udi, num, values): """ [es] Cuando se detecta la modificación de una propiedad de un dispositivo conectado se invoca el metodo on_property_modified definido para el actor correspondiente ----------------------------------------------------------------------- [en] When a property modification from a connected device is detected we launch the on_property_modified method defined for the corresponding actor """ for ele in values: key = ele[0] if self.udi_dict.has_key(udi): # [es] Actualizamos las propiedades del objeto actor # [en] Actualize actor object properties actor = self.udi_dict[udi] obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') actor.properties = obj.GetAllProperties() print print print "#############################################" print _("Property Modified:") print _("udi:"), udi print key, ':', actor.properties[key] print "#############################################" try: actor.on_modified(key) except Exception, e: self.logger.warning(str(traceback.format_exc()))
class DeviceListener: def __init__(self, message_render): self.message_render = message_render self.logger = logging.getLogger() # Inicialize self.bus = dbus.SystemBus() obj = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') self.hal_manager = dbus.Interface(obj, 'org.freedesktop.Hal.Manager') self.hal_manager.connect_to_signal('DeviceAdded', self.on_device_added) self.hal_manager.connect_to_signal('DeviceRemoved', self.on_device_removed) self.udi_dict = {} self.modify_handler_dict = {} self.devicelist = DeviceList() self.__init_actors() coldplug = ColdPlugListener(self) coldplug.start() self.logger.info("DeviceListener iniciado") def on_device_added(self, udi, *args): self.logger.debug("DeviceAdded: " + str(udi)) self.devicelist.save() obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') properties = obj.GetAllProperties() self.__print_properties(properties) actor = self.add_actor_from_properties(properties) if actor: try: actor.on_added() except: self.logger.warning(str(traceback.format_exc())) from actors.deviceactor import DeviceActor if actor.__class__ == DeviceActor: if properties.has_key('info.product') and \ properties['info.product'] != '': product = properties['info.product'] self.message_render.show_info("Información", "Dispositivo CONECTADO:\n %s" % (product,)) else: self.message_render.show_warning("Aviso", "Dispositivo detectado, pero no identificado") def on_device_removed(self, udi, *args): self.logger.debug("DeviceRemoved: " + str(udi)) self.devicelist.save() if self.udi_dict.has_key(udi): disp = self.udi_dict[udi] try: disp.on_removed() except: self.logger.warning(str(traceback.format_exc())) print print print "#############################################" print "DESCONEXIÓN ################################" print "#############################################" self.__print_properties(disp.properties) from actors.deviceactor import DeviceActor if disp.__class__ == DeviceActor: properties = disp.properties if properties.has_key('info.product') and \ properties['info.product'] != '': product = properties['info.product'] self.message_render.show_info("Información", "Dispositivo DESCONECTADO:\n %s" % product) del self.udi_dict[udi] else: self.message_render.show_warning("Aviso", "Dispositivo desconectado") def on_property_modified(self, udi, num, values): for ele in values: key = ele[0] if self.udi_dict.has_key(udi): # Actualizamos las propiedades del objeto actor actor = self.udi_dict[udi] obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') actor.properties = obj.GetAllProperties() print print print "#############################################" print "PROPIEDAD MODIFICADA:" print "udi:", udi print key, ':', actor.properties[key] print "#############################################" try: actor.on_modified(key) except Exception, e: self.logger.warning(str(traceback.format_exc()))
class DeviceListener: def __init__(self, message_render): self.message_render = message_render self.logger = logging.getLogger() # Inicialize self.bus = dbus.SystemBus() obj = self.bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/Manager") self.hal_manager = dbus.Interface(obj, "org.freedesktop.Hal.Manager") self.hal_manager.connect_to_signal("DeviceAdded", self.on_device_added) self.hal_manager.connect_to_signal("DeviceRemoved", self.on_device_removed) self.udi_dict = {} self.modify_handler_dict = {} self.devicelist = DeviceList() self.__init_actors() coldplug = ColdPlugListener(self) coldplug.start() self.logger.info("DeviceListener iniciado") def on_device_added(self, udi, *args): self.logger.debug("DeviceAdded: " + str(udi)) self.devicelist.save() obj = self.bus.get_object("org.freedesktop.Hal", udi) obj = dbus.Interface(obj, "org.freedesktop.Hal.Device") properties = obj.GetAllProperties() print print print "#############################################" print "CONNECTED ################################" print "#############################################" self.__print_properties(properties) actor = self.get_actor_from_properties(properties) if actor: try: actor.on_added() except: self.logger.warning(str(traceback.format_exc())) # from actors.deviceactor import DeviceActor # if actor.__class__ == DeviceActor: # if properties.has_key('info.product') and \ # properties['info.product'] != '': # product = properties['info.product'] # self.message_render.show_info(_("Information"), # _("Device CONNECTED:") + "\:n %s" % (product,)) # else: # self.message_render.show_warning(_("Warning"), # _("Device detected, but unidentificated")) def on_device_removed(self, udi, *args): self.logger.debug("DeviceRemoved: " + str(udi)) self.devicelist.save() if self.udi_dict.has_key(udi): disp = self.udi_dict[udi] try: disp.on_removed() except: self.logger.warning(str(traceback.format_exc())) print print print "#############################################" print "DISCONNECTED ################################" print "#############################################" self.__print_properties(disp.properties) # from actors.deviceactor import DeviceActor # if disp.__class__ == DeviceActor: # properties = disp.properties # if properties.has_key('info.product') and \ # properties['info.product'] != '': # product = properties['info.product'] # self.message_render.show_info(_("Information"), # _("Device DISCONNECTED:") + "\n %s" % product) del self.udi_dict[udi] else: self.message_render.show_warning(_("Warning"), _("Device REMOVED.")) def on_property_modified(self, udi, num, values): for ele in values: key = ele[0] if self.udi_dict.has_key(udi): # Actualizamos las propiedades del objeto actor actor = self.udi_dict[udi] obj = self.bus.get_object("org.freedesktop.Hal", udi) obj = dbus.Interface(obj, "org.freedesktop.Hal.Device") actor.properties = obj.GetAllProperties() print print print "#############################################" print "MODIFIED PROPERTY:" print "udi:", udi print key, ":", actor.properties[key] print "#############################################" try: actor.on_modified(key) except Exception, e: self.logger.warning(str(traceback.format_exc()))
class DeviceListener: def __init__(self, message_render): self.message_render = message_render self.logger = logging.getLogger() # Inicialize self.bus = dbus.SystemBus() obj = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') self.hal_manager = dbus.Interface(obj, 'org.freedesktop.Hal.Manager') self.hal_manager.connect_to_signal('DeviceAdded', self.on_device_added) self.hal_manager.connect_to_signal('DeviceRemoved', self.on_device_removed) self.udi_dict = {} self.modify_handler_dict = {} self.devicelist = DeviceList() self.__init_actors() coldplug = ColdPlugListener(self) coldplug.start() self.logger.info("DeviceListener iniciado") def on_device_added(self, udi, *args): self.logger.debug("DeviceAdded: " + str(udi)) self.devicelist.save() obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') properties = obj.GetAllProperties() self.__print_properties(properties) actor = self.add_actor_from_properties(properties) if actor: try: actor.on_added() except: self.logger.warning(str(traceback.format_exc())) from actors.deviceactor import DeviceActor if actor.__class__ == DeviceActor: if properties.has_key('info.product') and \ properties['info.product'] != '': product = properties['info.product'] self.message_render.show_info( "Información", "Dispositivo CONECTADO:\n %s" % (product, )) else: self.message_render.show_warning( "Aviso", "Dispositivo detectado, pero no identificado") def on_device_removed(self, udi, *args): self.logger.debug("DeviceRemoved: " + str(udi)) self.devicelist.save() if self.udi_dict.has_key(udi): disp = self.udi_dict[udi] try: disp.on_removed() except: self.logger.warning(str(traceback.format_exc())) print print print "#############################################" print "DESCONEXIÓN ################################" print "#############################################" self.__print_properties(disp.properties) from actors.deviceactor import DeviceActor if disp.__class__ == DeviceActor: properties = disp.properties if properties.has_key('info.product') and \ properties['info.product'] != '': product = properties['info.product'] self.message_render.show_info( "Información", "Dispositivo DESCONECTADO:\n %s" % product) del self.udi_dict[udi] else: self.message_render.show_warning("Aviso", "Dispositivo desconectado") def on_property_modified(self, udi, num, values): for ele in values: key = ele[0] if self.udi_dict.has_key(udi): # Actualizamos las propiedades del objeto actor actor = self.udi_dict[udi] obj = self.bus.get_object('org.freedesktop.Hal', udi) obj = dbus.Interface(obj, 'org.freedesktop.Hal.Device') actor.properties = obj.GetAllProperties() print print print "#############################################" print "PROPIEDAD MODIFICADA:" print "udi:", udi print key, ':', actor.properties[key] print "#############################################" try: actor.on_modified(key) except Exception, e: self.logger.warning(str(traceback.format_exc()))