use super::*;
#[derive(Debug)]
pub struct FileExplorerBuilder {
initial_dir: PathBuf,
filesystem: crate::SharedFileSystem,
extension_filter: Vec<String>,
show_hidden: bool,
sort_mode: SortMode,
page_size: usize,
selection_mode: SelectionMode,
show_sizes: bool,
show_dir_sizes: bool,
keymap: Keymap,
show_git: bool,
async_loading: bool,
}
impl FileExplorerBuilder {
#[must_use]
pub fn new(initial_dir: PathBuf) -> Self {
Self {
initial_dir,
filesystem: crate::std_filesystem(),
extension_filter: Vec::new(),
show_hidden: false,
sort_mode: SortMode::default(),
page_size: PAGE_SIZE,
selection_mode: SelectionMode::default(),
show_sizes: true,
show_dir_sizes: true,
keymap: Keymap::default(),
show_git: false,
async_loading: false,
}
}
#[must_use]
pub fn filesystem(mut self, filesystem: crate::SharedFileSystem) -> Self {
self.filesystem = filesystem;
self
}
#[must_use]
pub fn extension_filter(mut self, filter: Vec<String>) -> Self {
self.extension_filter = filter;
self
}
#[must_use]
pub fn allow_extension(mut self, ext: impl Into<String>) -> Self {
self.extension_filter.push(ext.into());
self
}
#[must_use]
pub fn show_hidden(mut self, show: bool) -> Self {
self.show_hidden = show;
self
}
#[must_use]
pub fn show_sizes(mut self, show: bool) -> Self {
self.show_sizes = show;
self
}
#[must_use]
pub fn show_dir_sizes(mut self, show: bool) -> Self {
self.show_dir_sizes = show;
self
}
#[must_use]
pub fn async_loading(mut self, enabled: bool) -> Self {
self.async_loading = enabled;
self
}
#[must_use]
pub fn show_git(mut self, show: bool) -> Self {
self.show_git = show;
self
}
#[must_use]
pub fn keymap(mut self, keymap: Keymap) -> Self {
self.keymap = keymap;
self
}
#[must_use]
pub fn sort_mode(mut self, mode: SortMode) -> Self {
self.sort_mode = mode;
self
}
#[must_use]
pub fn selection_mode(mut self, mode: SelectionMode) -> Self {
self.selection_mode = mode;
self
}
#[must_use]
pub fn page_size(mut self, size: usize) -> Self {
self.page_size = size;
self
}
#[must_use]
pub fn build(self) -> FileExplorer {
let mut explorer = self.build_unloaded();
explorer.reload();
explorer
}
pub fn try_build(self) -> Result<FileExplorer, ExplorerError> {
let mut explorer = self.build_unloaded();
explorer.try_reload()?;
Ok(explorer)
}
fn build_unloaded(self) -> FileExplorer {
FileExplorer {
current_dir: self.initial_dir,
filesystem: self.filesystem,
entries: Vec::new(),
cursor: 0,
scroll_offset: 0,
extension_filter: self.extension_filter,
show_hidden: self.show_hidden,
status: String::new(),
sort_mode: self.sort_mode,
page_size: self.page_size,
selection_mode: self.selection_mode,
search_query: String::new(),
search_active: false,
marked: HashSet::new(),
prompt: None,
keymap: self.keymap,
theme_name: String::new(),
editor_name: String::new(),
disk_usage: None,
bg: Default::default(),
show_git: self.show_git,
async_loading: self.async_loading,
git: None,
link_cache: std::collections::HashMap::new(),
dir_size_cache: std::collections::HashMap::new(),
show_sizes: self.show_sizes,
show_dir_sizes: self.show_dir_sizes,
}
}
}