diff options
author | Jeff Zhao <jeff.no.zhao@gmail.com> | 2022-08-31 12:13:55 -0400 |
---|---|---|
committer | Jeff Zhao <jeff.no.zhao@gmail.com> | 2022-08-31 12:13:55 -0400 |
commit | 39b131a910ab8da1df2385280367e3fcc0750fb6 (patch) | |
tree | aeb6640522e08a5242cbc2143fd294dc5cedb407 /src/event | |
parent | 0ca4ffd657f1a2884ca8422be8a78baa42f00de4 (diff) |
more fine grain error handling for previewing directories
Diffstat (limited to 'src/event')
-rw-r--r-- | src/event/app_event.rs | 8 | ||||
-rw-r--r-- | src/event/process_event.rs | 42 |
2 files changed, 42 insertions, 8 deletions
diff --git a/src/event/app_event.rs b/src/event/app_event.rs index 05f5d02..4153f0b 100644 --- a/src/event/app_event.rs +++ b/src/event/app_event.rs @@ -10,6 +10,8 @@ use signal_hook::iterator::SignalsInfo; use termion::event::Event; use termion::input::TermRead; +use uuid::Uuid; + use crate::fs::JoshutoDirList; use crate::io::FileOperationProgress; use crate::preview::preview_file::FilePreview; @@ -28,7 +30,11 @@ pub enum AppEvent { ChildProcessComplete(u32), // preview thread events - PreviewDir(io::Result<Box<JoshutoDirList>>), + PreviewDir { + id: Uuid, + path: path::PathBuf, + res: Box<io::Result<JoshutoDirList>>, + }, PreviewFile(path::PathBuf, Box<io::Result<FilePreview>>), // terminal size change events diff --git a/src/event/process_event.rs b/src/event/process_event.rs index 446b98c..80970b9 100644 --- a/src/event/process_event.rs +++ b/src/event/process_event.rs @@ -1,9 +1,11 @@ -use notify; -use signal_hook::consts::signal; use std::io; use std::path; + +use notify; +use signal_hook::consts::signal; use termion::event::{Event, Key, MouseButton, MouseEvent}; use tui::layout::{Constraint, Direction, Layout}; +use uuid::Uuid; use crate::commands::{cursor_move, parent_cursor_move, reload}; use crate::config::{AppKeyMapping, KeyMapping}; @@ -13,6 +15,7 @@ use crate::fs::JoshutoDirList; use crate::history::DirectoryHistory; use crate::io::{FileOperation, FileOperationProgress}; use crate::key_command::{AppExecute, Command, CommandKeybind}; +use crate::preview::preview_default::PreviewState; use crate::preview::preview_file::FilePreview; use crate::ui; use crate::ui::views::TuiCommandMenu; @@ -58,7 +61,7 @@ pub fn process_noninteractive(event: AppEvent, context: &mut AppContext) { AppEvent::IoWorkerCreate => process_new_worker(context), AppEvent::FileOperationProgress(res) => process_worker_progress(context, res), AppEvent::IoWorkerResult(res) => process_finished_worker(context, res), - AppEvent::PreviewDir(Ok(b)) => process_dir_preview(context, *b), + AppEvent::PreviewDir { id, path, res } => process_dir_preview(context, id, path, res), AppEvent::PreviewFile(path, b) => process_file_preview(context, path, *b), AppEvent::Signal(signal::SIGWINCH) => {} AppEvent::Filesystem(e) => process_filesystem_event(e, context), @@ -141,11 +144,36 @@ pub fn process_finished_worker( } } -pub fn process_dir_preview(context: &mut AppContext, dirlist: JoshutoDirList) { - let history = context.tab_context_mut().curr_tab_mut().history_mut(); +pub fn process_dir_preview( + context: &mut AppContext, + id: Uuid, + path: path::PathBuf, + res: Box<io::Result<JoshutoDirList>>, +) { + for (tab_id, tab) in context.tab_context_mut().iter_mut() { + if *tab_id == id { + match *res { + Ok(dirlist) => { + // remove from loading state + tab.history_metadata_mut().remove(dirlist.file_path()); - let dir_path = dirlist.file_path().to_path_buf(); - history.insert(dir_path, dirlist); + let history = tab.history_mut(); + let dir_path = dirlist.file_path().to_path_buf(); + history.insert(dir_path, dirlist); + } + Err(e) => { + // set to false so we don't load again + tab.history_metadata_mut().insert( + path, + PreviewState::Error { + message: e.to_string(), + }, + ); + } + } + break; + } + } } pub fn process_file_preview( |