diff --git a/octoprint_bambu_printer/printer/bambu_virtual_printer.py b/octoprint_bambu_printer/printer/bambu_virtual_printer.py index fd1bd6b..ee4e49d 100644 --- a/octoprint_bambu_printer/printer/bambu_virtual_printer.py +++ b/octoprint_bambu_printer/printer/bambu_virtual_printer.py @@ -128,16 +128,16 @@ class BambuVirtualPrinter: def update_print_job_info(self): print_job_info = self.bambu_client.get_device().print_job - filename: str = print_job_info.subtask_name + task_name: str = print_job_info.subtask_name project_file_info = self.file_system.get_data_by_suffix( - filename, [".3mf", ".gcode.3mf"] + task_name, [".3mf", ".gcode.3mf"] ) if project_file_info is None: self._log.debug(f"No 3mf file found for {print_job_info}") self._current_print_job = None return - if self.file_system.select_file(filename): + if self.file_system.select_file(project_file_info.file_name): self.sendOk() # fuzzy math here to get print percentage to match BambuStudio @@ -307,6 +307,7 @@ class BambuVirtualPrinter: @gcode_executor.register("M23") def _select_sd_file(self, data: str) -> bool: filename = data.split(maxsplit=1)[1].strip() + self._list_sd() return self.file_system.select_file(filename) @gcode_executor.register("M26") @@ -340,6 +341,7 @@ class BambuVirtualPrinter: @gcode_executor.register("M30") def _delete_sd_file(self, data: str) -> bool: filename = data.split(None, 1)[1].strip() + self._list_sd() self.file_system.delete_file(filename) return True diff --git a/octoprint_bambu_printer/printer/remote_sd_card_file_list.py b/octoprint_bambu_printer/printer/remote_sd_card_file_list.py index a4c35ce..fcf91df 100644 --- a/octoprint_bambu_printer/printer/remote_sd_card_file_list.py +++ b/octoprint_bambu_printer/printer/remote_sd_card_file_list.py @@ -22,10 +22,10 @@ class FileInfo: @property def file_name(self): - return self.path.name.lower() + return self.path.name def get_log_info(self): - return f'{self.dosname} {self.size} {self.timestamp} "{self.path.as_posix()}"' + return f'{self.dosname} {self.size} {self.timestamp} "{self.file_name}"' def to_dict(self): return asdict(self) @@ -103,7 +103,7 @@ class RemoteSDCardFileList: self._logger.debug(f"get data for path: {file_name}") # replace if name is an alias - file_name = Path(file_name).name.lower() + file_name = Path(file_name).name file_name = self._file_alias_cache.get(file_name, file_name) data = self._file_data_cache.get(file_name, None) @@ -122,15 +122,20 @@ class RemoteSDCardFileList: } self._file_data_cache = {info.file_name: info for info in file_info_list} - def get_data_by_suffix(self, file_name: str, allowed_suffixes: list[str]): - file_data = self._get_cached_file_data(file_name) - if file_data is None: - return None - file_path = file_data.path - if any(s in allowed_suffixes for s in file_path.suffixes): - return file_data + def _get_cached_data_by_suffix(self, file_stem: str, allowed_suffixes: list[str]): + for suffix in allowed_suffixes: + file_data = self._get_cached_file_data(f"{file_stem}{suffix}") + if file_data is not None: + return file_data return None + def get_data_by_suffix(self, file_stem: str, allowed_suffixes: list[str]): + file_data = self._get_cached_data_by_suffix(file_stem, allowed_suffixes) + if file_data is None: + self._update_existing_files_info() + file_data = self._get_cached_data_by_suffix(file_stem, allowed_suffixes) + return file_data + def select_file(self, file_path: str, check_already_open: bool = False) -> bool: self._logger.debug( f"_selectSdFile: {file_path}, check_already_open={check_already_open}"