diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2018-07-25 19:05:42 +0300 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-06-10 19:40:25 +0300 |
commit | 60494497332d5f16aae02873d351db6a049ec3c3 (patch) | |
tree | d7dfe178a8f0a6f12ca75bde8d34fb5156bece4a /ui | |
parent | b7729243adddfdd5781afe6c059092eb2c80db50 (diff) |
Add attachment view for application/* mime
concerns #2
left:
multipart text and pgp.
Diffstat (limited to 'ui')
-rw-r--r-- | ui/Cargo.toml | 1 | ||||
-rw-r--r-- | ui/src/components/mail/view.rs | 15 | ||||
-rw-r--r-- | ui/src/helpers.rs | 1 | ||||
-rw-r--r-- | ui/src/lib.rs | 1 |
4 files changed, 16 insertions, 2 deletions
diff --git a/ui/Cargo.toml b/ui/Cargo.toml index 92121e76..972fe442 100644 --- a/ui/Cargo.toml +++ b/ui/Cargo.toml @@ -12,6 +12,7 @@ notify = "4.0.1" notify-rust = "^3" nom = "3.2.0" chan-signal = "0.3.1" +mime_apps = { path = "../../mime_apps", version = "*" } uuid = { version = "0.6", features = ["serde", "v4"] } linkify = "0.3.1" diff --git a/ui/src/components/mail/view.rs b/ui/src/components/mail/view.rs index 0015faa0..1b9e5401 100644 --- a/ui/src/components/mail/view.rs +++ b/ui/src/components/mail/view.rs @@ -2,6 +2,8 @@ use super::*; use linkify::{LinkFinder, Link}; use std::process::{Command, Stdio}; +use mime_apps::query_default_app; + #[derive(PartialEq, Debug)] enum ViewMode { @@ -194,8 +196,17 @@ impl Component for MailView { let envelope: &Envelope = &mailbox.collection[envelope_idx]; if let Some(u) = envelope.body().attachments().get(lidx) { - let p = create_temp_file(&decode(u), None); - eprintln!("{:?}", p); + let mut p = create_temp_file(&decode(u), None); + let attachment_type = u.mime_type(); + eprintln!("attachment type {}", attachment_type); + let binary = query_default_app(attachment_type); + eprintln!("{:?}, binary = {:?}", p, binary); + Command::new(binary.unwrap()) + .arg(p.path()) + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .spawn() + .expect("Failed to start xdg_open"); } else { context.replies.push_back(UIEvent { id: 0, event_type: UIEventType::StatusNotification(format!("Attachment `{}` not found.", lidx)) }); diff --git a/ui/src/helpers.rs b/ui/src/helpers.rs index 83bb3fa9..c7916855 100644 --- a/ui/src/helpers.rs +++ b/ui/src/helpers.rs @@ -20,6 +20,7 @@ impl File { } +//TODO: add temp files to a list to reap them when dropped pub fn create_temp_file(bytes: &[u8], filename: Option<&PathBuf>) -> File { let mut dir = std::env::temp_dir(); diff --git a/ui/src/lib.rs b/ui/src/lib.rs index a96f9f71..87c3e53a 100644 --- a/ui/src/lib.rs +++ b/ui/src/lib.rs @@ -44,6 +44,7 @@ use self::cells::*; pub use self::components::*; extern crate melib; +extern crate mime_apps; extern crate notify_rust; #[macro_use] extern crate chan; |