aboutsummaryrefslogtreecommitdiffstats
path: root/crates/yt_dlp/src/options.rs
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-05-26 18:11:35 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-05-26 18:14:48 +0200
commitdd135af27160f954c8f9c937d1fdb5b2a1032ccf (patch)
tree36814abb76a4c5c17ccd3eb7ff9c6df291ad08c0 /crates/yt_dlp/src/options.rs
parentbuild(update.sh): Remove all redundant `update.sh` files (diff)
downloadyt-dd135af27160f954c8f9c937d1fdb5b2a1032ccf.zip
feat(yt/download/hooks): Show progress of post-processors
Otherwise, `yt` will just show everything downloaded, but does not continue. Now users see, what is _actually_ happening.
Diffstat (limited to '')
-rw-r--r--crates/yt_dlp/src/options.rs28
1 files changed, 25 insertions, 3 deletions
diff --git a/crates/yt_dlp/src/options.rs b/crates/yt_dlp/src/options.rs
index 4b8906e..a87473d 100644
--- a/crates/yt_dlp/src/options.rs
+++ b/crates/yt_dlp/src/options.rs
@@ -21,7 +21,7 @@ use crate::{
python_error::{IntoPythonError, PythonError},
};
-pub type ProgressHookFunction = fn(py: Python<'_>) -> PyResult<Bound<'_, PyCFunction>>;
+pub type HookFunction = fn(py: Python<'_>) -> PyResult<Bound<'_, PyCFunction>>;
pub type PostProcessorFunction = fn(py: Python<'_>) -> PyResult<Bound<'_, PyAny>>;
/// Options, that are used to customize the download behaviour.
@@ -32,7 +32,8 @@ pub type PostProcessorFunction = fn(py: Python<'_>) -> PyResult<Bound<'_, PyAny>
#[derive(Default, Debug)]
pub struct YoutubeDLOptions {
options: serde_json::Map<String, serde_json::Value>,
- progress_hook: Option<ProgressHookFunction>,
+ progress_hook: Option<HookFunction>,
+ post_processor_hook: Option<HookFunction>,
post_processors: Vec<PostProcessorFunction>,
}
@@ -42,6 +43,7 @@ impl YoutubeDLOptions {
let me = Self {
options: serde_json::Map::new(),
progress_hook: None,
+ post_processor_hook: None,
post_processors: vec![],
};
@@ -57,7 +59,7 @@ impl YoutubeDLOptions {
}
#[must_use]
- pub fn with_progress_hook(self, progress_hook: ProgressHookFunction) -> Self {
+ pub fn with_progress_hook(self, progress_hook: HookFunction) -> Self {
if let Some(_previous_hook) = self.progress_hook {
todo!()
} else {
@@ -67,6 +69,17 @@ impl YoutubeDLOptions {
}
}
}
+ #[must_use]
+ pub fn with_post_processor_hook(self, post_processor_hook: HookFunction) -> Self {
+ if let Some(_previous_hook) = self.post_processor_hook {
+ todo!()
+ } else {
+ Self {
+ post_processor_hook: Some(post_processor_hook),
+ ..self
+ }
+ }
+ }
#[must_use]
pub fn with_post_processor(mut self, pp: PostProcessorFunction) -> Self {
@@ -135,6 +148,15 @@ signal.signal(signal.SIGINT, signal.SIG_DFL)
opts.set_item(intern!(py, "progress_hooks"), vec![ph(py).wrap_exc(py)?])
.wrap_exc(py)?;
}
+
+ // Setup the post_processor hook
+ if let Some(ph) = options.post_processor_hook {
+ opts.set_item(
+ intern!(py, "postprocessor_hooks"),
+ vec![ph(py).wrap_exc(py)?],
+ )
+ .wrap_exc(py)?;
+ }
}
{