about summary refs log tree commit diff stats
path: root/crates/yt_dlp/src/wrapper/yt_dlp_options.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/yt_dlp/src/wrapper/yt_dlp_options.rs')
-rw-r--r--crates/yt_dlp/src/wrapper/yt_dlp_options.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/crates/yt_dlp/src/wrapper/yt_dlp_options.rs b/crates/yt_dlp/src/wrapper/yt_dlp_options.rs
new file mode 100644
index 0000000..c2a86df
--- /dev/null
+++ b/crates/yt_dlp/src/wrapper/yt_dlp_options.rs
@@ -0,0 +1,62 @@
+// yt - A fully featured command line YouTube client
+//
+// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This file is part of Yt.
+//
+// You should have received a copy of the License along with this program.
+// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+use pyo3::{types::PyDict, Bound, PyResult, Python};
+use serde::Serialize;
+
+use crate::json_loads;
+
+#[derive(Serialize, Clone)]
+pub struct YtDlpOptions {
+    pub playliststart: u32,
+    pub playlistend: u32,
+    pub noplaylist: bool,
+    pub extract_flat: ExtractFlat,
+    // pub extractor_args: ExtractorArgs,
+    // pub format: String,
+    // pub fragment_retries: u32,
+    // #[serde(rename(serialize = "getcomments"))]
+    // pub get_comments: bool,
+    // #[serde(rename(serialize = "ignoreerrors"))]
+    // pub ignore_errors: bool,
+    // pub retries: u32,
+    // #[serde(rename(serialize = "writeinfojson"))]
+    // pub write_info_json: bool,
+    // pub postprocessors: Vec<serde_json::Map<String, serde_json::Value>>,
+}
+
+#[derive(Serialize, Copy, Clone)]
+pub enum ExtractFlat {
+    #[serde(rename(serialize = "in_playlist"))]
+    InPlaylist,
+
+    #[serde(rename(serialize = "discard_in_playlist"))]
+    DiscardInPlaylist,
+}
+
+#[derive(Serialize, Clone)]
+pub struct ExtractorArgs {
+    pub youtube: YoutubeExtractorArgs,
+}
+
+#[derive(Serialize, Clone)]
+pub struct YoutubeExtractorArgs {
+    comment_sort: Vec<String>,
+    max_comments: Vec<String>,
+}
+
+impl YtDlpOptions {
+    pub fn to_py_dict(self, py: Python) -> PyResult<Bound<PyDict>> {
+        let string = serde_json::to_string(&self).expect("This should always work");
+
+        let output: Bound<PyDict> = json_loads(py, string)?;
+        Ok(output)
+    }
+}