Fix sd card file access.
This commit is contained in:
parent
38a6f58306
commit
4faa240b06
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user