[YoutubeDL] Add declarative version of progress hooks
[youtube-dl] / youtube_dl / YoutubeDL.py
index 6acfd8cf9b14b60cefbe080123fd57514a2f8b52..bea1ef83c82abb790d33851fb92cb8778a4bc3be 100755 (executable)
@@ -182,10 +182,27 @@ class YoutubeDL(object):
                        Pass in 'in_playlist' to only show this behavior for
                        playlist items.
     postprocessors:    A list of dictionaries, each with an entry
-                       key:  The name of the postprocessor. See
-                             youtube_dl/postprocessor/__init__.py for a list.
+                       key:  The name of the postprocessor. See
+                               youtube_dl/postprocessor/__init__.py for a list.
                        as well as any further keyword arguments for the
                        postprocessor.
+    progress_hooks:    A list of functions that get called on download
+                       progress, with a dictionary with the entries
+                       * filename: The final filename
+                       * status: One of "downloading" and "finished"
+
+                       The dict may also have some of the following entries:
+
+                       * downloaded_bytes: Bytes on disk
+                       * total_bytes: Size of the whole file, None if unknown
+                       * tmpfilename: The filename we're currently writing to
+                       * eta: The estimated time in seconds, None if unknown
+                       * speed: The download speed in bytes/second, None if
+                                unknown
+
+                       Progress hooks are guaranteed to be called at least once
+                       (with status "finished") if the download is successful.
+
 
     The following parameters are not used by YoutubeDL itself, they are used by
     the FileDownloader:
@@ -273,6 +290,9 @@ class YoutubeDL(object):
             pp = pp_class(self, **compat_kwargs(pp_def))
             self.add_post_processor(pp)
 
+        for ph in self.params.get('progress_hooks', []):
+            self.add_progress_hook(ph)
+
     def warn_if_short_id(self, argv):
         # short YouTube ID starting with dash?
         idxs = [