Esempio n. 1
0
    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")
Esempio n. 2
0
    def __run(self):
        self.logger.info("ColdPlugListener thread started")
        dl = DeviceList()

        for ele in dl.get_added():
            try:
                self.logger.debug("Coldplug: DeviceAdded: " + str(ele[0]))
                self.devicelistener.on_device_added(ele[0]) #ele[0] contains the
                                                            #device udi
                time.sleep(0.5)
            except Exception, e:
                self.logger.warning(str(e))
    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 __run(self):
        """ 
        [es] 
        -------------------------------------------------------------------
        [en] 
        """
        self.logger.info("ColdPlugListener thread started")
        dl = DeviceList()

        for ele in dl.get_added():
            try:
                self.logger.debug("Coldplug: DeviceAdded: " + str(ele[0]))

                # [es] ele[0] contiene el UDI del dispositivo
                # [en] ele[0] contains the device UDI
                self.devicelistener.on_device_added(ele[0]) 
                time.sleep(0.5)
            except Exception, e:
                self.logger.warning(str(e))
Esempio n. 5
0
    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"))
Esempio n. 6
0
    def __run(self):
        """ 
        [es] Método privado que inicia la ejecución
        -------------------------------------------------------------------
        [en] Exec starting private method
        """
        self.logger.info(_("ColdPlugListener thread started"))

        # [es] Obtenemos la lista de dispositivos conectados al sistema
        # [en] We get a list we all the attached devices
        dl = DeviceList()

        for ele in dl.get_added():
            try:
                self.logger.debug(_("Coldplug: DeviceAdded: ") + str(ele[0]))

                # [es] ele[0] contiene el UDI del dispositivo
                # [en] ele[0] contains the device UDI
                self.devicelistener.on_device_added(ele[0])
                time.sleep(0.5)
            except Exception, e:
                self.logger.warning(str(e))
    def __run(self):
        """ 
        [es] Método privado que inicia la ejecución
        -------------------------------------------------------------------
        [en] Exec starting private method
        """
        self.logger.info(_("ColdPlugListener thread started"))
        
        # [es] Obtenemos la lista de dispositivos conectados al sistema
        # [en] We get a list we all the attached devices 
        dl = DeviceList()

        for ele in dl.get_added():
            try:
                self.logger.debug(_("Coldplug: DeviceAdded: ") + str(ele[0]))

                # [es] ele[0] contiene el UDI del dispositivo
                # [en] ele[0] contains the device UDI
                self.devicelistener.on_device_added(ele[0]) 
                time.sleep(0.5)
            except Exception, e:
                self.logger.warning(str(e))
    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"))
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()))
Esempio n. 10
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()))
Esempio n. 11
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()))
Esempio n. 12
0
class MainUI(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainUI, self).__init__()
        self.resize(960, 540)

        self.setFont(QFont("Microsoft YaHei"))
        self.main_widget = QWidget()
        self.main_layout = QHBoxLayout(self.main_widget)
        self.main_layout.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft)
        self.setCentralWidget(self.main_widget)
        # ----------------------设置窗口标题----------------------
        self.setWindowTitle("test")  # 设置窗口名
        # ----------------------设备栏----------------------
        self.devices_chose_list = foldWidget()  # type: foldWidget
        # self.init_devices_list()  # 初始化device_list
        # self.main_layout.addWidget(self.devices_chose_list)
        # ----------------------设备功能栏----------------------
        self.device_widget = QWidget(objectName='device_tool_widget')
        # device_widget设置为水平布局
        self.device_layout = QHBoxLayout(self.device_widget)
        self.device_layout.setObjectName('deviceLayout')
        self.device_layout.setAlignment(QtCore.Qt.AlignTop
                                        | QtCore.Qt.AlignLeft)
        # device_widget添加到主布局
        self.main_layout.addWidget(self.device_widget)

        # ----------------设备信息_常用操作界面-----------------
        # 将设备信息界与设备常用功能界面,放置在一个水平布局中.
        self.device_info_tool_widget = QWidget(
            objectName='deviceInfoAndToolWidegt')

        self.device_info_tool_layout = QHBoxLayout(
            self.device_info_tool_widget)
        self.device_info_tool_layout.setObjectName('deviceInfoAndToolLayout')
        self.device_info_tool_layout.setAlignment(QtCore.Qt.AlignTop
                                                  | QtCore.Qt.AlignLeft)
        self.device_layout.addWidget(self.device_info_tool_widget)
        # ----------------------设备选择按钮----------------------
        self.device_chose_widget = QWidget(objectName='deviceChoseWidget')
        self.device_chose_layout = QVBoxLayout(self.device_chose_widget)
        self.device_chose_layout.setObjectName('deviceChoseLayout')
        self.device_info_tool_layout.addWidget(self.device_chose_widget)
        self.device_chose_widget.setMinimumSize(QSize(230, 390))
        self.device_chose_widget.setMaximumSize(QSize(230, 390))

        self.device_chose = deviceChoseWidget()
        self.device_chose_layout.addWidget(self.device_chose)
        self.device_chose.setMinimumSize(QSize(220, 75))
        self.device_chose.setMaximumSize(QSize(220, 75))
        # ----------------------设备信息界面----------------------
        self.device_info_widget = deviceInfoWidget()  # type: deviceInfoWidget
        self.device_info_widget.setObjectName('deviceInfoWidget')
        self.device_chose_layout.addWidget(self.device_info_widget)
        self.device_info_widget.setMinimumSize(QSize(220, 300))
        self.device_info_widget.setMaximumSize(QSize(220, 300))
        # ----------------------常用工具界面----------------------
        self.device_tool_widget = deviceToolWidget()
        self.device_info_tool_layout.addWidget(self.device_tool_widget)
        self.device_tool_widget.setMinimumSize(QSize(500, 380))
        self.device_tool_widget.setMaximumSize(QSize(500, 380))

        # ----------------------主界面---------------------------
        # self.device_chose_widget.setStyleSheet('background-color: rgb(85, 170, 0);')
        self.selected_device = None
        self.devices_list = DeviceList()
        # 设置回调函数
        self.devices_list_thread = None
        self.device_info_thread = None
        # self.init_devices_list_loop()
        self.init_install_app_hook()
        # self.init_device_info_hook()

    def init_devices_list_loop(self):
        def callback():
            def fun():
                while True:
                    devices = ADBDevice().devices
                    if devices:
                        return devices

            return fun

        self.devices_list_thread = LoopThread(hook=callback(), delay=2)
        self.devices_list_thread.connect(self.update_devices_list)
        self.devices_list_thread.start()

    def update_devices_list(self, deviceList: dict):
        # print(';'.join([f'{device_id}:{state}' for device_id, state in deviceList.items()]))
        # Step1: 检查已经加入的设备是否还在线
        for device_id in self.devices_list:
            if not self.devices_list.get_device_status_by_id(device_id):
                logger.info(f'设备 {device_id} 已离线')

        # Step2: 未加入的设备创建绑定按钮,添加到devices_chose_list中
        for device_id, state in deviceList.items():
            if state == 'device' and device_id not in self.devices_list:
                device, item, button = self.create_device_btn(device_id)
                self.devices_chose_list.add_button(item, button)
                self.devices_list.add_device(device)
                logger.info(f'添加设备: {device_id} ')

    def create_device_btn(
            self,
            device_id: str) -> Tuple[ADBDevice, QListWidgetItem, CustomButton]:
        device = ADBDevice(device_id)
        item = QListWidgetItem(self.devices_chose_list)
        button = CustomButton(text=device_id, parent=self.devices_chose_list)

        def callback(adb: ADBDevice):
            def fun():
                logger.info(f'选中设备: {adb.device_id}')
                self.selected_device = adb

            return fun

        button.set_click_hook(callback(adb=device))
        return device, item, button

    def init_device_info_hook(self):
        def callback(cls):
            def fun():
                while True:
                    device = cls.selected_device
                    if not device:
                        return None
                    logger.info(
                        f'更新设备信息, device={device}, id={device.device_id}')
                    return cls._get_device_info(device)

            return fun

        self.device_info_thread = LoopThread(hook=callback(cls=self), delay=2)
        self.device_info_thread.connect(self.update_device_info)
        self.device_info_thread.start()

    @staticmethod
    def _get_device_info(device: ADBDevice):
        displayInfo = device.getPhysicalDisplayInfo()
        width, height = displayInfo['width'], displayInfo['height']
        return {
            'serialno': device.device_id,
            'model': device.model,
            'manufacturer': device.manufacturer,
            'memory': device.memory,
            'displaySize': f'{width}x{height}',
            'android_version': device.abi_version,
            'sdk_version': device.sdk_version,
        }

    def update_device_info(self, deviceInfo):
        if isinstance(deviceInfo, dict):
            device_info_widget = self.device_info_widget
            device_info_widget.update_label('serialno', deviceInfo['serialno'])
            device_info_widget.update_label('model', deviceInfo['model'])
            device_info_widget.update_label('manufacturer',
                                            deviceInfo['manufacturer'])
            device_info_widget.update_label('memory', deviceInfo['memory'])
            device_info_widget.update_label('displaySize',
                                            deviceInfo['displaySize'])
            device_info_widget.update_label('android_version',
                                            deviceInfo['android_version'])
            device_info_widget.update_label('sdk_version',
                                            deviceInfo['sdk_version'])

    def init_install_app_hook(self):
        install_widget = self.device_tool_widget.install_app
        install_widget.update_thread = Thread()

        def callback(cls):
            def fun():
                device = cls.selected_device  # type: ADBDevice
                path = cls.get_install_app_path()
                print(f"安装应用={path or None}")
                if path:
                    install_widget.setEnabled(False)
                    try:
                        device.install(local=path)
                    except Exception as e:
                        return AdbInstallError(f'应用安装失败\n{e}')
                    finally:
                        install_widget.setEnabled(True)

            return fun

        install_widget.update_thread.add_hook(callback(cls=self))
        install_widget.set_btn_hook(install_widget.update_thread.start)
        install_widget.update_thread.connect(self.raise_dialog)

    def get_install_app_path(self):
        """ 从控件中获取安装应用的路径 """
        path = self.device_tool_widget.install_app.getText()
        return path

    def raise_dialog(self, exceptions):
        if isinstance(exceptions, AdbBaseError):
            dialog = InfoDialog(text='错误',
                                infomativeText=str(exceptions),
                                parent=self)
            dialog.open()
