From 194a74b958ebac3f444cbb41a4bfe010c2ec16e9 Mon Sep 17 00:00:00 2001 From: Waradu Date: Sun, 20 Oct 2024 17:23:50 +0200 Subject: [PATCH] updated to streamshare v4 and added chunk-size + server arguments --- Cargo.lock | 6 ++-- Cargo.toml | 4 +-- src/main.rs | 101 ++++++++++++++++++++++++++++++++++++++-------------- 3 files changed, 80 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 01cf656..4cd66a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1212,9 +1212,9 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "streamshare" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a66009b98588531c068a6b1fc2345a05292dd279c73554d514fd47f926b2e7" +checksum = "0d8642382451166982e9ca79fa523c65350c72b113b5c4a89887a1181a16ac44" dependencies = [ "futures", "reqwest", @@ -1337,7 +1337,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "to-streamshare" -version = "0.4.0" +version = "0.5.0" dependencies = [ "clap", "kdam", diff --git a/Cargo.toml b/Cargo.toml index 48e9ae4..192068d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "to-streamshare" -version = "0.4.0" +version = "0.5.0" edition = "2021" description = "Upload to streamshare (to-ss > toss) from the terminal" license = "MIT" @@ -13,7 +13,7 @@ keywords = ["streamshare", "file-sharing", "upload"] [dependencies] clap = { version = "4.5.20", features = ["derive"] } kdam = { version = "0.5.2", features = ["rich", "spinner"] } -streamshare = "3" +streamshare = "4" tokio = { version = "1.40.0", features = ["full"] } [[bin]] diff --git a/src/main.rs b/src/main.rs index b7eaffc..935e232 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,11 @@ use clap::{CommandFactory, Parser}; -use kdam::{tqdm, BarExt, Column, RichProgress, Spinner, term::Colorizer}; -use streamshare::{delete, upload}; -use std::io::{stderr, IsTerminal}; +use kdam::{term::Colorizer, tqdm, BarExt, Column, RichProgress, Spinner}; use std::fs; -use std::time::Duration; +use std::io::{stderr, IsTerminal}; use std::sync::{Arc, Mutex}; use std::thread; +use std::time::Duration; +use streamshare::StreamShare; #[derive(Parser, Debug)] #[command(name = "toss", version, about, long_about = None)] @@ -19,15 +19,43 @@ struct Args { help = "Specify a file to delete in the format 'file_identifier/deletion_token' (e.g., 'abc123/def456')" )] delete: Option, + + #[arg( + short, + long, + value_name = "SERVER", + help = "Specify a server", + default_value = "streamshare.wireway.ch" + )] + server: Option, + + #[arg( + short, + long, + value_name = "CHUNK-SIZE", + help = "Specify a chunk size", + default_value = "1048576" + )] + chunk_size: Option, } #[tokio::main] async fn main() -> std::io::Result<()> { let args = Args::parse(); + let server = args.server.unwrap(); + let chunk_size = match args.chunk_size.unwrap().parse::() { + Ok(c) => c, + Err(_) => { + eprintln!("Error: The provided chunk size is not a valid integer."); + std::process::exit(1); + } + }; - if let Some(delete_param) = args.delete { - if let Some((file_identifier, deletion_token)) = parse_delete_param(&delete_param) { - match delete(file_identifier, deletion_token).await { + let client = StreamShare::new(server.clone(), chunk_size); + + if let Some(delete) = args.delete { + if let Some((file_identifier, deletion_token)) = parse_delete_param(&delete) { + match client.delete(file_identifier, deletion_token).await { Ok(_) => println!("File deleted successfully"), Err(e) => eprintln!("Error deleting file: {}", e), } @@ -51,7 +79,11 @@ async fn main() -> std::io::Result<()> { colour = "green" ), vec![ - Column::Spinner(Spinner::new(&["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"], 80.0, 1.0)), + Column::Spinner(Spinner::new( + &["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"], + 80.0, + 1.0, + )), Column::Percentage(1), Column::Text("•".to_owned()), Column::Animation, @@ -70,36 +102,53 @@ async fn main() -> std::io::Result<()> { let pb_arc_clone = pb_arc.clone(); let current_progress_clone = current_progress.clone(); - let update_thread = thread::spawn(move || { - loop { - thread::sleep(Duration::from_millis(50)); - let progress = *current_progress_clone.lock().unwrap(); - if progress >= file_size { - break; - } - pb_arc_clone.lock().unwrap().update_to(progress as usize).unwrap(); + let update_thread = thread::spawn(move || loop { + thread::sleep(Duration::from_millis(50)); + let progress = *current_progress_clone.lock().unwrap(); + if progress >= file_size { + break; } + pb_arc_clone + .lock() + .unwrap() + .update_to(progress as usize) + .unwrap(); }); - match upload(&file_path, move |current, _total| { - *current_progress.lock().unwrap() = current; - }).await { + match client + .upload(&file_path, move |current, _total| { + *current_progress.lock().unwrap() = current; + }) + .await + { Ok((file_identifier, deletion_token)) => { let mut pb = pb_arc.lock().unwrap(); pb.update_to(file_size as usize).unwrap(); - + println!("\n{}", "┌".to_owned() + &"─".repeat(79) + "┐"); println!("│{:^90}│", "Upload Complete!".colorize("bold green")); println!("├{}┤", "─".repeat(79)); - + let download_url = format!( "https://streamshare.wireway.ch/download/{}", file_identifier ); - println!("│ {:<15} {:<31} │", "URL:".colorize("bold yellow"), download_url); - println!("│ {:<15} {:<68} │", "File ID:".colorize("bold yellow"), file_identifier); - println!("│ {:<15} {:<61} │", "Deletion Token:".colorize("bold yellow"), deletion_token); - + println!( + "│ {:<15} {:<31} │", + "URL:".colorize("bold yellow"), + download_url + ); + println!( + "│ {:<15} {:<68} │", + "File ID:".colorize("bold yellow"), + file_identifier + ); + println!( + "│ {:<15} {:<61} │", + "Deletion Token:".colorize("bold yellow"), + deletion_token + ); + println!("{}", "└".to_owned() + &"─".repeat(79) + "┘"); } Err(e) => eprintln!("{}", format!("Error: {}", e).colorize("bold red")), @@ -121,4 +170,4 @@ fn parse_delete_param(param: &str) -> Option<(&str, &str)> { } else { None } -} \ No newline at end of file +}