From 9b777dcf57dd6e66d9995a0ec676c1b7e897a071 Mon Sep 17 00:00:00 2001 From: VC Date: Mon, 16 Sep 2024 08:40:08 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7:=20add=20youtube=20option/put=20yo?= =?UTF-8?q?utube=20oauth2=20in=20its=20own=20struct?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++++ src/config.rs | 37 +++++++++++++++++++++++++++++++++++++ src/lib.rs | 6 +++--- src/main.rs | 4 ++-- src/youtube.rs | 4 ++-- 5 files changed, 49 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c00345c..6d56558 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,11 @@ client_secret="" refresh_token="" [youtube] +notify_subscribers_on_shorts=false # will you notify subscribers for shorts? +# optional +# allows you to notify subscribers when transferring shorts, defaults to false + +[youtube.oauth2] refresh_token="" # leave empty for now client_id="" client_secret="" diff --git a/src/config.rs b/src/config.rs index a6cb770..acf9640 100644 --- a/src/config.rs +++ b/src/config.rs @@ -40,6 +40,13 @@ pub struct PeertubeConfigOauth2 { #[derive(Debug, Deserialize, Serialize)] pub struct YoutubeConfig { + #[serde(default)] + pub notify_subscribers_on_shorts: bool, + pub oauth2: YoutubeConfigOauth2, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct YoutubeConfigOauth2 { pub refresh_token: String, pub client_id: String, pub client_secret: String, @@ -79,3 +86,33 @@ impl Config { Ok(()) } } + +#[cfg(test)] +mod tests { + use super::*; + use std::fs::{remove_file, write}; + + #[test] + fn test_minimal_conf() { + let file_name = "/tmp/test_minimal_conf.toml"; + let data = r#" +[peertube] +base_url = 'https://p.nintendojo.fr' + +[youtube.oauth2] +refresh_token = 'rt_N/A' +client_id = 'ci_N/A' +client_secret = 'cs_N/A' +"#; + write(file_name, data).unwrap(); + let config = Config::new(file_name); + + assert_eq!(config.youtube.notify_subscribers_on_shorts, false); + assert_eq!(config.tootube.progress_chars, "#>-"); + assert_eq!(config.youtube.oauth2.refresh_token, "rt_N/A"); + assert_eq!(config.youtube.oauth2.client_id, "ci_N/A"); + assert_eq!(config.youtube.oauth2.client_secret, "cs_N/A"); + + remove_file(file_name).unwrap(); + } +} diff --git a/src/lib.rs b/src/lib.rs index 9da0400..1d228d1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -66,9 +66,9 @@ pub async fn run(config: &Config, pl: Vec, pt_video_id: Option<&str>) -> debug!("PT download URL: {}", &dl_url); let youtube = YouTube::new( - &config.youtube.client_id, - &config.youtube.client_secret, - &config.youtube.refresh_token, + &config.youtube.oauth2.client_id, + &config.youtube.oauth2.client_secret, + &config.youtube.oauth2.refresh_token, ) .await .unwrap_or_else(|e| panic!("Cannot instantiate YouTube struct: {}", e)); diff --git a/src/main.rs b/src/main.rs index fe4c60e..79407d5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -69,10 +69,10 @@ fn main() { let mut config = Config::new(sub_m.get_one::("config").unwrap()); if sub_m.get_flag("youtube") { - let yt_refresh_token = register_youtube(&config.youtube) + let yt_refresh_token = register_youtube(&config.youtube.oauth2) .unwrap_or_else(|e| panic!("Cannot register to YouTube API: {}", e)); - config.youtube.refresh_token = yt_refresh_token; + config.youtube.oauth2.refresh_token = yt_refresh_token; } if sub_m.get_flag("peertube") { diff --git a/src/youtube.rs b/src/youtube.rs index f9a3619..f365b07 100644 --- a/src/youtube.rs +++ b/src/youtube.rs @@ -1,5 +1,5 @@ use crate::{ - config::{TootubeConfig, YoutubeConfig}, + config::{TootubeConfig, YoutubeConfigOauth2}, error::TootubeError, peertube::PeerTubeVideo, }; @@ -162,7 +162,7 @@ struct YoutubePlaylistListResponseItemSnippet { /// This function makes the registration process a little bit easier /// It returns the expected refresh_token so that it can be written back to the file #[tokio::main] -pub async fn register(config: &YoutubeConfig) -> Result> { +pub async fn register(config: &YoutubeConfigOauth2) -> Result> { println!("Click on the link below to authorize {} to upload to YouTube and deal with your playlists:", env!("CARGO_PKG_NAME")); println!("https://accounts.google.com/o/oauth2/v2/auth?client_id={}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/youtube%20https://www.googleapis.com/auth/youtube.upload&response_type=code", config.client_id); println!("Paste the returned authorization code:");