elio 1.5.0

Snappy, batteries-included terminal file manager with rich previews, inline images, bulk actions, and trash support.
Documentation
mod common;
mod epub;
mod formats;
mod metadata;

use self::{
    common::extract_zip_document_metadata,
    formats::{
        build_kindle_preview, extract_doc_metadata, extract_ooxml_metadata,
        extract_open_document_metadata, extract_pages_metadata, extract_pdf_metadata,
    },
    metadata::render_document_preview,
};
use super::PreviewContent;
use crate::file_info::DocumentFormat;
use std::path::Path;

pub(super) fn build_document_preview(
    path: &Path,
    format: DocumentFormat,
    epub_section_index: Option<usize>,
) -> Option<PreviewContent> {
    let metadata = match format {
        DocumentFormat::Doc => extract_doc_metadata(path),
        DocumentFormat::Docx | DocumentFormat::Docm => {
            extract_zip_document_metadata(path, |archive| extract_ooxml_metadata(archive, format))
        }
        DocumentFormat::Odt | DocumentFormat::Ods | DocumentFormat::Odp => {
            extract_zip_document_metadata(path, |archive| {
                extract_open_document_metadata(archive, format)
            })
        }
        DocumentFormat::Pptx | DocumentFormat::Pptm => {
            extract_zip_document_metadata(path, |archive| extract_ooxml_metadata(archive, format))
        }
        DocumentFormat::Xlsx | DocumentFormat::Xlsm => {
            extract_zip_document_metadata(path, |archive| extract_ooxml_metadata(archive, format))
        }
        DocumentFormat::Pages => extract_zip_document_metadata(path, extract_pages_metadata),
        DocumentFormat::Epub => {
            return epub::build_epub_preview(path, epub_section_index.unwrap_or(0));
        }
        DocumentFormat::Mobi | DocumentFormat::Azw3 => return build_kindle_preview(path, format),
        DocumentFormat::Pdf => extract_pdf_metadata(path),
    }?;

    Some(render_document_preview(format, metadata))
}

#[cfg(test)]
pub(super) fn reset_epub_package_parse_count(path: &Path) {
    epub::reset_epub_package_parse_count(path);
}

#[cfg(test)]
pub(super) fn epub_package_parse_count(path: &Path) -> usize {
    epub::epub_package_parse_count(path)
}

#[cfg(test)]
pub(super) fn clear_epub_package_cache() {
    epub::clear_epub_package_cache();
}