mirror of
https://github.com/Waradu/to-streamshare.git
synced 2025-04-22 04:14:06 +02:00
updated to streamshare v4 and added chunk-size + server arguments
This commit is contained in:
parent
7a101fde14
commit
194a74b958
3 changed files with 80 additions and 31 deletions
6
Cargo.lock
generated
6
Cargo.lock
generated
|
@ -1212,9 +1212,9 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "streamshare"
|
name = "streamshare"
|
||||||
version = "3.0.0"
|
version = "4.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d8a66009b98588531c068a6b1fc2345a05292dd279c73554d514fd47f926b2e7"
|
checksum = "0d8642382451166982e9ca79fa523c65350c72b113b5c4a89887a1181a16ac44"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
|
@ -1337,7 +1337,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "to-streamshare"
|
name = "to-streamshare"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"kdam",
|
"kdam",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "to-streamshare"
|
name = "to-streamshare"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Upload to streamshare (to-ss > toss) from the terminal"
|
description = "Upload to streamshare (to-ss > toss) from the terminal"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
@ -13,7 +13,7 @@ keywords = ["streamshare", "file-sharing", "upload"]
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = { version = "4.5.20", features = ["derive"] }
|
clap = { version = "4.5.20", features = ["derive"] }
|
||||||
kdam = { version = "0.5.2", features = ["rich", "spinner"] }
|
kdam = { version = "0.5.2", features = ["rich", "spinner"] }
|
||||||
streamshare = "3"
|
streamshare = "4"
|
||||||
tokio = { version = "1.40.0", features = ["full"] }
|
tokio = { version = "1.40.0", features = ["full"] }
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
|
|
101
src/main.rs
101
src/main.rs
|
@ -1,11 +1,11 @@
|
||||||
use clap::{CommandFactory, Parser};
|
use clap::{CommandFactory, Parser};
|
||||||
use kdam::{tqdm, BarExt, Column, RichProgress, Spinner, term::Colorizer};
|
use kdam::{term::Colorizer, tqdm, BarExt, Column, RichProgress, Spinner};
|
||||||
use streamshare::{delete, upload};
|
|
||||||
use std::io::{stderr, IsTerminal};
|
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::time::Duration;
|
use std::io::{stderr, IsTerminal};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
use std::time::Duration;
|
||||||
|
use streamshare::StreamShare;
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
#[command(name = "toss", version, about, long_about = None)]
|
#[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')"
|
help = "Specify a file to delete in the format 'file_identifier/deletion_token' (e.g., 'abc123/def456')"
|
||||||
)]
|
)]
|
||||||
delete: Option<String>,
|
delete: Option<String>,
|
||||||
|
|
||||||
|
#[arg(
|
||||||
|
short,
|
||||||
|
long,
|
||||||
|
value_name = "SERVER",
|
||||||
|
help = "Specify a server",
|
||||||
|
default_value = "streamshare.wireway.ch"
|
||||||
|
)]
|
||||||
|
server: Option<String>,
|
||||||
|
|
||||||
|
#[arg(
|
||||||
|
short,
|
||||||
|
long,
|
||||||
|
value_name = "CHUNK-SIZE",
|
||||||
|
help = "Specify a chunk size",
|
||||||
|
default_value = "1048576"
|
||||||
|
)]
|
||||||
|
chunk_size: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> std::io::Result<()> {
|
async fn main() -> std::io::Result<()> {
|
||||||
let args = Args::parse();
|
let args = Args::parse();
|
||||||
|
let server = args.server.unwrap();
|
||||||
|
let chunk_size = match args.chunk_size.unwrap().parse::<usize>() {
|
||||||
|
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 {
|
let client = StreamShare::new(server.clone(), chunk_size);
|
||||||
if let Some((file_identifier, deletion_token)) = parse_delete_param(&delete_param) {
|
|
||||||
match delete(file_identifier, deletion_token).await {
|
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"),
|
Ok(_) => println!("File deleted successfully"),
|
||||||
Err(e) => eprintln!("Error deleting file: {}", e),
|
Err(e) => eprintln!("Error deleting file: {}", e),
|
||||||
}
|
}
|
||||||
|
@ -51,7 +79,11 @@ async fn main() -> std::io::Result<()> {
|
||||||
colour = "green"
|
colour = "green"
|
||||||
),
|
),
|
||||||
vec![
|
vec![
|
||||||
Column::Spinner(Spinner::new(&["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"], 80.0, 1.0)),
|
Column::Spinner(Spinner::new(
|
||||||
|
&["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
|
||||||
|
80.0,
|
||||||
|
1.0,
|
||||||
|
)),
|
||||||
Column::Percentage(1),
|
Column::Percentage(1),
|
||||||
Column::Text("•".to_owned()),
|
Column::Text("•".to_owned()),
|
||||||
Column::Animation,
|
Column::Animation,
|
||||||
|
@ -70,36 +102,53 @@ async fn main() -> std::io::Result<()> {
|
||||||
let pb_arc_clone = pb_arc.clone();
|
let pb_arc_clone = pb_arc.clone();
|
||||||
let current_progress_clone = current_progress.clone();
|
let current_progress_clone = current_progress.clone();
|
||||||
|
|
||||||
let update_thread = thread::spawn(move || {
|
let update_thread = thread::spawn(move || loop {
|
||||||
loop {
|
thread::sleep(Duration::from_millis(50));
|
||||||
thread::sleep(Duration::from_millis(50));
|
let progress = *current_progress_clone.lock().unwrap();
|
||||||
let progress = *current_progress_clone.lock().unwrap();
|
if progress >= file_size {
|
||||||
if progress >= file_size {
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
pb_arc_clone.lock().unwrap().update_to(progress as usize).unwrap();
|
|
||||||
}
|
}
|
||||||
|
pb_arc_clone
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.update_to(progress as usize)
|
||||||
|
.unwrap();
|
||||||
});
|
});
|
||||||
|
|
||||||
match upload(&file_path, move |current, _total| {
|
match client
|
||||||
*current_progress.lock().unwrap() = current;
|
.upload(&file_path, move |current, _total| {
|
||||||
}).await {
|
*current_progress.lock().unwrap() = current;
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
{
|
||||||
Ok((file_identifier, deletion_token)) => {
|
Ok((file_identifier, deletion_token)) => {
|
||||||
let mut pb = pb_arc.lock().unwrap();
|
let mut pb = pb_arc.lock().unwrap();
|
||||||
pb.update_to(file_size as usize).unwrap();
|
pb.update_to(file_size as usize).unwrap();
|
||||||
|
|
||||||
println!("\n{}", "┌".to_owned() + &"─".repeat(79) + "┐");
|
println!("\n{}", "┌".to_owned() + &"─".repeat(79) + "┐");
|
||||||
println!("│{:^90}│", "Upload Complete!".colorize("bold green"));
|
println!("│{:^90}│", "Upload Complete!".colorize("bold green"));
|
||||||
println!("├{}┤", "─".repeat(79));
|
println!("├{}┤", "─".repeat(79));
|
||||||
|
|
||||||
let download_url = format!(
|
let download_url = format!(
|
||||||
"https://streamshare.wireway.ch/download/{}",
|
"https://streamshare.wireway.ch/download/{}",
|
||||||
file_identifier
|
file_identifier
|
||||||
);
|
);
|
||||||
println!("│ {:<15} {:<31} │", "URL:".colorize("bold yellow"), download_url);
|
println!(
|
||||||
println!("│ {:<15} {:<68} │", "File ID:".colorize("bold yellow"), file_identifier);
|
"│ {:<15} {:<31} │",
|
||||||
println!("│ {:<15} {:<61} │", "Deletion Token:".colorize("bold yellow"), deletion_token);
|
"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) + "┘");
|
println!("{}", "└".to_owned() + &"─".repeat(79) + "┘");
|
||||||
}
|
}
|
||||||
Err(e) => eprintln!("{}", format!("Error: {}", e).colorize("bold red")),
|
Err(e) => eprintln!("{}", format!("Error: {}", e).colorize("bold red")),
|
||||||
|
@ -121,4 +170,4 @@ fn parse_delete_param(param: &str) -> Option<(&str, &str)> {
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue