diff --git a/src/main.rs b/src/main.rs index ab11637..d337f57 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,8 +5,8 @@ mod thumbnailing; mod protobuf; mod errors; -use std::borrow::Cow; use std::io::Read; +use std::{borrow::Cow, io::stdout}; use std::fs::File; use std::path::Path; @@ -34,9 +34,15 @@ fn trim_url<'a>(base_url: &str, url: &'a str) -> Option<&'a str> { fn main() { let args: parse::Args = argh::from_env(); + let server_no_trailing_slash = args.server.trim_end_matches('/'); + let full_server = if server_no_trailing_slash.starts_with("http") { + Cow::Borrowed(server_no_trailing_slash) + } else { + Cow::Owned(format!("https://{}", server_no_trailing_slash)) + }; match args.command { - Command::Create(create_args) => create(&args.server, create_args), - Command::Download(download_args) => download(&args.server, download_args), + Command::Create(create_args) => create(&*full_server, create_args), + Command::Download(download_args) => download(&*full_server, download_args), } } @@ -69,11 +75,6 @@ fn create(server: &str, args: CreateArgs) { } else { println!(" \x1b[32mDone!\n"); let agent = upload::get_agent(); - let full_server = if server.starts_with("http") { - Cow::Borrowed(server) - } else { - Cow::Owned(format!("https://{}", server)) - }; let index_url = files.into_iter() .inspect(|(path, _)| print!("\x1b[36m{}\x1b[0m\n\x1b[37m├─\x1b[0m Reading... ", path.display())) .inspect(|_| drop(stdout().flush())) @@ -105,15 +106,15 @@ fn create(server: &str, args: CreateArgs) { .inspect(|r| if r.is_ok() { print!("\x1b[32mDone!\n\x1b[37m└─\x1b[0m Uploading... ")}) .inspect(|_| drop(stdout().flush())) .map(|r| r.and_then(|(key, full_img, thumb, blurhash)| - upload::put_data(&agent, &*full_server, &thumb) + upload::put_data(&agent, server, &thumb) .and_then(|thumb_url| - upload::put_data(&agent, &*full_server, &full_img) + upload::put_data(&agent, server, &full_img) .map(|full_url| (key, full_url, thumb_url, blurhash))) .map_err(AviaryError::from_upload_error) )) .map(|r| r.and_then(|(key, full_url, thumb_url, blurhash)| { - let full_trimmed = trim_url(&*full_server, &full_url); - let thmb_trimmed = trim_url(&*full_server, &thumb_url); + let full_trimmed = trim_url(server, &full_url); + let thmb_trimmed = trim_url(server, &thumb_url); if let (Some(full_url), Some(thmb_url)) = (full_trimmed, thmb_trimmed) { Ok((key, full_url.to_owned(), thmb_url.to_owned(), blurhash)) } else { @@ -142,7 +143,7 @@ fn create(server: &str, args: CreateArgs) { ); let encoded_key = base64::encode(index_key); print!("\x1b[0mUploading index... "); - upload::put_data(&agent, &*full_server, &encrypted_index) + upload::put_data(&agent, server, &encrypted_index) .map_err(|e| AviaryError::from_upload_error(e)) .map(|url| format!("{}#{}", url.trim().trim_end_matches(".bin"), &encoded_key)) });