From 08c0862691a07086b4566e8f7fa1b277de01d5d4 Mon Sep 17 00:00:00 2001 From: imSp4rky Date: Mon, 4 May 2026 22:51:45 -0600 Subject: [PATCH] fix(manifests): clean stale .!dev resume markers before merge HLS/DASH/ISM iterdir included leftover .!dev control files from aborted runs, crashing HLS merge_discontinuity and silently corrupting DASH/ISM merged output. --- unshackle/core/manifests/dash.py | 3 +++ unshackle/core/manifests/hls.py | 5 ++--- unshackle/core/manifests/ism.py | 3 +++ unshackle/core/tracks/track.py | 3 --- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/unshackle/core/manifests/dash.py b/unshackle/core/manifests/dash.py index 04677535..21ece1bf 100644 --- a/unshackle/core/manifests/dash.py +++ b/unshackle/core/manifests/dash.py @@ -489,6 +489,9 @@ class DASH: ) raise FileNotFoundError(error_msg) + for control_file in save_dir.glob("*.!dev"): + control_file.unlink(missing_ok=True) + segments_to_merge = [x for x in sorted(save_dir.iterdir()) if x.is_file()] if debug_logger: diff --git a/unshackle/core/manifests/hls.py b/unshackle/core/manifests/hls.py index 85475657..80b5c9a2 100644 --- a/unshackle/core/manifests/hls.py +++ b/unshackle/core/manifests/hls.py @@ -655,9 +655,8 @@ class HLS: status_update["downloaded"] = f"HLS {downloaded}" progress(**status_update) - # see https://github.com/devine-dl/devine/issues/71 - for control_file in segment_save_dir.glob("*.aria2__temp"): - control_file.unlink() + for control_file in segment_save_dir.glob("*.!dev"): + control_file.unlink(missing_ok=True) progress(total=total_segments, completed=0, downloaded="Merging") diff --git a/unshackle/core/manifests/ism.py b/unshackle/core/manifests/ism.py index c385bc0f..b1fe991d 100644 --- a/unshackle/core/manifests/ism.py +++ b/unshackle/core/manifests/ism.py @@ -325,6 +325,9 @@ class ISM: ) raise FileNotFoundError(error_msg) + for control_file in save_dir.glob("*.!dev"): + control_file.unlink(missing_ok=True) + segments_to_merge = [x for x in sorted(save_dir.iterdir()) if x.is_file()] if debug_logger: diff --git a/unshackle/core/tracks/track.py b/unshackle/core/tracks/track.py index 4a43e222..a315f655 100644 --- a/unshackle/core/tracks/track.py +++ b/unshackle/core/tracks/track.py @@ -358,9 +358,6 @@ class Track: status_update["downloaded"] = f"URL {downloaded}" progress(**status_update) - # see https://github.com/devine-dl/devine/issues/71 - save_path.with_suffix(f"{save_path.suffix}.aria2__temp").unlink(missing_ok=True) - self.path = save_path events.emit(events.Types.TRACK_DOWNLOADED, track=self)