diff options
Diffstat (limited to 'src/run.rs')
-rw-r--r-- | src/run.rs | 109 |
1 files changed, 44 insertions, 65 deletions
@@ -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(); |