summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2021-05-01 09:57:58 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2021-05-01 10:00:45 -0400
commit4409199315c5cc22bfba6cc63052a49dbdddfeb1 (patch)
treecfda2851a0c01cd183643810a6fe0941129f103a
parent297a06ef3a529687e7edb84d5f67376c654b1927 (diff)
remove methods
-rw-r--r--src/commands/change_directory.rs2
-rw-r--r--src/commands/cursor_move.rs4
-rw-r--r--src/commands/delete_files.rs2
-rw-r--r--src/commands/new_directory.rs2
-rw-r--r--src/commands/parent_cursor_move.rs2
-rw-r--r--src/commands/reload.rs4
-rw-r--r--src/commands/rename_file.rs2
-rw-r--r--src/commands/show_hidden.rs7
-rw-r--r--src/commands/sort.rs6
-rw-r--r--src/commands/tab_ops.rs11
-rw-r--r--src/config/theme/theme.rs4
-rw-r--r--src/context/context.rs57
-rw-r--r--src/fs/dirlist.rs4
-rw-r--r--src/ui/views/tui_folder_view.rs21
-rw-r--r--src/ui/views/tui_textfield.rs7
-rw-r--r--src/ui/widgets/tui_topbar.rs7
-rw-r--r--src/util/format.rs2
-rw-r--r--src/util/input.rs4
-rw-r--r--src/util/load_child.rs2
19 files changed, 71 insertions, 79 deletions
diff --git a/src/commands/change_directory.rs b/src/commands/change_directory.rs
index 6268d01..f9b2657 100644
--- a/src/commands/change_directory.rs
+++ b/src/commands/change_directory.rs
@@ -13,7 +13,7 @@ pub fn cd(path: &path::Path, context: &mut AppContext) -> std::io::Result<()> {
fn _change_directory(path: &path::Path, context: &mut AppContext) -> std::io::Result<()> {
cd(path, context)?;
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
context
.tab_context_mut()
.curr_tab_mut()
diff --git a/src/commands/cursor_move.rs b/src/commands/cursor_move.rs
index 4e81473..a2bd90c 100644
--- a/src/commands/cursor_move.rs
+++ b/src/commands/cursor_move.rs
@@ -9,7 +9,7 @@ pub fn cursor_move(new_index: usize, context: &mut AppContext) -> JoshutoResult<
let mut new_index = new_index;
if let Some(curr_list) = context.tab_context_mut().curr_tab_mut().curr_list_mut() {
- if curr_list.index.is_some() {
+ if !curr_list.is_empty() {
let dir_len = curr_list.len();
if new_index >= dir_len {
new_index = dir_len - 1;
@@ -24,7 +24,7 @@ pub fn cursor_move(new_index: usize, context: &mut AppContext) -> JoshutoResult<
// get preview
if let Some(path) = path {
if path.is_dir() {
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
context
.tab_context_mut()
.curr_tab_mut()
diff --git a/src/commands/delete_files.rs b/src/commands/delete_files.rs
index 94e9d63..36a4a25 100644
--- a/src/commands/delete_files.rs
+++ b/src/commands/delete_files.rs
@@ -111,7 +111,7 @@ pub fn delete_selected_files(
) -> std::io::Result<()> {
delete_files(context, backend)?;
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
let curr_path = context.tab_context_ref().curr_tab_ref().pwd().to_path_buf();
for tab in context.tab_context_mut().iter_mut() {
tab.history_mut().reload(&curr_path, &options)?;
diff --git a/src/commands/new_directory.rs b/src/commands/new_directory.rs
index 52bf9a6..2876fc9 100644
--- a/src/commands/new_directory.rs
+++ b/src/commands/new_directory.rs
@@ -7,7 +7,7 @@ use crate::util::load_child::LoadChild;
pub fn new_directory(context: &mut AppContext, p: &path::Path) -> JoshutoResult<()> {
std::fs::create_dir_all(p)?;
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
let curr_path = context.tab_context_ref().curr_tab_ref().pwd().to_path_buf();
for tab in context.tab_context_mut().iter_mut() {
tab.history_mut().reload(&curr_path, &options)?;
diff --git a/src/commands/parent_cursor_move.rs b/src/commands/parent_cursor_move.rs
index 6e77bd8..d9ca361 100644
--- a/src/commands/parent_cursor_move.rs
+++ b/src/commands/parent_cursor_move.rs
@@ -30,7 +30,7 @@ pub fn parent_cursor_move(new_index: usize, context: &mut AppContext) -> Joshuto
// get preview
if let Some(path) = path {
if path.is_dir() {
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
context
.tab_context_mut()
.curr_tab_mut()
diff --git a/src/commands/reload.rs b/src/commands/reload.rs
index 7074191..2cbfcf1 100644
--- a/src/commands/reload.rs
+++ b/src/commands/reload.rs
@@ -3,7 +3,7 @@ use crate::error::JoshutoResult;
use crate::util::load_child::LoadChild;
pub fn soft_reload(index: usize, context: &mut AppContext) -> std::io::Result<()> {
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
if let Some(curr_tab) = context.tab_context_mut().tab_mut(index) {
if let Some(curr_list) = curr_tab.curr_list_mut() {
if curr_list.need_update() {
@@ -25,7 +25,7 @@ pub fn soft_reload(index: usize, context: &mut AppContext) -> std::io::Result<()
}
pub fn reload(context: &mut AppContext, index: usize) -> std::io::Result<()> {
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
if let Some(curr_tab) = context.tab_context_mut().tab_mut(index) {
if let Some(curr_list) = curr_tab.curr_list_mut() {
curr_list.reload_contents(&options)?;
diff --git a/src/commands/rename_file.rs b/src/commands/rename_file.rs
index 9f625c4..d8f491b 100644
--- a/src/commands/rename_file.rs
+++ b/src/commands/rename_file.rs
@@ -18,7 +18,7 @@ pub fn _rename_file(
return Err(err);
}
std::fs::rename(&src, &dest)?;
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
if let Some(curr_list) = context.tab_context_mut().curr_tab_mut().curr_list_mut() {
curr_list.reload_contents(&options)?;
}
diff --git a/src/commands/show_hidden.rs b/src/commands/show_hidden.rs
index 2f16a19..9108760 100644
--- a/src/commands/show_hidden.rs
+++ b/src/commands/show_hidden.rs
@@ -5,8 +5,11 @@ use crate::history::DirectoryHistory;
use super::reload;
pub fn _toggle_hidden(context: &mut AppContext) {
- let opposite = !context.display_options_ref().show_hidden();
- context.display_options_mut().set_show_hidden(opposite);
+ let opposite = !context.config_ref().display_options_ref().show_hidden();
+ context
+ .config_mut()
+ .display_options_mut()
+ .set_show_hidden(opposite);
for tab in context.tab_context_mut().iter_mut() {
tab.history_mut().depreciate_all_entries();
diff --git a/src/commands/sort.rs b/src/commands/sort.rs
index 48f8d2e..ffb8ea0 100644
--- a/src/commands/sort.rs
+++ b/src/commands/sort.rs
@@ -8,7 +8,7 @@ use crate::util::sort::SortType;
use super::reload;
pub fn set_sort(context: &mut AppContext, method: SortType) -> JoshutoResult<()> {
- context.sort_options_mut().sort_method = method;
+ context.config_mut().sort_options_mut().sort_method = method;
for tab in context.tab_context_mut().iter_mut() {
tab.history_mut().depreciate_all_entries();
@@ -20,7 +20,9 @@ pub fn set_sort(context: &mut AppContext, method: SortType) -> JoshutoResult<()>
}
pub fn toggle_reverse(context: &mut AppContext) -> JoshutoResult<()> {
- context.sort_options_mut().reverse = !context.sort_options_ref().reverse;
+ let reversed = !context.config_ref().sort_options_ref().reverse;
+ context.config_mut().sort_options_mut().reverse = reversed;
+
for tab in context.tab_context_mut().iter_mut() {
tab.history_mut().depreciate_all_entries();
}
diff --git a/src/commands/tab_ops.rs b/src/commands/tab_ops.rs
index e934229..d397287 100644
--- a/src/commands/tab_ops.rs
+++ b/src/commands/tab_ops.rs
@@ -15,12 +15,9 @@ fn _tab_switch(new_index: usize, context: &mut AppContext) -> std::io::Result<()
let path = context.tab_context_ref().curr_tab_ref().pwd().to_path_buf();
std::env::set_current_dir(path.as_path())?;
- let options = context.display_options_ref().clone();
- context
- .tab_context_mut()
- .curr_tab_mut()
- .history_mut()
- .create_or_soft_update(path.as_path(), &options)?;
+ let options = context.config_ref().display_options_ref().clone();
+ let history = context.tab_context_mut().curr_tab_mut().history_mut();
+ history.create_or_soft_update(path.as_path(), &options)?;
Ok(())
}
@@ -39,7 +36,7 @@ pub fn new_tab(context: &mut AppContext) -> JoshutoResult<()> {
None => path::PathBuf::from("/"),
};
- let tab = JoshutoTab::new(curr_path, context.display_options_ref())?;
+ let tab = JoshutoTab::new(curr_path, context.config_ref().display_options_ref())?;
context.tab_context_mut().push_tab(tab);
let new_index = context.tab_context_ref().len() - 1;
context.tab_context_mut().set_index(new_index);
diff --git a/src/config/theme/theme.rs b/src/config/theme/theme.rs
index 1068723..5b05fd3 100644
--- a/src/config/theme/theme.rs
+++ b/src/config/theme/theme.rs
@@ -6,10 +6,6 @@ use tui::style::{Color, Modifier};
use super::{AppStyle, RawAppStyle};
use crate::config::{parse_to_config_file, ConfigStructure, Flattenable};
-const fn default_color() -> Color {
- Color::Reset
-}
-
#[derive(Clone, Debug, Deserialize)]
pub struct RawAppTheme {
#[serde(default)]
diff --git a/src/context/context.rs b/src/context/context.rs
index bee44aa..dfc1b89 100644
--- a/src/context/context.rs
+++ b/src/context/context.rs
@@ -6,20 +6,26 @@ use std::thread;
use crate::config;
use crate::context::{LocalStateContext, TabContext};
use crate::io::{IoWorkerObserver, IoWorkerProgress, IoWorkerThread};
-use crate::util::display::DisplayOption;
use crate::util::event::{AppEvent, Events};
use crate::util::search::SearchPattern;
-use crate::util::sort;
pub struct AppContext {
pub exit: bool,
+ // app config
config: config::AppConfig,
+ // event loop querying
events: Events,
+ // context related to tabs
tab_context: TabContext,
+ // context related to local file state
local_state: Option<LocalStateContext>,
+ // context related to searching
search_state: Option<SearchPattern>,
+ // message queue for displaying messages
message_queue: VecDeque<String>,
+ // queue of IO workers
worker_queue: VecDeque<IoWorkerThread>,
+ // current worker
worker: Option<IoWorkerObserver>,
}
@@ -38,28 +44,22 @@ impl AppContext {
}
}
- pub fn config_ref(&self) -> &config::AppConfig {
- &self.config
- }
-
- pub fn config_mut(&mut self) -> &mut config::AppConfig {
- &mut self.config
+ // event related
+ pub fn poll_event(&self) -> Result<AppEvent, mpsc::RecvError> {
+ self.events.next()
}
-
- pub fn display_options_ref(&self) -> &DisplayOption {
- self.config_ref().display_options_ref()
+ pub fn get_event_tx(&self) -> mpsc::Sender<AppEvent> {
+ self.events.event_tx.clone()
}
-
- pub fn display_options_mut(&mut self) -> &mut DisplayOption {
- self.config_mut().display_options_mut()
+ pub fn flush_event(&self) {
+ self.events.flush();
}
- pub fn sort_options_ref(&self) -> &sort::SortOption {
- self.config_ref().display_options_ref().sort_options_ref()
+ pub fn config_ref(&self) -> &config::AppConfig {
+ &self.config
}
-
- pub fn sort_options_mut(&mut self) -> &mut sort::SortOption {
- self.config_mut().display_options_mut().sort_options_mut()
+ pub fn config_mut(&mut self) -> &mut config::AppConfig {
+ &mut self.config
}
pub fn tab_context_ref(&self) -> &TabContext {
@@ -79,17 +79,6 @@ impl AppContext {
self.message_queue.pop_front()
}
- // event related
- pub fn poll_event(&self) -> Result<AppEvent, mpsc::RecvError> {
- self.events.next()
- }
- pub fn get_event_tx(&self) -> mpsc::Sender<AppEvent> {
- self.events.event_tx.clone()
- }
- pub fn flush_event(&self) {
- self.events.flush();
- }
-
// local state related
pub fn set_local_state(&mut self, state: LocalStateContext) {
self.local_state = Some(state);
@@ -98,13 +87,12 @@ impl AppContext {
self.local_state.take()
}
- pub fn set_search_state(&mut self, pattern: SearchPattern) {
- self.search_state = Some(pattern);
- }
-
pub fn get_search_state(&self) -> Option<&SearchPattern> {
self.search_state.as_ref()
}
+ pub fn set_search_state(&mut self, pattern: SearchPattern) {
+ self.search_state = Some(pattern);
+ }
// worker related
pub fn add_worker(&mut self, thread: IoWorkerThread) {
@@ -120,7 +108,6 @@ impl AppContext {
pub fn worker_iter(&self) -> Iter<IoWorkerThread> {
self.worker_queue.iter()
}
-
pub fn worker_ref(&self) -> Option<&IoWorkerObserver> {
self.worker.as_ref()
}
diff --git a/src/fs/dirlist.rs b/src/fs/dirlist.rs
index 99e686c..adc848a 100644
--- a/src/fs/dirlist.rs
+++ b/src/fs/dirlist.rs
@@ -46,6 +46,10 @@ impl JoshutoDirList {
self.contents.len()
}
+ pub fn is_empty(&self) -> bool {
+ self.contents.is_empty()
+ }
+
pub fn modified(&self) -> bool {
let metadata = std::fs::symlink_metadata(self.file_path());
match metadata {
diff --git a/src/ui/views/tui_folder_view.rs b/src/ui/views/tui_folder_view.rs
index 24aa36f..3705bd8 100644
--- a/src/ui/views/tui_folder_view.rs
+++ b/src/ui/views/tui_folder_view.rs
@@ -31,17 +31,18 @@ impl<'a> Widget for TuiFolderView<'a> {
let parent_list = curr_tab.parent_list_ref();
let child_list = curr_tab.child_list_ref();
- let constraints: &[Constraint; 3] =
- if !self.context.display_options_ref().collapse_preview() {
- &self.context.display_options_ref().default_layout
- } else {
- match child_list {
- Some(_) => &self.context.display_options_ref().default_layout,
- None => &self.context.display_options_ref().no_preview_layout,
- }
- };
+ let config = self.context.config_ref();
+
+ let constraints: &[Constraint; 3] = if !config.display_options_ref().collapse_preview() {
+ &config.display_options_ref().default_layout
+ } else {
+ match child_list {
+ Some(_) => &config.display_options_ref().default_layout,
+ None => &config.display_options_ref().no_preview_layout,
+ }
+ };
- let layout_rect = if self.context.display_options_ref().show_borders() {
+ let layout_rect = if config.display_options_ref().show_borders() {
let area = Rect {
y: area.top() + 1,
height: area.height - 2,
diff --git a/src/ui/views/tui_textfield.rs b/src/ui/views/tui_textfield.rs
index 43d8f4d..701bf20 100644
--- a/src/ui/views/tui_textfield.rs
+++ b/src/ui/views/tui_textfield.rs
@@ -84,8 +84,7 @@ impl<'a> TuiTextField<'a> {
line_buffer.set_pos(char_idx);
let terminal = backend.terminal_mut();
-
- terminal.show_cursor();
+ let _ = terminal.show_cursor();
loop {
terminal
@@ -190,7 +189,7 @@ impl<'a> TuiTextField<'a> {
Key::Up => {}
Key::Down => {}
Key::Esc => {
- terminal.hide_cursor();
+ let _ = terminal.hide_cursor();
return None;
}
Key::Char('\t') => {
@@ -243,7 +242,7 @@ impl<'a> TuiTextField<'a> {
};
}
}
- terminal.hide_cursor();
+ let _ = terminal.hide_cursor();
if line_buffer.as_str().is_empty() {
None
diff --git a/src/ui/widgets/tui_topbar.rs b/src/ui/widgets/tui_topbar.rs
index aef32ed..a73c911 100644
--- a/src/ui/widgets/tui_topbar.rs
+++ b/src/ui/widgets/tui_topbar.rs
@@ -42,7 +42,12 @@ impl<'a> Widget for TuiTopBar<'a> {
None => {}
}
}
- if self.context.display_options_ref().tilde_in_titlebar() {
+ if self
+ .context
+ .config_ref()
+ .display_options_ref()
+ .tilde_in_titlebar()
+ {
if let Some(home_dir) = HOME_DIR.as_ref() {
let home_dir_str = home_dir.to_string_lossy().into_owned();
curr_path_str = curr_path_str.replace(&home_dir_str, "~");
diff --git a/src/util/format.rs b/src/util/format.rs
index b22d200..cd73605 100644
--- a/src/util/format.rs
+++ b/src/util/format.rs
@@ -1,7 +1,5 @@
use std::time;
-use crate::util::unix;
-
pub fn file_size_to_string(file_size: u64) -> String {
const FILE_UNITS: [&str; 6] = ["B", "K", "M", "G", "T", "E"];
const CONV_RATE: f64 = 1024.0;
diff --git a/src/util/input.rs b/src/util/input.rs
index d33b419..6944873 100644
--- a/src/util/input.rs
+++ b/src/util/input.rs
@@ -13,7 +13,7 @@ use crate::util::format;
pub fn process_mouse(event: MouseEvent, context: &mut AppContext, backend: &mut ui::TuiBackend) {
let f_size = backend.terminal.as_ref().unwrap().size().unwrap();
- let constraints: &[Constraint; 3] = &context.display_options_ref().default_layout;
+ let constraints: &[Constraint; 3] = &context.config_ref().display_options_ref().default_layout;
let layout_rect = Layout::default()
.direction(Direction::Horizontal)
.vertical_margin(1)
@@ -112,7 +112,7 @@ pub fn process_worker_progress(context: &mut AppContext, res: IoWorkerProgress)
pub fn process_finished_worker(context: &mut AppContext, res: std::io::Result<IoWorkerProgress>) {
let observer = context.remove_job().unwrap();
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
for tab in context.tab_context_mut().iter_mut() {
let _ = tab.history_mut().reload(observer.dest_path(), &options);
let _ = tab.history_mut().reload(observer.src_path(), &options);
diff --git a/src/util/load_child.rs b/src/util/load_child.rs
index e990cf3..63fb1f2 100644
--- a/src/util/load_child.rs
+++ b/src/util/load_child.rs
@@ -18,7 +18,7 @@ impl LoadChild {
// get preview
if let Some(path) = path {
if path.is_dir() {
- let options = context.display_options_ref().clone();
+ let options = context.config_ref().display_options_ref().clone();
context
.tab_context_mut()
.curr_tab_mut()