diff options
| author | Robert Honz <exislow+github@gmail.com> | 2024-11-14 08:07:54 +0100 |
|---|---|---|
| committer | Robert Honz <exislow+github@gmail.com> | 2024-11-14 08:07:54 +0100 |
| commit | d3dedc0b6f146f09e0afb41d543a46c98d8c1c3b (patch) | |
| tree | 92edb3ead8e18708b072760a71f3b9e3136a4755 | |
| parent | 84b777ca0a3e40656f1bfd1434eabe82358d7918 (diff) | |
| download | tidal-dl-ng-d3dedc0b6f146f09e0afb41d543a46c98d8c1c3b.tar.gz | |
✨ Added some error handling for file merge.
| -rw-r--r-- | tidal_dl_ng/download.py | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/tidal_dl_ng/download.py b/tidal_dl_ng/download.py index f5b7404..29ca284 100644 --- a/tidal_dl_ng/download.py +++ b/tidal_dl_ng/download.py @@ -105,6 +105,7 @@ class Download: path_base: pathlib.Path = path_file.parent result_segments: bool = True dl_segment_results: [DownloadSegmentResult] = [] + result_merge: bool = False # Get urls for media. if isinstance(media, Track): @@ -179,14 +180,16 @@ class Download: if result_segments: # Bring list into right order, so segments can be easily merged. dl_segment_results.sort(key=lambda x: x.id_segment) - reult_merge: bool = self._segments_merge(path_file, dl_segment_results) + result_merge: bool = self._segments_merge(path_file, dl_segment_results) - if reult_merge and isinstance(media, Track) and stream_manifest.is_encrypted: + if not result_merge: + self.fn_logger.error(f"Something went wrong while writing to {media_name}. File is corrupt!") + elif result_merge and isinstance(media, Track) and stream_manifest.is_encrypted: key, nonce = decrypt_security_token(stream_manifest.encryption_key) tmp_path_file_decrypted = path_file.with_suffix("_decrypted") decrypt_file(path_file, tmp_path_file_decrypted, key, nonce) - return result_segments, tmp_path_file_decrypted + return result_merge, tmp_path_file_decrypted def _segments_merge(self, path_file, dl_segment_results) -> bool: result: bool @@ -195,17 +198,16 @@ class Download: try: with path_file.open("wb") as f_target: for dl_segment_result in dl_segment_results: - if dl_segment_result.result: - with dl_segment_result.path_segment.open("rb") as f_segment: - # Read and write junks, which gives better HDD write performance - while segment := f_segment.read(CHUNK_SIZE): - f_target.write(segment) + with dl_segment_result.path_segment.open("rb") as f_segment: + # Read and write junks, which gives better HDD write performance + while segment := f_segment.read(CHUNK_SIZE): + f_target.write(segment) - # Delete segment from HDD - dl_segment_result.path_segment.unlink() + # Delete segment from HDD + dl_segment_result.path_segment.unlink() result = True - except: + except Exception: result = False return result |
