Просмотр исходного кода

added icons for video/audio/images

remove unnecessary clone
Alex Soderman 7 лет назад
Родитель
Сommit
c448b3747f
2 измененных файлов с 38 добавлено и 5 удалено
  1. 14 0
      src/info/filetype.rs
  2. 24 5
      src/output/icons.rs

+ 14 - 0
src/info/filetype.rs

@@ -8,6 +8,7 @@ use ansi_term::Style;
 
 use fs::File;
 use output::file_name::FileColours;
+use output::icons::FileIcon;
 
 
 #[derive(Debug, Default, PartialEq)]
@@ -115,3 +116,16 @@ impl FileColours for FileExtensions {
         })
     }
 }
+
+impl FileIcon for FileExtensions {
+    fn icon_file(&self, file: &File) -> Option<char> {
+        use output::icons::Icons;
+
+        Some(match file {
+            f if self.is_music(f) || self.is_lossless(f) => Icons::Audio.value(),
+            f if self.is_image(f) => Icons::Image.value(),
+            f if self.is_video(f) => Icons::Video.value(),
+            _ => return None,
+        })
+    }
+}

+ 24 - 5
src/output/icons.rs

@@ -1,7 +1,28 @@
 use ansi_term::Style;
 use fs::File;
+use info::filetype::FileExtensions;
 use output::file_name::FileStyle;
 
+pub trait FileIcon {
+    fn icon_file(&self, file: &File) -> Option<char>;
+}
+
+pub enum Icons {
+    Audio,
+    Image,
+    Video,
+}
+
+impl Icons {
+    pub fn value(&self) -> char {
+        match *self {
+            Icons::Audio => '\u{f001}',
+            Icons::Image => '\u{f1c5}',
+            Icons::Video => '\u{f03d}',
+        }
+    }
+}
+
 pub fn painted_icon(file: &File, style: &FileStyle) -> String {
     let file_icon = icon(&file).to_string();
     let painted = style.exts
@@ -21,15 +42,15 @@ pub fn painted_icon(file: &File, style: &FileStyle) -> String {
 }
 
 fn icon(file: &File) -> char {
+    let extensions = Box::new(FileExtensions);
     if file.is_directory() { '\u{f115}' }
+    else if let Some(icon) = extensions.icon_file(file) { icon }
     else { 
-        // possible unnecessary clone
-        if let Some(ext) = file.ext.clone() {
+        if let Some(ext) = file.ext.as_ref() {
             match ext.as_str() {
                 "ai" => '\u{e7b4}',
                 "android" => '\u{e70e}',
                 "apple" => '\u{f179}',
-                "audio" => '\u{f001}',
                 "avro" => '\u{e60b}',
                 "c" => '\u{e61e}',
                 "clj" => '\u{e768}',
@@ -52,7 +73,6 @@ fn icon(file: &File) -> char {
                 "go" => '\u{e626}',
                 "hs" => '\u{e777}',
                 "html" => '\u{f13b}',
-                "image" => '\u{f1c5}',
                 "iml" => '\u{e7b5}',
                 "java" => '\u{e204}',
                 "js" => '\u{e74e}',
@@ -87,7 +107,6 @@ fn icon(file: &File) -> char {
                 "txt" => '\u{f15c}',
                 "video" => '\u{f03d}',
                 "vim" => '\u{e62b}',
-                "windows" => '\u{f17a}',
                 "xls" => '\u{f1c3}',
                 "xml" => '\u{e619}',
                 "yml" => '\u{f481}',