From 4faa240b0664fe32e628e492f9ffd46490b29f00 Mon Sep 17 00:00:00 2001 From: Anton Skrypnyk Date: Wed, 24 Jul 2024 17:15:47 +0300 Subject: [PATCH] Fix sd card file access. --- .../printer/remote_sd_card_file_list.py | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) 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 f826548..a4c35ce 100644 --- a/octoprint_bambu_printer/printer/remote_sd_card_file_list.py +++ b/octoprint_bambu_printer/printer/remote_sd_card_file_list.py @@ -25,7 +25,7 @@ class FileInfo: return self.path.name.lower() def get_log_info(self): - return f'{self.dosname} {self.size} {self.timestamp} "{self.file_name}"' + return f'{self.dosname} {self.size} {self.timestamp} "{self.path.as_posix()}"' def to_dict(self): return asdict(self) @@ -49,10 +49,12 @@ class RemoteSDCardFileList: return self._selected_file_info is not None def _get_ftp_file_info( - self, ftp: IoTFTPSClient, ftp_path, file_path: Path, existing_files: list[str] + self, ftp: IoTFTPSClient, file_path: Path, existing_files: list[str] ): - file_size = ftp.ftps_session.size(ftp_path) - date_str = ftp.ftps_session.sendcmd(f"MDTM {ftp_path}").replace("213 ", "") + file_size = ftp.ftps_session.size(file_path.as_posix()) + date_str = ftp.ftps_session.sendcmd(f"MDTM {file_path.as_posix()}").replace( + "213 ", "" + ) filedate = ( datetime.datetime.strptime(date_str, "%Y%m%d%H%M%S") .replace(tzinfo=datetime.timezone.utc) @@ -71,8 +73,7 @@ class RemoteSDCardFileList: self, ftp, files: list[str], existing_files: list[str] ) -> Iterator[FileInfo]: for entry in files: - ftp_path = Path(entry) - file_info = self._get_ftp_file_info(ftp, entry, ftp_path, existing_files) + file_info = self._get_ftp_file_info(ftp, Path(entry), existing_files) yield file_info existing_files.append(file_info.file_name) @@ -82,7 +83,12 @@ class RemoteSDCardFileList: file_list = [] file_list.extend(ftp.list_files("", ".3mf") or []) - file_list.extend(ftp.list_files("cache/", ".3mf") or []) + file_list.extend( + [ + (Path("cache/") / f).as_posix() + for f in (ftp.list_files("cache/", ".3mf") or []) + ] + ) existing_files = [] return list(self._scan_ftp_file_list(ftp, file_list, existing_files)) @@ -93,15 +99,15 @@ class RemoteSDCardFileList: ftp = IoTFTPSClient(f"{host}", 990, "bblp", f"{access_code}", ssl_implicit=True) return ftp - def _get_file_data(self, file_path: str) -> FileInfo | None: - self._logger.debug(f"_getSdFileData: {file_path}") + def _get_cached_file_data(self, file_name: str) -> FileInfo | None: + self._logger.debug(f"get data for path: {file_name}") # replace if name is an alias - file_name = Path(file_path).name.lower() + file_name = Path(file_name).name.lower() file_name = self._file_alias_cache.get(file_name, file_name) data = self._file_data_cache.get(file_name, None) - self._logger.debug(f"_getSdFileData: {data}") + self._logger.debug(f"get file data: {data}") return data def get_all_files(self): @@ -117,7 +123,7 @@ 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_file_data(file_name) + file_data = self._get_cached_file_data(file_name) if file_data is None: return None file_path = file_data.path @@ -130,7 +136,7 @@ class RemoteSDCardFileList: f"_selectSdFile: {file_path}, check_already_open={check_already_open}" ) file_name = Path(file_path).name - file_info = self._get_file_data(file_name) + file_info = self._get_cached_file_data(file_name) if file_info is None: self._logger.error(f"{file_name} open failed") return False @@ -152,7 +158,7 @@ class RemoteSDCardFileList: host = self._settings.get(["host"]) access_code = self._settings.get(["access_code"]) - file_info = self._get_file_data(file_path) + file_info = self._get_cached_file_data(file_path) if file_info is not None: ftp = IoTFTPSClient( f"{host}", 990, "bblp", f"{access_code}", ssl_implicit=True