Fix sd card file access.

This commit is contained in:
Anton Skrypnyk 2024-07-24 17:15:47 +03:00
parent 38a6f58306
commit 4faa240b06

View File

@ -25,7 +25,7 @@ class FileInfo:
return self.path.name.lower() return self.path.name.lower()
def get_log_info(self): 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): def to_dict(self):
return asdict(self) return asdict(self)
@ -49,10 +49,12 @@ class RemoteSDCardFileList:
return self._selected_file_info is not None return self._selected_file_info is not None
def _get_ftp_file_info( 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) file_size = ftp.ftps_session.size(file_path.as_posix())
date_str = ftp.ftps_session.sendcmd(f"MDTM {ftp_path}").replace("213 ", "") date_str = ftp.ftps_session.sendcmd(f"MDTM {file_path.as_posix()}").replace(
"213 ", ""
)
filedate = ( filedate = (
datetime.datetime.strptime(date_str, "%Y%m%d%H%M%S") datetime.datetime.strptime(date_str, "%Y%m%d%H%M%S")
.replace(tzinfo=datetime.timezone.utc) .replace(tzinfo=datetime.timezone.utc)
@ -71,8 +73,7 @@ class RemoteSDCardFileList:
self, ftp, files: list[str], existing_files: list[str] self, ftp, files: list[str], existing_files: list[str]
) -> Iterator[FileInfo]: ) -> Iterator[FileInfo]:
for entry in files: for entry in files:
ftp_path = Path(entry) file_info = self._get_ftp_file_info(ftp, Path(entry), existing_files)
file_info = self._get_ftp_file_info(ftp, entry, ftp_path, existing_files)
yield file_info yield file_info
existing_files.append(file_info.file_name) existing_files.append(file_info.file_name)
@ -82,7 +83,12 @@ class RemoteSDCardFileList:
file_list = [] file_list = []
file_list.extend(ftp.list_files("", ".3mf") or []) 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 = [] existing_files = []
return list(self._scan_ftp_file_list(ftp, file_list, 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) ftp = IoTFTPSClient(f"{host}", 990, "bblp", f"{access_code}", ssl_implicit=True)
return ftp return ftp
def _get_file_data(self, file_path: str) -> FileInfo | None: def _get_cached_file_data(self, file_name: str) -> FileInfo | None:
self._logger.debug(f"_getSdFileData: {file_path}") 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_path).name.lower() file_name = Path(file_name).name.lower()
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)
self._logger.debug(f"_getSdFileData: {data}") self._logger.debug(f"get file data: {data}")
return data return data
def get_all_files(self): 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} 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_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: if file_data is None:
return None return None
file_path = file_data.path file_path = file_data.path
@ -130,7 +136,7 @@ class RemoteSDCardFileList:
f"_selectSdFile: {file_path}, check_already_open={check_already_open}" f"_selectSdFile: {file_path}, check_already_open={check_already_open}"
) )
file_name = Path(file_path).name 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: if file_info is None:
self._logger.error(f"{file_name} open failed") self._logger.error(f"{file_name} open failed")
return False return False
@ -152,7 +158,7 @@ class RemoteSDCardFileList:
host = self._settings.get(["host"]) host = self._settings.get(["host"])
access_code = self._settings.get(["access_code"]) 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: if file_info is not None:
ftp = IoTFTPSClient( ftp = IoTFTPSClient(
f"{host}", 990, "bblp", f"{access_code}", ssl_implicit=True f"{host}", 990, "bblp", f"{access_code}", ssl_implicit=True