summaryrefslogtreecommitdiffstats
path: root/src/run.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/run.rs')
-rw-r--r--src/run.rs109
1 files changed, 44 insertions, 65 deletions
diff --git a/src/run.rs b/src/run.rs
index 6ec4c16..45674f4 100644
--- a/src/run.rs
+++ b/src/run.rs
@@ -5,6 +5,7 @@ use crate::commands;
use crate::commands::{CommandKeybind, JoshutoCommand};
use crate::config;
use crate::context::JoshutoContext;
+use crate::error::JoshutoError;
use crate::preview;
use crate::ui;
use crate::window::JoshutoPanel;
@@ -54,80 +55,52 @@ fn process_threads(context: &mut JoshutoContext, view: &JoshutoView) {
let mut i: usize = 0;
while i < context.threads.len() {
match &context.threads[i].recv_timeout(&thread_wait_duration) {
- Ok(progress_info) => {
- if progress_info.bytes_finished == progress_info.total_bytes {
- ncurses::werase(view.bot_win.win);
- let thread = context.threads.swap_remove(i);
- thread.handle.join().unwrap();
- let (tab_src, tab_dest) = (thread.tab_src, thread.tab_dest);
- if tab_src < context.tabs.len() {
- context.tabs[tab_src].reload_contents(&context.config_t.sort_option);
- if tab_src == context.curr_tab_index {
- context.tabs[tab_src].refresh(
- view,
- &context.config_t,
- &context.username,
- &context.hostname,
- );
- }
- }
- if tab_dest != tab_src && tab_dest < context.tabs.len() {
- context.tabs[tab_dest].reload_contents(&context.config_t.sort_option);
- if tab_dest == context.curr_tab_index {
- context.tabs[tab_dest].refresh(
- view,
- &context.config_t,
- &context.username,
- &context.hostname,
- );
- }
- }
- } else {
- let percent = (progress_info.bytes_finished as f64
- / progress_info.total_bytes as f64)
- as f32;
- ui::draw_progress_bar(&view.bot_win, percent);
- ncurses::wnoutrefresh(view.bot_win.win);
- i += 1;
- }
- ncurses::doupdate();
- }
Err(std::sync::mpsc::RecvTimeoutError::Disconnected) => {
ncurses::werase(view.bot_win.win);
let thread = context.threads.swap_remove(i);
let (tab_src, tab_dest) = (thread.tab_src, thread.tab_dest);
- thread.handle.join().unwrap();
- if tab_src < context.tabs.len() {
- let dirty_tab = &mut context.tabs[tab_src];
- dirty_tab.reload_contents(&context.config_t.sort_option);
- if tab_src == context.curr_tab_index {
- dirty_tab.refresh(
- view,
- &context.config_t,
- &context.username,
- &context.hostname,
- );
- preview::preview_file(dirty_tab, view, &context.config_t);
+ match thread.handle.join() {
+ Err(e) => {
+ ui::wprint_err(&view.bot_win, format!("{:?}", e).as_str());
+ ncurses::doupdate();
}
- }
- if tab_dest != tab_src && tab_dest < context.tabs.len() {
- let dirty_tab = &mut context.tabs[tab_dest];
- dirty_tab.reload_contents(&context.config_t.sort_option);
- if tab_src == context.curr_tab_index {
- dirty_tab.refresh(
- view,
- &context.config_t,
- &context.username,
- &context.hostname,
- );
- preview::preview_file(dirty_tab, view, &context.config_t);
+ Ok(_) => {
+ if tab_src < context.tabs.len() {
+ let dirty_tab = &mut context.tabs[tab_src];
+ dirty_tab.reload_contents(&context.config_t.sort_option);
+ if tab_src == context.curr_tab_index {
+ dirty_tab.refresh(
+ view,
+ &context.config_t,
+ &context.username,
+ &context.hostname,
+ );
+ preview::preview_file(dirty_tab, view, &context.config_t);
+ }
+ }
+ if tab_dest != tab_src && tab_dest < context.tabs.len() {
+ let dirty_tab = &mut context.tabs[tab_dest];
+ dirty_tab.reload_contents(&context.config_t.sort_option);
+ if tab_src == context.curr_tab_index {
+ dirty_tab.refresh(
+ view,
+ &context.config_t,
+ &context.username,
+ &context.hostname,
+ );
+ preview::preview_file(dirty_tab, view, &context.config_t);
+ }
+ }
+ ncurses::doupdate();
}
- }
- ncurses::doupdate();
+ };
}
Err(std::sync::mpsc::RecvTimeoutError::Timeout) => {
i += 1;
}
+ Ok(progress_info) => {
+ i += 1;
+ }
}
}
}
@@ -199,7 +172,13 @@ pub fn run(config_t: config::JoshutoConfig, keymap_t: config::JoshutoKeymap) {
continue;
}
}
- keycommand.execute(&mut context, &view);
+ match keycommand.execute(&mut context, &view) {
+ Ok(()) => {}
+ Err(JoshutoError::IO(e)) => {
+ ui::wprint_err(&view.bot_win, e.to_string().as_str());
+ ncurses::doupdate();
+ }
+ }
}
}
ui::end_ncurses();