Fix file info fetching

This commit is contained in:
Anton Skrypnyk 2024-07-24 17:15:47 +03:00
parent 4faa240b06
commit 19cac21db6
2 changed files with 20 additions and 13 deletions

View File

@ -128,16 +128,16 @@ class BambuVirtualPrinter:
def update_print_job_info(self): def update_print_job_info(self):
print_job_info = self.bambu_client.get_device().print_job 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( 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: if project_file_info is None:
self._log.debug(f"No 3mf file found for {print_job_info}") self._log.debug(f"No 3mf file found for {print_job_info}")
self._current_print_job = None self._current_print_job = None
return return
if self.file_system.select_file(filename): if self.file_system.select_file(project_file_info.file_name):
self.sendOk() self.sendOk()
# fuzzy math here to get print percentage to match BambuStudio # fuzzy math here to get print percentage to match BambuStudio
@ -307,6 +307,7 @@ class BambuVirtualPrinter:
@gcode_executor.register("M23") @gcode_executor.register("M23")
def _select_sd_file(self, data: str) -> bool: def _select_sd_file(self, data: str) -> bool:
filename = data.split(maxsplit=1)[1].strip() filename = data.split(maxsplit=1)[1].strip()
self._list_sd()
return self.file_system.select_file(filename) return self.file_system.select_file(filename)
@gcode_executor.register("M26") @gcode_executor.register("M26")
@ -340,6 +341,7 @@ class BambuVirtualPrinter:
@gcode_executor.register("M30") @gcode_executor.register("M30")
def _delete_sd_file(self, data: str) -> bool: def _delete_sd_file(self, data: str) -> bool:
filename = data.split(None, 1)[1].strip() filename = data.split(None, 1)[1].strip()
self._list_sd()
self.file_system.delete_file(filename) self.file_system.delete_file(filename)
return True return True

View File

@ -22,10 +22,10 @@ class FileInfo:
@property @property
def file_name(self): def file_name(self):
return self.path.name.lower() return self.path.name
def get_log_info(self): 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): def to_dict(self):
return asdict(self) return asdict(self)
@ -103,7 +103,7 @@ class RemoteSDCardFileList:
self._logger.debug(f"get data for path: {file_name}") self._logger.debug(f"get data for path: {file_name}")
# replace if name is an alias # 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) file_name = self._file_alias_cache.get(file_name, file_name)
data = self._file_data_cache.get(file_name, None) 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} 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]): def _get_cached_data_by_suffix(self, file_stem: str, allowed_suffixes: list[str]):
file_data = self._get_cached_file_data(file_name) for suffix in allowed_suffixes:
if file_data is None: file_data = self._get_cached_file_data(f"{file_stem}{suffix}")
return None if file_data is not None:
file_path = file_data.path
if any(s in allowed_suffixes for s in file_path.suffixes):
return file_data return file_data
return None 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: def select_file(self, file_path: str, check_already_open: bool = False) -> bool:
self._logger.debug( self._logger.debug(
f"_selectSdFile: {file_path}, check_already_open={check_already_open}" f"_selectSdFile: {file_path}, check_already_open={check_already_open}"