Răsfoiți Sursa

Turn the file filter options into their own struct

Ben S 11 ani în urmă
părinte
comite
d4d04b7e92
2 a modificat fișierele cu 21 adăugiri și 9 ștergeri
  1. 1 2
      src/main.rs
  2. 20 7
      src/options.rs

+ 1 - 2
src/main.rs

@@ -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: Vec<File> = options.transform_files(unsorted_files);
+                let files = options.transform_files(dir.files(false));
 
 
                 // 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

+ 20 - 7
src/options.rs

@@ -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)),
-            path_strs:       if matches.free.is_empty() { vec![ ".".to_string() ] } else { matches.free.clone() },
-            reverse:         matches.opt_present("reverse"),
-            show_invisibles: matches.opt_present("all"),
-            sort_field:      sort_field,
-            view:            try!(view(&matches)),
+            dir_action: try!(dir_action(&matches)),
+            path_strs:  if matches.free.is_empty() { vec![ ".".to_string() ] } else { matches.free.clone() },
+            view:       try!(view(&matches)),
+            filter:     FileFilter {
+                reverse:         matches.opt_present("reverse"),
+                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>> {