2025-05-28 00:07:59 +00:00
|
|
|
mod cli;
|
2025-05-22 17:34:44 +00:00
|
|
|
mod sharry;
|
|
|
|
|
|
2025-05-28 00:07:59 +00:00
|
|
|
use std::time::Duration;
|
2025-05-27 14:01:09 +00:00
|
|
|
|
|
|
|
|
use clap::Parser;
|
2025-05-26 23:24:05 +00:00
|
|
|
use log::{error, info};
|
2025-05-22 17:34:44 +00:00
|
|
|
use ureq::Agent;
|
|
|
|
|
|
2025-05-28 00:07:59 +00:00
|
|
|
use cli::Cli;
|
2025-05-27 14:01:09 +00:00
|
|
|
use sharry::{Alias, File, NewShareRequest, Share, Uri};
|
|
|
|
|
|
2025-05-17 23:57:52 +00:00
|
|
|
fn main() {
|
2025-05-22 17:34:44 +00:00
|
|
|
env_logger::init();
|
|
|
|
|
|
2025-05-28 00:07:59 +00:00
|
|
|
let args = Cli::parse();
|
|
|
|
|
info!("args: {args:?}");
|
|
|
|
|
|
2025-05-22 17:34:44 +00:00
|
|
|
let agent: Agent = Agent::config_builder()
|
2025-05-28 00:07:59 +00:00
|
|
|
.timeout_global(args.timeout.map(Duration::from_secs))
|
2025-05-22 17:34:44 +00:00
|
|
|
.build()
|
|
|
|
|
.into();
|
|
|
|
|
|
2025-05-27 17:18:29 +00:00
|
|
|
let files: Vec<File> = (args.files.iter())
|
2025-05-28 00:07:59 +00:00
|
|
|
.filter(|&p| p.exists())
|
2025-05-27 17:18:29 +00:00
|
|
|
.map(File::new)
|
|
|
|
|
.map(Result::unwrap)
|
|
|
|
|
.collect();
|
|
|
|
|
|
2025-05-28 00:07:59 +00:00
|
|
|
if files.is_empty() {
|
|
|
|
|
panic!("NO FILES GIVEN");
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-27 14:01:09 +00:00
|
|
|
let alias = Alias::new(Uri::with_protocol(args.proto, args.url), args.alias);
|
2025-05-22 17:34:44 +00:00
|
|
|
|
2025-05-27 20:00:21 +00:00
|
|
|
let share = NewShareRequest::new(args.name, args.desc, args.views);
|
2025-05-24 00:22:24 +00:00
|
|
|
let share = Share::create(&agent, &alias, share).unwrap();
|
2025-05-26 23:56:31 +00:00
|
|
|
info!("share: {share:?}");
|
2025-05-22 21:07:49 +00:00
|
|
|
|
2025-05-27 17:18:29 +00:00
|
|
|
for file in files {
|
|
|
|
|
let file = file.create(&agent, &share).unwrap();
|
|
|
|
|
info!("file: {file:?}");
|
|
|
|
|
|
|
|
|
|
for chunk in file.chunked(args.chunk * 1024 * 1024) {
|
|
|
|
|
info!("chunk len: {}", chunk.bytes.len());
|
|
|
|
|
|
|
|
|
|
file.upload_chunk(&agent, &alias, &chunk)
|
|
|
|
|
.inspect_err(|e| error!("error: {e}"))
|
|
|
|
|
.unwrap();
|
|
|
|
|
}
|
2025-05-26 20:31:22 +00:00
|
|
|
}
|
|
|
|
|
|
2025-05-22 21:07:49 +00:00
|
|
|
share.notify(&agent).unwrap();
|
2025-05-17 23:57:52 +00:00
|
|
|
}
|