diff options
author | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2020-03-19 10:22:03 -0400 |
---|---|---|
committer | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2020-03-19 10:26:25 -0400 |
commit | bd779fc6df4641f81bbbfe50663d883d64a5c88e (patch) | |
tree | e139f2d588f46142b2d632741a91339df66d1b8f | |
parent | 06b2d7730d10240b471e859c7988ed219aa4c590 (diff) |
add soft-reload option
- this helps with reloading upon sort order change
-rw-r--r-- | src/commands/delete_files.rs | 2 | ||||
-rw-r--r-- | src/commands/mod.rs | 2 | ||||
-rw-r--r-- | src/commands/parent_directory.rs | 3 | ||||
-rw-r--r-- | src/commands/reload_dir.rs | 23 | ||||
-rw-r--r-- | src/commands/sort.rs | 13 | ||||
-rw-r--r-- | src/config/config.rs | 2 | ||||
-rw-r--r-- | src/fs/dirlist.rs | 6 | ||||
-rw-r--r-- | src/history.rs | 2 | ||||
-rw-r--r-- | src/main.rs | 1 | ||||
-rw-r--r-- | src/run.rs | 3 | ||||
-rw-r--r-- | src/tab.rs | 2 | ||||
-rw-r--r-- | src/util/mod.rs | 1 | ||||
-rw-r--r-- | src/util/sort.rs (renamed from src/sort.rs) | 7 |
13 files changed, 53 insertions, 14 deletions
diff --git a/src/commands/delete_files.rs b/src/commands/delete_files.rs index 628f324..85fe4b6 100644 --- a/src/commands/delete_files.rs +++ b/src/commands/delete_files.rs @@ -6,8 +6,8 @@ use termion::event::Key; use crate::commands::{JoshutoCommand, JoshutoRunnable, ReloadDirList}; use crate::context::JoshutoContext; use crate::error::JoshutoResult; -use crate::ui::TuiBackend; use crate::ui::widgets::TuiPrompt; +use crate::ui::TuiBackend; use crate::util::load_child::LoadChild; #[derive(Clone, Debug)] diff --git a/src/commands/mod.rs b/src/commands/mod.rs index b322d49..953da26 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -48,8 +48,8 @@ use crate::config::JoshutoCommandMapping; use crate::context::JoshutoContext; use crate::error::{JoshutoError, JoshutoErrorKind, JoshutoResult}; use crate::io::Options; -use crate::sort::SortType; use crate::ui::TuiBackend; +use crate::util::sort::SortType; use crate::HOME_DIR; diff --git a/src/commands/parent_directory.rs b/src/commands/parent_directory.rs index 6f654e9..d6d05bd 100644 --- a/src/commands/parent_directory.rs +++ b/src/commands/parent_directory.rs @@ -1,4 +1,4 @@ -use crate::commands::{JoshutoCommand, JoshutoRunnable}; +use crate::commands::{JoshutoCommand, JoshutoRunnable, ReloadDirList}; use crate::context::JoshutoContext; use crate::error::JoshutoResult; use crate::ui::TuiBackend; @@ -35,6 +35,7 @@ impl std::fmt::Display for ParentDirectory { impl JoshutoRunnable for ParentDirectory { fn execute(&self, context: &mut JoshutoContext, _: &mut TuiBackend) -> JoshutoResult<()> { Self::parent_directory(context)?; + ReloadDirList::soft_reload(context.curr_tab_index, context)?; Ok(()) } } diff --git a/src/commands/reload_dir.rs b/src/commands/reload_dir.rs index a5ef752..30aa386 100644 --- a/src/commands/reload_dir.rs +++ b/src/commands/reload_dir.rs @@ -15,6 +15,29 @@ impl ReloadDirList { "reload_dir_list" } + pub fn soft_reload(index: usize, context: &mut JoshutoContext) -> std::io::Result<()> { + let curr_tab = &mut context.tabs[index]; + let sort_option = &context.config_t.sort_option; + + if let Some(curr_list) = curr_tab.curr_list_mut() { + if curr_list.need_update() { + curr_list.reload_contents(sort_option)?; + } + } + if let Some(curr_list) = curr_tab.parent_list_mut() { + if curr_list.need_update() { + curr_list.reload_contents(sort_option)?; + } + } + if let Some(curr_list) = curr_tab.child_list_mut() { + if curr_list.need_update() { + curr_list.reload_contents(sort_option)?; + } + } + + Ok(()) + } + pub fn reload(index: usize, context: &mut JoshutoContext) -> std::io::Result<()> { let curr_tab = &mut context.tabs[index]; let sort_option = &context.config_t.sort_option; diff --git a/src/commands/sort.rs b/src/commands/sort.rs index 935e7fd..bbb90c2 100644 --- a/src/commands/sort.rs +++ b/src/commands/sort.rs @@ -1,11 +1,13 @@ use std::path; -use crate::commands::{JoshutoCommand, JoshutoRunnable}; +use crate::commands::{JoshutoCommand, JoshutoRunnable, ReloadDirList}; use crate::context::JoshutoContext; use crate::error::JoshutoResult; +use crate::history::DirectoryHistory; use crate::ui::TuiBackend; -use crate::sort::SortType; +use crate::util::load_child::LoadChild; +use crate::util::sort::SortType; use crate::HOME_DIR; @@ -27,13 +29,18 @@ impl JoshutoCommand for Sort {} impl std::fmt::Display for Sort { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - f.write_str(Self::command()) + write!(f, "{} {}", Self::command(), self.sort_method.as_str()) } } impl JoshutoRunnable for Sort { fn execute(&self, context: &mut JoshutoContext, backend: &mut TuiBackend) -> JoshutoResult<()> { context.config_t.sort_option.sort_method = self.sort_method; + for tab in context.tabs.iter_mut() { + tab.history.depreciate_all_entries(); + } + ReloadDirList::soft_reload(context.curr_tab_index, context)?; + LoadChild::load_child(context)?; Ok(()) } } diff --git a/src/config/config.rs b/src/config/config.rs index 029bbcb..9fa43f6 100644 --- a/src/config/config.rs +++ b/src/config/config.rs @@ -1,7 +1,7 @@ use serde_derive::Deserialize; use super::{parse_to_config_file, ConfigStructure, Flattenable}; -use crate::sort; +use crate::util::sort; use crate::CONFIG_FILE; diff --git a/src/fs/dirlist.rs b/src/fs/dirlist.rs index 97a03fc..d62664c 100644 --- a/src/fs/dirlist.rs +++ b/src/fs/dirlist.rs @@ -1,7 +1,7 @@ use std::{fs, path}; use crate::fs::{JoshutoDirEntry, JoshutoMetadata}; -use crate::sort::SortOption; +use crate::util::sort::SortOption; #[derive(Debug)] pub struct JoshutoDirList { @@ -59,7 +59,7 @@ impl JoshutoDirList { None } else { match self.index { - Some(i) if i < contents_len => Some(i), + Some(i) if i >= contents_len => Some(contents_len - 1), Some(i) => { let entry = &self.contents[i]; contents @@ -67,7 +67,7 @@ impl JoshutoDirList { .enumerate() .find(|(_, e)| e.file_name() == entry.file_name()) .map(|(i, _)| i) - .or(Some(contents_len - 1)) + .or(Some(i)) } None => Some(0), } diff --git a/src/history.rs b/src/history.rs index 6068b13..5abb78b 100644 --- a/src/history.rs +++ b/src/history.rs @@ -2,7 +2,7 @@ use std::collections::{hash_map::Entry, HashMap}; use std::path::{Path, PathBuf}; use crate::fs::{JoshutoDirEntry, JoshutoDirList}; -use crate::sort; +use crate::util::sort; pub trait DirectoryHistory { fn populate_to_root( diff --git a/src/main.rs b/src/main.rs index d783a9e..ed866b3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,6 @@ mod fs; mod history; mod io; mod run; -mod sort; mod tab; mod ui; mod util; @@ -67,7 +67,8 @@ pub fn run(config_t: JoshutoConfig, keymap_t: JoshutoCommandMapping) -> std::io: context.message_queue.push_back(msg); let options = &context.config_t.sort_option; for tab in context.tabs.iter_mut() { - tab.history.depreciate_all_entries(); + tab.history.depreciate_entry(&src); + tab.history.depreciate_entry(&dest); } LoadChild::load_child(&mut context)?; } @@ -2,7 +2,7 @@ use std::path::PathBuf; use crate::fs::JoshutoDirList; use crate::history::{DirectoryHistory, JoshutoHistory}; -use crate::sort; +use crate::util::sort; pub struct JoshutoTab { pub history: JoshutoHistory, diff --git a/src/util/mod.rs b/src/util/mod.rs index 9f0a3b6..862f989 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -2,4 +2,5 @@ pub mod event; pub mod format; pub mod key_mapping; pub mod load_child; +pub mod sort; pub mod unix; diff --git a/src/sort.rs b/src/util/sort.rs index a40d6dc..d290895 100644 --- a/src/sort.rs +++ b/src/util/sort.rs @@ -23,6 +23,13 @@ impl SortType { _ => None, } } + pub fn as_str(&self) -> &str { + match *self { + SortType::Lexical => "lexical", + SortType::Mtime => "mtime", + SortType::Natural => "natural", + } + } } #[derive(Clone, Debug)] |