def load_from_xml(self, xml_tag: ET.Element, message_types): assert xml_tag.tag == "simulator_config" items = [] modulators_tag = xml_tag.find("modulators") if modulators_tag: self.project_manager.modulators = Modulator.modulators_from_xml_tag(modulators_tag) participants_tag = xml_tag.find("participants") if participants_tag: for participant in Participant.read_participants_from_xml_tag(participants_tag): if participant not in self.project_manager.participants: self.project_manager.participants.append(participant) self.participants_changed.emit() decodings_tag = xml_tag.find("decodings") if decodings_tag: self.project_manager.decodings = Encoding.read_decoders_from_xml_tag(decodings_tag) rx_config_tag = xml_tag.find("simulator_rx_conf") if rx_config_tag: ProjectManager.read_device_conf_dict(rx_config_tag, self.project_manager.simulator_rx_conf) tx_config_tag = xml_tag.find("simulator_tx_conf") if tx_config_tag: ProjectManager.read_device_conf_dict(tx_config_tag, self.project_manager.simulator_tx_conf) for child_tag in xml_tag.find("items"): items.append(self.load_item_from_xml(child_tag, message_types)) self.add_items(items, pos=0, parent_item=None)
def load_from_xml(self, xml_tag: ET.Element, message_types): assert xml_tag.tag == "simulator_config" items = [] modulators_tag = xml_tag.find("modulators") if modulators_tag: self.project_manager.modulators = Modulator.modulators_from_xml_tag(modulators_tag) participants_tag = xml_tag.find("participants") if participants_tag: self.project_manager.participants[:] = Participant.read_participants_from_xml_tag(participants_tag) self.participants_changed.emit() decodings_tag = xml_tag.find("decodings") if decodings_tag: self.project_manager.decodings = Encoding.read_decoders_from_xml_tag(decodings_tag) rx_config_tag = xml_tag.find("simulator_rx_conf") if rx_config_tag: ProjectManager.read_device_conf_dict(rx_config_tag, self.project_manager.simulator_rx_conf) tx_config_tag = xml_tag.find("simulator_tx_conf") if tx_config_tag: ProjectManager.read_device_conf_dict(tx_config_tag, self.project_manager.simulator_tx_conf) for child_tag in xml_tag.find("items"): items.append(self.load_item_from_xml(child_tag, message_types)) self.add_items(items, pos=0, parent_item=None)
def from_xml_tag(self, root: ET.Element, read_bits=False, participants=None, decodings=None): if not root: return None decoders = Encoding.read_decoders_from_xml_tag( root) if decodings is None else decodings if participants is None: participants = Participant.read_participants_from_xml_tag(root) if read_bits: self.messages[:] = [] try: message_types = [] for message_type_tag in root.find("message_types").findall( "message_type"): message_types.append(MessageType.from_xml(message_type_tag)) except AttributeError: message_types = [] for message_type in message_types: if message_type not in self.message_types: self.message_types.append(message_type) try: message_tags = root.find("messages").findall("message") for i, message_tag in enumerate(message_tags): if read_bits: self.messages.append( Message.new_from_xml(tag=message_tag, participants=participants, decoders=decoders, message_types=self.message_types)) else: try: self.messages[i].from_xml( tag=message_tag, participants=participants, decoders=decoders, message_types=self.message_types) except IndexError: pass # Part of signal was copied in last session but signal was not saved except AttributeError: pass
def from_xml_tag(self, root: ET.Element, read_bits=False, participants=None, decodings=None): if not root: return None decoders = Encoding.read_decoders_from_xml_tag(root) if decodings is None else decodings if participants is None: participants = Participant.read_participants_from_xml_tag(root) if read_bits: self.messages[:] = [] try: message_types = [] for message_type_tag in root.find("message_types").findall("message_type"): message_types.append(MessageType.from_xml(message_type_tag)) except AttributeError: message_types = [] for message_type in message_types: if message_type not in self.message_types: self.message_types.append(message_type) try: message_tags = root.find("messages").findall("message") for i, message_tag in enumerate(message_tags): if read_bits: self.messages.append(Message.new_from_xml(tag=message_tag, participants=participants, decoders=decoders, message_types=self.message_types)) else: try: self.messages[i].from_xml(tag=message_tag, participants=participants, decoders=decoders, message_types=self.message_types) except IndexError: pass # Part of signal was copied in last session but signal was not saved except AttributeError: pass
def set_project_folder(self, path, ask_for_new_project=True, close_all=True): if self.project_file is not None or close_all: # Close existing project (if any) or existing files if requested self.main_controller.close_all_files() FileOperator.RECENT_PATH = path util.PROJECT_PATH = path self.project_path = path self.project_file = os.path.join(self.project_path, constants.PROJECT_FILE) collapse_project_tabs = False if not os.path.isfile(self.project_file): if ask_for_new_project: reply = QMessageBox.question( self.main_controller, "Project File", "Do you want to create a Project File for this folder?\n" "If you chose No, you can do it later via File->Convert Folder to Project.", QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: self.main_controller.show_project_settings() else: self.project_file = None if self.project_file is not None: root = ET.Element("UniversalRadioHackerProject") tree = ET.ElementTree(root) tree.write(self.project_file) self.modulation_was_edited = False else: tree = ET.parse(self.project_file) root = tree.getroot() collapse_project_tabs = bool( int(root.get("collapse_project_tabs", 0))) self.modulation_was_edited = bool( int(root.get("modulation_was_edited", 0))) cfc = self.main_controller.compare_frame_controller self.read_parameters(root) self.participants[:] = Participant.read_participants_from_xml_tag( xml_tag=root.find("protocol")) self.main_controller.add_files(self.read_opened_filenames()) self.read_compare_frame_groups(root) self.decodings = Encoding.read_decoders_from_xml_tag( root.find("protocol")) cfc.proto_analyzer.message_types[:] = self.read_message_types() cfc.message_type_table_model.update() cfc.proto_analyzer.from_xml_tag(root=root.find("protocol"), participants=self.participants, decodings=cfc.decodings) cfc.updateUI() try: for message_type in cfc.proto_analyzer.message_types: for lbl in filter(lambda x: not x.show, message_type): cfc.set_protocol_label_visibility(lbl) except Exception as e: logger.exception(e) self.modulators = self.read_modulators_from_project_file() self.main_controller.simulator_tab_controller.load_config_from_xml_tag( root.find("simulator_config")) if len(self.project_path) > 0 and self.project_file is None: self.main_controller.ui.actionConvert_Folder_to_Project.setEnabled( True) else: self.main_controller.ui.actionConvert_Folder_to_Project.setEnabled( False) self.main_controller.adjust_for_current_file(path) self.main_controller.filemodel.setRootPath(path) self.main_controller.ui.fileTree.setRootIndex( self.main_controller.file_proxy_model.mapFromSource( self.main_controller.filemodel.index(path))) self.main_controller.ui.fileTree.setToolTip(path) self.main_controller.ui.splitter.setSizes([1, 1]) if collapse_project_tabs: self.main_controller.collapse_project_tab_bar() else: self.main_controller.expand_project_tab_bar() self.main_controller.setWindowTitle("Universal Radio Hacker [" + path + "]") self.project_loaded_status_changed.emit(self.project_loaded) self.project_updated.emit()
def set_project_folder(self, path, ask_for_new_project=True, close_all=True): if self.project_file is not None or close_all: # Close existing project (if any) or existing files if requested self.main_controller.close_all_files() FileOperator.RECENT_PATH = path util.PROJECT_PATH = path self.project_path = path self.project_file = os.path.join(self.project_path, constants.PROJECT_FILE) collapse_project_tabs = False if not os.path.isfile(self.project_file): if ask_for_new_project: reply = QMessageBox.question(self.main_controller, "Project File", "Do you want to create a Project File for this folder?\n" "If you chose No, you can do it later via File->Convert Folder to Project.", QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: self.main_controller.show_project_settings() else: self.project_file = None if self.project_file is not None: root = ET.Element("UniversalRadioHackerProject") tree = ET.ElementTree(root) tree.write(self.project_file) self.modulation_was_edited = False else: tree = ET.parse(self.project_file) root = tree.getroot() collapse_project_tabs = bool(int(root.get("collapse_project_tabs", 0))) self.modulation_was_edited = bool(int(root.get("modulation_was_edited", 0))) cfc = self.main_controller.compare_frame_controller self.read_parameters(root) self.participants[:] = Participant.read_participants_from_xml_tag(xml_tag=root.find("protocol")) self.main_controller.add_files(self.read_opened_filenames()) self.read_compare_frame_groups(root) self.decodings = Encoding.read_decoders_from_xml_tag(root.find("protocol")) cfc.proto_analyzer.message_types[:] = self.read_message_types() cfc.message_type_table_model.update() cfc.proto_analyzer.from_xml_tag(root=root.find("protocol"), participants=self.participants, decodings=cfc.decodings) cfc.updateUI() try: for message_type in cfc.proto_analyzer.message_types: for lbl in filter(lambda x: not x.show, message_type): cfc.set_protocol_label_visibility(lbl) except Exception as e: logger.exception(e) self.modulators = self.read_modulators_from_project_file() self.main_controller.simulator_tab_controller.load_config_from_xml_tag(root.find("simulator_config")) if len(self.project_path) > 0 and self.project_file is None: self.main_controller.ui.actionConvert_Folder_to_Project.setEnabled(True) else: self.main_controller.ui.actionConvert_Folder_to_Project.setEnabled(False) self.main_controller.adjust_for_current_file(path) self.main_controller.filemodel.setRootPath(path) self.main_controller.ui.fileTree.setRootIndex( self.main_controller.file_proxy_model.mapFromSource(self.main_controller.filemodel.index(path))) self.main_controller.ui.fileTree.setToolTip(path) self.main_controller.ui.splitter.setSizes([1, 1]) if collapse_project_tabs: self.main_controller.collapse_project_tab_bar() else: self.main_controller.expand_project_tab_bar() self.main_controller.setWindowTitle("Universal Radio Hacker [" + path + "]") self.project_loaded_status_changed.emit(self.project_loaded) self.project_updated.emit()