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): 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))
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 __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()))
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: """ [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 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()
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()))
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()))