Turn the file filter options into their own struct

This commit is contained in:
Ben S 2015-02-03 17:03:58 +00:00
parent 827a1e11fd
commit d4d04b7e92
2 changed files with 21 additions and 9 deletions

View File

@ -80,8 +80,7 @@ fn exa(options: &Options) {
match Dir::readdir(&dir_path) { match Dir::readdir(&dir_path) {
Ok(ref dir) => { Ok(ref dir) => {
let unsorted_files = dir.files(false); let files = options.transform_files(dir.files(false));
let files: Vec<File> = options.transform_files(unsorted_files);
// When recursing, add any directories to the dirs stack // When recursing, add any directories to the dirs stack
// backwards: the *last* element of the stack is used each // backwards: the *last* element of the stack is used each

View File

@ -20,10 +20,15 @@ use self::Misfire::*;
pub struct Options { pub struct Options {
pub dir_action: DirAction, pub dir_action: DirAction,
pub path_strs: Vec<String>, pub path_strs: Vec<String>,
pub filter: FileFilter,
view: View,
}
#[derive(PartialEq, Debug, Copy)]
pub struct FileFilter {
reverse: bool, reverse: bool,
show_invisibles: bool, show_invisibles: bool,
sort_field: SortField, sort_field: SortField,
view: View,
} }
impl Options { impl Options {
@ -65,20 +70,28 @@ impl Options {
}; };
Ok(Options { Ok(Options {
dir_action: try!(dir_action(&matches)), dir_action: try!(dir_action(&matches)),
path_strs: if matches.free.is_empty() { vec![ ".".to_string() ] } else { matches.free.clone() }, path_strs: if matches.free.is_empty() { vec![ ".".to_string() ] } else { matches.free.clone() },
reverse: matches.opt_present("reverse"), view: try!(view(&matches)),
show_invisibles: matches.opt_present("all"), filter: FileFilter {
sort_field: sort_field, reverse: matches.opt_present("reverse"),
view: try!(view(&matches)), show_invisibles: matches.opt_present("all"),
sort_field: sort_field,
},
}) })
} }
pub fn transform_files<'a>(&self, files: Vec<File<'a>>) -> Vec<File<'a>> {
self.filter.transform_files(files)
}
/// Display the files using this Option's View. /// Display the files using this Option's View.
pub fn view(&self, dir: Option<&Dir>, files: &[File]) { pub fn view(&self, dir: Option<&Dir>, files: &[File]) {
self.view.view(dir, files) self.view.view(dir, files)
} }
}
impl FileFilter {
/// Transform the files (sorting, reversing, filtering) before listing them. /// Transform the files (sorting, reversing, filtering) before listing them.
pub fn transform_files<'a>(&self, mut files: Vec<File<'a>>) -> Vec<File<'a>> { pub fn transform_files<'a>(&self, mut files: Vec<File<'a>>) -> Vec<File<'a>> {