diff --git a/api/src/action/upload.rs b/api/src/action/upload.rs index 5b42a72..4aca5e6 100644 --- a/api/src/action/upload.rs +++ b/api/src/action/upload.rs @@ -1,6 +1,6 @@ use std::fs::File; use std::io::{BufReader, Read}; -use std::path::Path; +use std::path::{Path, PathBuf}; use mime_guess::{get_mime_type, Mime}; use openssl::symm::encrypt_aead; @@ -27,12 +27,12 @@ pub struct Upload { host: Url, /// The file to upload. - path: Box, + path: PathBuf, } impl Upload { /// Construct a new upload action. - pub fn new(host: Url, path: Box) -> Self { + pub fn new(host: Url, path: PathBuf) -> Self { Self { host, path, @@ -98,7 +98,7 @@ impl Upload { -> Result<(BufReader, u64)> { // Open the file - let file = match File::open(&self.path) { + let file = match File::open(self.path.as_path()) { Ok(file) => file, Err(_) => return Err(UploadError::FileError), }; @@ -180,6 +180,7 @@ impl Upload { } /// Errors that may occur in the upload action. +#[derive(Debug)] pub enum UploadError { /// The given file is not not an existing file. /// Maybe it is a directory, or maybe it doesn't exist. diff --git a/api/src/lib.rs b/api/src/lib.rs index 4c45e59..eb8a86d 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -1,6 +1,6 @@ extern crate mime_guess; extern crate openssl; -extern crate reqwest; +pub extern crate reqwest; pub extern crate url; #[macro_use] extern crate serde_derive; diff --git a/cli/src/main.rs b/cli/src/main.rs index 4f97b4d..1d9ac08 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,12 +1,17 @@ extern crate ffsend_api; +extern crate open; mod action; mod app; mod cmd; mod util; +use std::path::Path; + use cmd::Handler; use cmd::cmd_upload::CmdUpload; +use ffsend_api::action::upload::Upload; +use ffsend_api::reqwest::Client; /// Application entrypoint. fn main() { @@ -36,9 +41,18 @@ fn invoke_action(handler: &Handler) { /// The upload action. fn action_upload(cmd_upload: &CmdUpload) { // // Get the path and host - // let path = Path::new(cmd_upload.file()); - // let host = cmd_upload.host(); + let path = Path::new(cmd_upload.file()).to_path_buf(); + let host = cmd_upload.host(); - // // Open the URL in the browser - // open::that(url).expect("failed to open URL"); + // Create a reqwest client + let client = Client::new(); + + // Create an upload action + let upload = Upload::new(host, path); + let file = upload.invoke(&client).unwrap(); + + // Open the URL in the browser + let url = file.download_url(); + println!("Download URL: {}", url); + open::that(url).expect("failed to open URL"); }