about summary refs log tree commit diff
path: root/youtube_dl/downloader
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2017-04-24 23:50:20 +0700
committerSergey M․ <dstftw@gmail.com>2017-04-24 23:50:20 +0700
commit290f64dbaa3a8c187d47b72b3c808bd52d15a6e8 (patch)
tree3cf3df777aa376fed9fe0d3040eb4c2b24b63664 /youtube_dl/downloader
parentadb4b03cd583857d00fa03c050d1472bf44a0d15 (diff)
downloadyoutube-dl-290f64dbaa3a8c187d47b72b3c808bd52d15a6e8.tar.gz
youtube-dl-290f64dbaa3a8c187d47b72b3c808bd52d15a6e8.tar.xz
youtube-dl-290f64dbaa3a8c187d47b72b3c808bd52d15a6e8.zip
[downloader/fragment] Improve .ytdl format and start documenting
Diffstat (limited to 'youtube_dl/downloader')
-rw-r--r--youtube_dl/downloader/fragment.py31
1 files changed, 26 insertions, 5 deletions
diff --git a/youtube_dl/downloader/fragment.py b/youtube_dl/downloader/fragment.py
index 25c8f18ec..50c8254a4 100644
--- a/youtube_dl/downloader/fragment.py
+++ b/youtube_dl/downloader/fragment.py
@@ -31,6 +31,24 @@ class FragmentFD(FileDownloader):
                         Skip unavailable fragments (DASH and hlsnative only)
     keep_fragments:     Keep downloaded fragments on disk after downloading is
                         finished
+
+    For each incomplete fragment download youtube-dl keeps on disk a special
+    bookkeeping file with download state and metadata (in future such files will
+    be used for any incomplete download handled by youtube-dl). This file is
+    used to properly handle resuming, check download file consistency and detect
+    potential errors. The file has a .ytdl extension and represents a standard
+    JSON file of the following format:
+
+    extractor:
+        Dictionary of extractor related data. TBD.
+
+    downloader:
+        Dictionary of downloader related data. May contain following data:
+            current_fragment:
+                Dictionary with current (being downloaded) fragment data:
+                index:  Index of current fragment among all fragments
+            fragment_count:
+                Total count of fragments
     """
 
     def report_retry_fragment(self, err, frag_index, count, retries):
@@ -55,16 +73,19 @@ class FragmentFD(FileDownloader):
 
     def _read_ytdl_file(self, ctx):
         stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'r')
-        ctx['fragment_index'] = json.loads(stream.read())['download']['current_fragment_index']
+        ctx['fragment_index'] = json.loads(stream.read())['downloader']['current_fragment']['index']
         stream.close()
 
     def _write_ytdl_file(self, ctx):
         frag_index_stream, _ = sanitize_open(self.ytdl_filename(ctx['filename']), 'w')
-        frag_index_stream.write(json.dumps({
-            'download': {
-                'current_fragment_index': ctx['fragment_index']
+        downloader = {
+            'current_fragment': {
+                'index': ctx['fragment_index'],
             },
-        }))
+        }
+        if ctx.get('fragment_count') is not None:
+            downloader['fragment_count'] = ctx['fragment_count']
+        frag_index_stream.write(json.dumps({'downloader': downloader}))
         frag_index_stream.close()
 
     def _download_fragment(self, ctx, frag_url, info_dict, headers=None):