Browse Source

Implement upload logic from API, use pathbuf

timvisee 7 years ago
parent
commit
061e6e0658
3 changed files with 24 additions and 9 deletions
  1. 5 4
      api/src/action/upload.rs
  2. 1 1
      api/src/lib.rs
  3. 18 4
      cli/src/main.rs

+ 5 - 4
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>,
+    path: PathBuf,
 }
 
 impl Upload {
     /// Construct a new upload action.
-    pub fn new(host: Url, path: Box<Path>) -> Self {
+    pub fn new(host: Url, path: PathBuf) -> Self {
         Self {
             host,
             path,
@@ -98,7 +98,7 @@ impl Upload {
         -> Result<(BufReader<EncryptedFileReaderTagged>, 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.

+ 1 - 1
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;

+ 18 - 4
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();
+
+    // 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
-    // open::that(url).expect("failed to open URL");
+    // Open the URL in the browser
+    let url = file.download_url();
+    println!("Download URL: {}", url);
+    open::that(url).expect("failed to open URL");
 }