summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2018-07-25 19:05:42 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2019-06-10 19:40:25 +0300
commit60494497332d5f16aae02873d351db6a049ec3c3 (patch)
treed7dfe178a8f0a6f12ca75bde8d34fb5156bece4a /ui
parentb7729243adddfdd5781afe6c059092eb2c80db50 (diff)
Add attachment view for application/* mime
concerns #2 left: multipart text and pgp.
Diffstat (limited to 'ui')
-rw-r--r--ui/Cargo.toml1
-rw-r--r--ui/src/components/mail/view.rs15
-rw-r--r--ui/src/helpers.rs1
-rw-r--r--ui/src/lib.rs1
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;