mirror of
https://github.com/timvisee/ffsend.git
synced 2025-10-06 10:39:57 +02:00
Abstract URL opening in utility, use Url instances
This commit is contained in:
parent
c2611049df
commit
a4aa1b93e5
5 changed files with 32 additions and 11 deletions
|
@ -229,7 +229,8 @@ impl UploadResponse {
|
|||
SendFile::new_now(
|
||||
self.id,
|
||||
host,
|
||||
self.url,
|
||||
Url::parse(&self.url)
|
||||
.expect("upload response URL parse error"),
|
||||
key.secret().to_vec(),
|
||||
self.owner,
|
||||
)
|
||||
|
|
|
@ -21,7 +21,7 @@ pub struct File {
|
|||
host: Url,
|
||||
|
||||
/// The file URL that was provided by the server.
|
||||
url: String,
|
||||
url: Url,
|
||||
|
||||
/// The secret key that is required to download the file.
|
||||
secret: Vec<u8>,
|
||||
|
@ -36,7 +36,7 @@ impl File {
|
|||
id: String,
|
||||
time: DateTime<Utc>,
|
||||
host: Url,
|
||||
url: String,
|
||||
url: Url,
|
||||
secret: Vec<u8>,
|
||||
owner_key: String,
|
||||
) -> Self {
|
||||
|
@ -54,7 +54,7 @@ impl File {
|
|||
pub fn new_now(
|
||||
id: String,
|
||||
host: Url,
|
||||
url: String,
|
||||
url: Url,
|
||||
secret: Vec<u8>,
|
||||
owner_key: String,
|
||||
) -> Self {
|
||||
|
@ -79,7 +79,11 @@ impl File {
|
|||
}
|
||||
|
||||
/// Get the download URL of the file, with the secret key included.
|
||||
pub fn download_url(&self) -> String {
|
||||
format!("{}#{}", self.url, self.secret())
|
||||
pub fn download_url(&self) -> Url {
|
||||
// Get the download URL, and add the secret fragment
|
||||
let mut url = self.url.clone();
|
||||
url.set_fragment(Some(&self.secret()));
|
||||
|
||||
url
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,9 +2,9 @@ use std::path::Path;
|
|||
|
||||
use ffsend_api::action::upload::Upload as ApiUpload;
|
||||
use ffsend_api::reqwest::Client;
|
||||
use open;
|
||||
|
||||
use cmd::cmd_upload::CmdUpload;
|
||||
use util::open_url;
|
||||
|
||||
/// A file upload action.
|
||||
pub struct Upload<'a> {
|
||||
|
@ -22,7 +22,7 @@ impl<'a> Upload<'a> {
|
|||
/// Invoke the upload action.
|
||||
// TODO: create a trait for this method
|
||||
pub fn invoke(&self) {
|
||||
// Get API action parameters
|
||||
// Get API parameters
|
||||
let path = Path::new(self.cmd.file()).to_path_buf();
|
||||
let host = self.cmd.host();
|
||||
|
||||
|
@ -37,6 +37,6 @@ impl<'a> Upload<'a> {
|
|||
let url = file.download_url();
|
||||
println!("Download URL: {}", url);
|
||||
// TODO: do not expect, but return an error
|
||||
open::that(url).expect("failed to open URL");
|
||||
open_url(url).expect("failed to open URL");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
extern crate ffsend_api;
|
||||
extern crate open;
|
||||
|
||||
mod action;
|
||||
mod app;
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
use std::process::exit;
|
||||
extern crate open;
|
||||
|
||||
use std::io::Error as IoError;
|
||||
use std::process::{exit, ExitStatus};
|
||||
|
||||
use ffsend_api::url::Url;
|
||||
|
||||
/// Quit the application with an error code,
|
||||
/// and print the given error message.
|
||||
|
@ -9,3 +14,15 @@ pub fn quit_error<S: AsRef<str>>(err: S) -> ! {
|
|||
// Quit
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/// Open the given URL in the users default browser.
|
||||
/// The browsers exit statis is returned.
|
||||
pub fn open_url(url: Url) -> Result<ExitStatus, IoError> {
|
||||
open_path(url.as_str())
|
||||
}
|
||||
|
||||
/// Open the given path or URL using the program configured on the system.
|
||||
/// The program exit statis is returned.
|
||||
pub fn open_path(path: &str) -> Result<ExitStatus, IoError> {
|
||||
open::that(path)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue