summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2018-08-08 20:58:15 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2019-06-10 19:40:27 +0300
commita3a98f894fb73372ca1b792870ba20de8cc87db5 (patch)
tree5ad9e9d7e7f7ef01b8e8b8428491cc802b3e12f9 /ui
parent0c018dd544058abccd2b07d780bc5974228b33a0 (diff)
Fix file drop bug
Diffstat (limited to 'ui')
-rw-r--r--ui/src/components/mail/view.rs16
-rw-r--r--ui/src/state.rs5
-rw-r--r--ui/src/types/helpers.rs2
3 files changed, 17 insertions, 6 deletions
diff --git a/ui/src/components/mail/view.rs b/ui/src/components/mail/view.rs
index 71018a6f..01657ccc 100644
--- a/ui/src/components/mail/view.rs
+++ b/ui/src/components/mail/view.rs
@@ -150,10 +150,11 @@ impl Component for MailView {
let bottom_right = bottom_right!(area);
let (envelope_idx, y): (usize, usize) = {
- let threaded = context.accounts[self.coordinates.0]
+ let accounts = &mut context.accounts;
+ let threaded = accounts[self.coordinates.0]
.runtime_settings
.threaded;
- let mailbox = &mut context.accounts[self.coordinates.0][self.coordinates.1]
+ let mailbox = &mut accounts[self.coordinates.0][self.coordinates.1]
.as_ref()
.unwrap();
let envelope_idx: usize = if threaded {
@@ -325,10 +326,11 @@ impl Component for MailView {
self.cmd_buf.clear();
{
- let threaded = context.accounts[self.coordinates.0]
+ let accounts = &mut context.accounts;
+ let threaded = accounts[self.coordinates.0]
.runtime_settings
.threaded;
- let mailbox = &mut context.accounts[self.coordinates.0][self.coordinates.1]
+ let mailbox = &mut accounts[self.coordinates.0][self.coordinates.1]
.as_ref()
.unwrap();
let envelope_idx: usize = if threaded {
@@ -366,6 +368,7 @@ impl Component for MailView {
.unwrap_or_else(|_| {
panic!("Failed to start {}", binary.display())
});
+ context.temp_files.push(p);
} else {
context.replies.push_back(UIEvent {
id: 0,
@@ -396,10 +399,11 @@ impl Component for MailView {
let lidx = self.cmd_buf.parse::<usize>().unwrap();
self.cmd_buf.clear();
let url = {
- let threaded = context.accounts[self.coordinates.0]
+ let accounts = &mut context.accounts;
+ let threaded = accounts[self.coordinates.0]
.runtime_settings
.threaded;
- let mailbox = &mut context.accounts[self.coordinates.0][self.coordinates.1]
+ let mailbox = &mut accounts[self.coordinates.0][self.coordinates.1]
.as_ref()
.unwrap();
let envelope_idx: usize = if threaded {
diff --git a/ui/src/state.rs b/ui/src/state.rs
index 520a97c3..a9fdcd24 100644
--- a/ui/src/state.rs
+++ b/ui/src/state.rs
@@ -53,6 +53,7 @@ pub struct Context {
_backends: Backends,
input_thread: chan::Sender<bool>,
+ pub temp_files: Vec<File>,
}
impl Context {
@@ -62,6 +63,9 @@ impl Context {
pub fn input_thread(&mut self) -> &mut chan::Sender<bool> {
&mut self.input_thread
}
+ pub fn add_temp(&mut self, f: File) -> () {
+ self.temp_files.push(f);
+ }
}
/// A State object to manage and own components and entities of the UI. `State` is responsible for
@@ -159,6 +163,7 @@ impl State<std::io::Stdout> {
runtime_settings: settings,
dirty_areas: VecDeque::with_capacity(5),
replies: VecDeque::with_capacity(5),
+ temp_files: Vec::new(),
input_thread,
},
diff --git a/ui/src/types/helpers.rs b/ui/src/types/helpers.rs
index d28027c0..cd0d32b7 100644
--- a/ui/src/types/helpers.rs
+++ b/ui/src/types/helpers.rs
@@ -45,6 +45,8 @@ impl File {
}
}
+/// Returned `File` will be deleted when dropped, so make sure to add it on `context.temp_files`
+/// to reap it later.
pub fn create_temp_file(bytes: &[u8], filename: Option<&PathBuf>) -> File {
let mut dir = std::env::temp_dir();