aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2021-11-11 08:00:43 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2021-11-11 08:18:35 +0530
commite08a85d86595705126d1304eafd3829e6f3811d0 (patch)
tree5dc8d74b4dad23276bba0ac2008b15e4b0bbb8d6
parent093a17107ea5e375ba606ed1c31d1c259f93e0df (diff)
downloadhypervideo-pre-e08a85d86595705126d1304eafd3829e6f3811d0.tar.lz
hypervideo-pre-e08a85d86595705126d1304eafd3829e6f3811d0.tar.xz
hypervideo-pre-e08a85d86595705126d1304eafd3829e6f3811d0.zip
Fix writing playlist infojson with `--no-clean-infojson`
-rw-r--r--yt_dlp/YoutubeDL.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py
index 5d6b1d5b2..4699e58b1 100644
--- a/yt_dlp/YoutubeDL.py
+++ b/yt_dlp/YoutubeDL.py
@@ -1583,10 +1583,11 @@ class YoutubeDL(object):
if entry is not None]
n_entries = len(entries)
- if not playlistitems and (playliststart or playlistend):
+ if not playlistitems and (playliststart != 1 or playlistend):
playlistitems = list(range(playliststart, playliststart + n_entries))
ie_result['requested_entries'] = playlistitems
+ _infojson_written = False
if not self.params.get('simulate') and self.params.get('allow_playlist_files', True):
ie_copy = {
'playlist': playlist,
@@ -1599,8 +1600,9 @@ class YoutubeDL(object):
}
ie_copy.update(dict(ie_result))
- if self._write_info_json('playlist', ie_result,
- self.prepare_filename(ie_copy, 'pl_infojson')) is None:
+ _infojson_written = self._write_info_json(
+ 'playlist', ie_result, self.prepare_filename(ie_copy, 'pl_infojson'))
+ if _infojson_written is None:
return
if self._write_description('playlist', ie_result,
self.prepare_filename(ie_copy, 'pl_description')) is None:
@@ -1656,6 +1658,12 @@ class YoutubeDL(object):
# TODO: skip failed (empty) entries?
playlist_results.append(entry_result)
ie_result['entries'] = playlist_results
+
+ # Write the updated info to json
+ if _infojson_written and self._write_info_json(
+ 'updated playlist', ie_result,
+ self.prepare_filename(ie_copy, 'pl_infojson'), overwrite=True) is None:
+ return
self.to_screen('[download] Finished downloading playlist: %s' % playlist)
return ie_result
@@ -3472,8 +3480,10 @@ class YoutubeDL(object):
encoding = preferredencoding()
return encoding
- def _write_info_json(self, label, ie_result, infofn):
+ def _write_info_json(self, label, ie_result, infofn, overwrite=None):
''' Write infojson and returns True = written, False = skip, None = error '''
+ if overwrite is None:
+ overwrite = self.params.get('overwrites', True)
if not self.params.get('writeinfojson'):
return False
elif not infofn:
@@ -3481,7 +3491,7 @@ class YoutubeDL(object):
return False
elif not self._ensure_dir_exists(infofn):
return None
- elif not self.params.get('overwrites', True) and os.path.exists(infofn):
+ elif not overwrite and os.path.exists(infofn):
self.to_screen(f'[info] {label.title()} metadata is already present')
else:
self.to_screen(f'[info] Writing {label} metadata as JSON to: {infofn}')