diff options
author | Uwe Jugel <532284+ubunatic@users.noreply.github.com> | 2022-10-20 22:56:34 +0200 |
---|---|---|
committer | Uwe Jugel <532284+ubunatic@users.noreply.github.com> | 2022-10-20 23:44:13 +0200 |
commit | 4bcecaa64228880193ba6b6997b5699718b736ae (patch) | |
tree | e7aee34e2cf7da359f0d7343642253a27352c63f /src | |
parent | f8b7ef52fe4a61589eb83d17594e6b939282e691 (diff) |
handle unresolved symlinks, do not panic on failed content read
Diffstat (limited to 'src')
-rw-r--r-- | src/layout.rs | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/layout.rs b/src/layout.rs index 88c0f8d..495422c 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -35,6 +35,8 @@ pub struct Layout { } pub enum PreviewType { + NotReadable, + UnresolvedSymlink, TooBigSize, Directory, Image, @@ -51,8 +53,14 @@ impl Layout { self.clear_preview(self.preview_start_column); match check_preview_type(item) { + PreviewType::NotReadable => { + print!("(file not readable)"); + } + PreviewType::UnresolvedSymlink => { + print!("(unresolved symlink)"); + } PreviewType::TooBigSize => { - print!("(Too big size to preview)"); + print!("(file too big for preview)"); } PreviewType::Directory => { self.preview_content(item, true); @@ -223,21 +231,27 @@ pub fn make_layout( fn check_preview_type(item: &ItemInfo) -> PreviewType { if item.file_size > MAX_SIZE_TO_PREVIEW { PreviewType::TooBigSize - } else if item.file_type == FileType::Directory - || (item.file_type == FileType::Symlink && item.symlink_dir_path.is_some()) - { + } else if item.file_type == FileType::Directory { PreviewType::Directory + } else if item.file_type == FileType::Symlink { + if item.symlink_dir_path.is_some() { + // assmuning symlink to be a directory + PreviewType::Directory + } else { + PreviewType::UnresolvedSymlink + } } else if is_supported_ext(item) { PreviewType::Image } else { - let content_type = content_inspector::inspect( - &std::fs::read(&item.file_path) - .unwrap_or_else(|_| panic!("failed check preview type.")), - ); - if content_type.is_text() { - PreviewType::Text + if let Ok(content) = &std::fs::read(&item.file_path) { + let content_type = content_inspector::inspect(&content); + if content_type.is_text() { + PreviewType::Text + } else { + PreviewType::Binary + } } else { - PreviewType::Binary + PreviewType::NotReadable } } } |