diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2018-08-08 20:58:15 +0300 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-06-10 19:40:27 +0300 |
commit | a3a98f894fb73372ca1b792870ba20de8cc87db5 (patch) | |
tree | 5ad9e9d7e7f7ef01b8e8b8428491cc802b3e12f9 /ui | |
parent | 0c018dd544058abccd2b07d780bc5974228b33a0 (diff) |
Fix file drop bug
Diffstat (limited to 'ui')
-rw-r--r-- | ui/src/components/mail/view.rs | 16 | ||||
-rw-r--r-- | ui/src/state.rs | 5 | ||||
-rw-r--r-- | ui/src/types/helpers.rs | 2 |
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(); |