Ejemplo n.º 1
0
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()))
Ejemplo n.º 2
0
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()))
Ejemplo n.º 7
0
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()))