rmg 0.5.11

Rust: Tiny And Fast Manga/Image Viewer
Documentation
use crate::archive::*;
use std::{fs::OpenOptions, io::Read, path::Path};
use walkdir::WalkDir;

pub fn get_file<P>(path: &P, index: usize) -> anyhow::Result<Vec<u8>>
where
    P: AsRef<Path> + ?Sized,
{
    for (pos, tmp) in WalkDir::new(path).into_iter().enumerate() {
        let file = tmp?;

        if file.file_type().is_file() && pos == index {
            let mut file = OpenOptions::new()
                .read(true)
                .write(false)
                .create(false)
                .open(file.path())?;

            let mut buffer = Vec::new();
            file.read_to_end(&mut buffer)?;

            tracing::debug!(
                "get_file():
  pos = {}
  index = {}",
                pos,
                index
            );

            return Ok(buffer);
        }
    }

    anyhow::bail!("")
}

pub fn get_list<P>(path: &P) -> anyhow::Result<FileList>
where
    P: AsRef<Path> + ?Sized,
{
    let mut res = FileList::new();

    for (index, tmp) in WalkDir::new(path).into_iter().enumerate() {
        let file = tmp?;

        if file.file_type().is_file() {
            res.push(FileInfo::new(
                file.path().to_str().unwrap().to_string(),
                index,
            ));
        }
    }

    Ok(res)
}