diff --git a/src/app.rs b/src/app.rs index 480eb6d..04636b8 100644 --- a/src/app.rs +++ b/src/app.rs @@ -15,7 +15,7 @@ use std::collections::HashMap; use std::collections::VecDeque; use std::env; use std::fs; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; pub const VERSION: &str = env!("CARGO_PKG_VERSION"); pub const TEMPLATE_TABLE_ROW: &str = "TEMPLATE_TABLE_ROW"; @@ -26,6 +26,17 @@ fn to_humansize(size: u64) -> String { .unwrap_or_else(|_| format!("{} B", size)) } +fn mime_essence(path: &Path, is_dir: bool) -> String { + if is_dir { + String::from("inode/directory") + } else { + mime_guess::from_path(&path) + .first() + .map(|m| m.essence_str().to_string()) + .unwrap_or_default() + } +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Pipe { pub path: String, @@ -99,15 +110,7 @@ impl ResolvedNode { .map(|m| (m.is_dir(), m.is_file(), m.permissions().readonly(), m.len())) .unwrap_or((false, false, false, 0)); - let mime_essence = if is_file { - mime_guess::from_path(&path) - .first() - .map(|m| m.essence_str().to_string()) - .unwrap_or_default() - } else { - String::from("") - }; - + let mime_essence = mime_essence(&path, is_dir); let human_size = to_humansize(size); Self { @@ -175,15 +178,7 @@ impl Node { }) .unwrap_or_else(|_| (false, false, false, false, 0, Permissions::default())); - let mime_essence = if is_dir { - String::from("") - } else { - mime_guess::from_path(&path) - .first() - .map(|m| m.essence_str().to_string()) - .unwrap_or_default() - }; - + let mime_essence = mime_essence(&path, is_dir); let human_size = to_humansize(size); Self { @@ -1937,9 +1932,9 @@ impl App { } fn switch_mode_keeping_input_buffer(mut self, mode: &str) -> Result { - if let Some(mode) = self.config.modes.clone().get(mode) { + if let Some(mode) = self.config.modes.get(mode).cloned() { self = self.push_mode(); - self.mode = mode.to_owned().sanitized(self.config.general.read_only); + self.mode = mode.sanitized(self.config.general.read_only); Ok(self) } else { self.log_error(format!("Mode not found: {}", mode)) @@ -1955,9 +1950,9 @@ impl App { } fn switch_mode_builtin_keeping_input_buffer(mut self, mode: &str) -> Result { - if let Some(mode) = self.config.modes.clone().builtin.get(mode) { + if let Some(mode) = self.config.modes.builtin.get(mode).cloned() { self = self.push_mode(); - self.mode = mode.to_owned().sanitized(self.config.general.read_only); + self.mode = mode.sanitized(self.config.general.read_only); Ok(self) } else { self.log_error(format!("Builtin mode not found: {}", mode)) @@ -1973,9 +1968,9 @@ impl App { } fn switch_mode_custom_keeping_input_buffer(mut self, mode: &str) -> Result { - if let Some(mode) = self.config.modes.clone().custom.get(mode) { + if let Some(mode) = self.config.modes.custom.get(mode).cloned() { self = self.push_mode(); - self.mode = mode.to_owned().sanitized(self.config.general.read_only); + self.mode = mode.sanitized(self.config.general.read_only); Ok(self) } else { self.log_error(format!("Custom mode not found: {}", mode))