From 66f288c069c4f507c01c9c46ad2f2a40fb6eb725 Mon Sep 17 00:00:00 2001 From: VC Date: Wed, 25 Oct 2023 15:33:10 +0200 Subject: [PATCH] feat: add --vice option --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/config.rs | 17 +++++++++++++++++ src/lib.rs | 11 ++++++++--- src/main.rs | 15 ++++++++++++++- src/youtube.rs | 15 +++++++++++---- 6 files changed, 52 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3189415..96c5b60 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1165,7 +1165,7 @@ dependencies = [ [[package]] name = "tootube" -version = "0.5.2" +version = "0.5.3" dependencies = [ "async-stream", "clap", diff --git a/Cargo.toml b/Cargo.toml index 5540bdc..72a9737 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tootube" authors = ["VC "] -version = "0.5.2" +version = "0.5.3" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/config.rs b/src/config.rs index 8b4447c..3aa1454 100644 --- a/src/config.rs +++ b/src/config.rs @@ -6,6 +6,8 @@ use std::fs::read_to_string; pub struct Config { pub peertube: PeertubeConfig, pub youtube: YoutubeConfig, + #[serde(default)] + pub tootube: TootubeConfig, } #[derive(Debug, Deserialize)] @@ -20,6 +22,21 @@ pub struct YoutubeConfig { pub client_secret: String, } +#[derive(Debug, Deserialize)] +pub struct TootubeConfig { + pub progress_bar: String, + pub progress_chars: String, +} + +impl Default for TootubeConfig { + fn default() -> Self { + TootubeConfig { + progress_bar: "{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({bytes_per_sec}, {eta})".to_string(), + progress_chars: "#>-".to_string(), + } + } +} + /// Parses the TOML file into a Config struct pub fn parse_toml(toml_file: &str) -> Config { let toml_config = diff --git a/src/lib.rs b/src/lib.rs index 3c221b6..1574e8d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -36,9 +36,14 @@ pub async fn run(config: Config, pl: Vec) { .unwrap_or_else(|e| panic!("Cannot retrieve the upload’s resumable id: {e}")); debug!("YT upload URL: {}", &resumable_upload_url); - let yt_video_id = now_kiss(&dl_url, &resumable_upload_url, &config.youtube) - .await - .unwrap_or_else(|e| panic!("Cannot resume upload!: {e}")); + let yt_video_id = now_kiss( + &dl_url, + &resumable_upload_url, + &config.youtube, + &config.tootube, + ) + .await + .unwrap_or_else(|e| panic!("Cannot resume upload!: {e}")); debug!("YT video ID: {}", &yt_video_id); if !pl.is_empty() { diff --git a/src/main.rs b/src/main.rs index f3d9c71..7f767ec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,6 +26,14 @@ fn main() { .num_args(0..) .display_order(2), ) + .arg( + Arg::new("vice") + .long("vice") + .alias("chybrare") + .alias("coquinou") + .action(clap::ArgAction::SetTrue) + .display_order(3), + ) .subcommand( Command::new("register") .version(env!("CARGO_PKG_VERSION")) @@ -50,7 +58,12 @@ fn main() { return; } - let config = parse_toml(matches.get_one::("config").unwrap()); + let mut config = parse_toml(matches.get_one::("config").unwrap()); + + if matches.get_flag("vice") { + config.tootube.progress_bar = "{msg}\n[{elapsed_precise}] 8{wide_bar:.magenta}ᗺ {bytes}/{total_bytes} ({bytes_per_sec}, {eta})".to_string(); + config.tootube.progress_chars = "=D ".to_string(); + } let playlists: Vec = matches .get_many::("playlists") diff --git a/src/youtube.rs b/src/youtube.rs index 126b51f..4c369b3 100644 --- a/src/youtube.rs +++ b/src/youtube.rs @@ -1,4 +1,8 @@ -use crate::{config::YoutubeConfig, error::TootubeError, peertube::PeerTubeVideo}; +use crate::{ + config::{TootubeConfig, YoutubeConfig}, + error::TootubeError, + peertube::PeerTubeVideo, +}; use async_stream::stream; use futures_util::StreamExt; use indicatif::{ProgressBar, ProgressStyle}; @@ -345,6 +349,7 @@ pub async fn now_kiss( dl_url: &str, r_url: &str, config: &YoutubeConfig, + pg_conf: &TootubeConfig, ) -> Result> { // Get access token let access_token = refresh_token(config).await?; @@ -358,9 +363,11 @@ pub async fn now_kiss( // Create the progress bar let pb = ProgressBar::new(content_lengh); - pb.set_style(ProgressStyle::default_bar() - .template("{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({bytes_per_sec}, {eta})")? - .progress_chars("#>-")); + pb.set_style( + ProgressStyle::default_bar() + .template(&pg_conf.progress_bar)? + .progress_chars(&pg_conf.progress_chars), + ); pb.set_message("Transferring…"); let mut transferring: u64 = 0;