summaryrefslogtreecommitdiffstats
path: root/src/event
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2022-08-31 12:13:55 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2022-08-31 12:13:55 -0400
commit39b131a910ab8da1df2385280367e3fcc0750fb6 (patch)
treeaeb6640522e08a5242cbc2143fd294dc5cedb407 /src/event
parent0ca4ffd657f1a2884ca8422be8a78baa42f00de4 (diff)
more fine grain error handling for previewing directories
Diffstat (limited to 'src/event')
-rw-r--r--src/event/app_event.rs8
-rw-r--r--src/event/process_event.rs42
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(