1use crate::{Config, FileInfo, MyResult};
2use std::path::Path;
4use walkdir::{DirEntry, WalkDir};
5
6pub fn get_files_from_directory<P>(path: P, config: &Config) -> MyResult<Vec<FileInfo>>
10where
11 P: AsRef<Path>,
12{
13 let entries: Vec<DirEntry> = get_image_entries(path, config)?;
14
15 let all_files: Vec<FileInfo> = entries
16 .into_iter()
18 .filter_map(|entry| {
19 let metadata = entry.metadata().ok()?;
20 let size = metadata.len();
21 Some(FileInfo {
24 size,
25 path: entry.into_path(),
26 ..Default::default()
27 })
28 })
29 .collect();
30
31 Ok(all_files)
32}
33
34fn get_image_entries<P>(path: P, config: &Config) -> MyResult<Vec<DirEntry>>
36where
37 P: AsRef<Path>,
38{
39 let extensions = &config.extensions;
41
42 let entries: Vec<DirEntry> = WalkDir::new(path)
43 .sort_by_file_name()
44 .into_iter()
45 .flatten() .filter(|entry| entry.file_type().is_file())
47 .filter(|entry| {
48 entry.path().extension().is_some_and(|ext| {
49 extensions
50 .iter()
51 .any(|extension| ext.eq_ignore_ascii_case(extension))
52 })
53 })
54 .collect();
55
56 Ok(entries)
57}