Esempio n. 13
0
    def __init__(self):
        super(MainUI, self).__init__()
        self.resize(960, 540)

        self.setFont(QFont("Microsoft YaHei"))
        self.main_widget = QWidget()
        self.main_layout = QHBoxLayout(self.main_widget)
        self.main_layout.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft)
        self.setCentralWidget(self.main_widget)
        # ----------------------设置窗口标题----------------------
        self.setWindowTitle("test")  # 设置窗口名
        # ----------------------设备栏----------------------
        self.devices_chose_list = foldWidget()  # type: foldWidget
        # self.init_devices_list()  # 初始化device_list
        # self.main_layout.addWidget(self.devices_chose_list)
        # ----------------------设备功能栏----------------------
        self.device_widget = QWidget(objectName='device_tool_widget')
        # device_widget设置为水平布局
        self.device_layout = QHBoxLayout(self.device_widget)
        self.device_layout.setObjectName('deviceLayout')
        self.device_layout.setAlignment(QtCore.Qt.AlignTop
                                        | QtCore.Qt.AlignLeft)
        # device_widget添加到主布局
        self.main_layout.addWidget(self.device_widget)

        # ----------------设备信息_常用操作界面-----------------
        # 将设备信息界与设备常用功能界面,放置在一个水平布局中.
        self.device_info_tool_widget = QWidget(
            objectName='deviceInfoAndToolWidegt')

        self.device_info_tool_layout = QHBoxLayout(
            self.device_info_tool_widget)
        self.device_info_tool_layout.setObjectName('deviceInfoAndToolLayout')
        self.device_info_tool_layout.setAlignment(QtCore.Qt.AlignTop
                                                  | QtCore.Qt.AlignLeft)
        self.device_layout.addWidget(self.device_info_tool_widget)
        # ----------------------设备选择按钮----------------------
        self.device_chose_widget = QWidget(objectName='deviceChoseWidget')
        self.device_chose_layout = QVBoxLayout(self.device_chose_widget)
        self.device_chose_layout.setObjectName('deviceChoseLayout')
        self.device_info_tool_layout.addWidget(self.device_chose_widget)
        self.device_chose_widget.setMinimumSize(QSize(230, 390))
        self.device_chose_widget.setMaximumSize(QSize(230, 390))

        self.device_chose = deviceChoseWidget()
        self.device_chose_layout.addWidget(self.device_chose)
        self.device_chose.setMinimumSize(QSize(220, 75))
        self.device_chose.setMaximumSize(QSize(220, 75))
        # ----------------------设备信息界面----------------------
        self.device_info_widget = deviceInfoWidget()  # type: deviceInfoWidget
        self.device_info_widget.setObjectName('deviceInfoWidget')
        self.device_chose_layout.addWidget(self.device_info_widget)
        self.device_info_widget.setMinimumSize(QSize(220, 300))
        self.device_info_widget.setMaximumSize(QSize(220, 300))
        # ----------------------常用工具界面----------------------
        self.device_tool_widget = deviceToolWidget()
        self.device_info_tool_layout.addWidget(self.device_tool_widget)
        self.device_tool_widget.setMinimumSize(QSize(500, 380))
        self.device_tool_widget.setMaximumSize(QSize(500, 380))

        # ----------------------主界面---------------------------
        # self.device_chose_widget.setStyleSheet('background-color: rgb(85, 170, 0);')
        self.selected_device = None
        self.devices_list = DeviceList()
        # 设置回调函数
        self.devices_list_thread = None
        self.device_info_thread = None
        # self.init_devices_list_loop()
        self.init_install_app_hook()
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()))
Esempio n. 16
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()))
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()))