mod cli; mod sharry; use std::time::Duration; use clap::Parser; use log::{error, info}; use ureq::Agent; use cli::Cli; use sharry::{Alias, File, NewShareRequest, Share, Uri}; fn main() { env_logger::init(); let args = Cli::parse(); info!("args: {args:?}"); let agent: Agent = Agent::config_builder() .timeout_global(args.timeout.map(Duration::from_secs)) .build() .into(); let files: Vec = (args.files.iter()) .filter(|&p| p.exists()) .map(File::new) .map(Result::unwrap) .collect(); if files.is_empty() { panic!("NO FILES GIVEN"); } let alias = Alias::new(Uri::with_protocol(args.protocol, args.url), args.alias); let share = NewShareRequest::new(args.name, args.description, args.max_views); let share = Share::create(&agent, &alias, share).unwrap(); info!("share: {share:?}"); for file in files { let file = file.create(&agent, &share).unwrap(); info!("file: {file:?}"); for chunk in file.chunked(args.chunk_size * 1024 * 1024) { info!("chunk len: {}", chunk.bytes.len()); file.upload_chunk(&agent, &alias, &chunk) .inspect_err(|e| error!("error: {e}")) .unwrap(); } } share.notify(&agent).unwrap(); }