[+] Implement get_thumb for generator
This commit is contained in:
+12
-16
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user