aboutsummaryrefslogtreecommitdiffstats
path: root/crates/yt_dlp
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-07-15 06:57:31 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-07-15 06:58:44 +0200
commit507c9611232e7b820789ec776159c703acd499ab (patch)
tree8c8d480d87ad064b1e6c028c6ce17f6d6b98906e /crates/yt_dlp
parentrefactor(crates/yt): Allow `missing_panic_docs` and use expect (diff)
downloadyt-507c9611232e7b820789ec776159c703acd499ab.zip
fix(crates/yt/downloader): Correctly treat the download as blocking
This change _might_ also allow aborting the current download, but I'm not yet sure.
Diffstat (limited to 'crates/yt_dlp')
-rw-r--r--crates/yt_dlp/src/lib.rs38
1 files changed, 36 insertions, 2 deletions
diff --git a/crates/yt_dlp/src/lib.rs b/crates/yt_dlp/src/lib.rs
index d0cfbdd..dc602db 100644
--- a/crates/yt_dlp/src/lib.rs
+++ b/crates/yt_dlp/src/lib.rs
@@ -12,7 +12,7 @@
use std::path::PathBuf;
-use log::info;
+use log::{debug, info};
use pyo3::{
Bound, Py, PyAny, Python, intern,
types::{PyAnyMethods, PyDict, PyIterator, PyList},
@@ -273,12 +273,36 @@ impl YoutubeDL {
})
}
+ /// Close this [`YoutubeDL`] instance, and stop all currently running downloads.
+ ///
+ /// # Errors
+ /// If python operations fail.
+ pub fn close(&self) -> Result<(), close::Error> {
+ Python::with_gil(|py| {
+ debug!("Closing YoutubeDL.");
+
+ let inner = self
+ .inner
+ .bind(py)
+ .getattr(intern!(py, "close"))
+ .wrap_exc(py)?;
+
+ inner.call0().wrap_exc(py)?;
+
+ Ok(())
+ })
+ }
+
fn prepare_info_json<'py>(
&self,
info: &Bound<'py, PyDict>,
py: Python<'py>,
) -> Result<InfoJson, prepare::Error> {
- let sanitize = self.inner.bind(py).getattr(intern!(py, "sanitize_info")).wrap_exc(py)?;
+ let sanitize = self
+ .inner
+ .bind(py)
+ .getattr(intern!(py, "sanitize_info"))
+ .wrap_exc(py)?;
let value = sanitize.call((info,), None).wrap_exc(py)?;
@@ -289,6 +313,16 @@ impl YoutubeDL {
}
#[allow(missing_docs)]
+pub mod close {
+ use crate::python_error::PythonError;
+
+ #[derive(Debug, thiserror::Error)]
+ pub enum Error {
+ #[error(transparent)]
+ Python(#[from] PythonError),
+ }
+}
+#[allow(missing_docs)]
pub mod process_ie_result {
use crate::{prepare, python_error::PythonError};