[+] Implement get_thumb for generator

This commit is contained in:
Azalea Gui
2023-02-23 14:09:06 -05:00
parent 83165256ab
commit 55cf1ec4a5
+12 -16
View File
@@ -10,7 +10,7 @@ use std::fs::{File, Metadata};
use std::fs::DirEntry; use std::fs::DirEntry;
use std::io::{BufReader}; use std::io::{BufReader};
use xdg_mime::{SharedMimeInfo}; use xdg_mime::{SharedMimeInfo};
use anyhow::{Result}; use anyhow::{Context, Result};
use serde::{de, Deserialize, ser, Serialize}; use serde::{de, Deserialize, ser, Serialize};
use crate::thumbnailer::{Thumbnailers}; use crate::thumbnailer::{Thumbnailers};
@@ -80,22 +80,18 @@ impl Generator {
} }
/// Process a single file /// Process a single file
pub fn get_thumb(&self, file: &PathBuf) -> Result<()> { pub fn get_thumb(&self, file: &PathBuf) -> Result<Vec<u8>> {
let dot = self.dot_path(&file); self.get_cached(file, "thumb-128.png", |thumb| {
let thumb = dot.with_extension("thumb.jpg"); Ok(fs::read(thumb)?)
}, |thumb| {
if thumb.exists() { debug!("Generating thumbnail for {}\nto {}", file.display(), thumb.display());
match (thumb.metadata(), file.metadata()) { let mime = self.mime_db.guess_mime_type().path(file).guess().mime_type().to_string();
// Thumbnail already up to date if let Some(t) = self.thumbnailers.find(&*mime) {
(Ok(tm), Ok(fm)) => if tm.mtime() >= fm.mtime() { return Ok(()) }, t.gen(file.to_str().context("Orig file failed to convert to str")?,
_ => {} thumb.to_str().context("New file failed to convert to str")?, 128)?;
} }
} Ok(())
})
// Generate new thumbnail
info!("Generating thumbnail for {}\nto {}", file.display(), thumb.display());
Ok(())
} }
/// Process a directory /// Process a directory