[+] Load thumbnailer
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
use std::collections::HashSet;
|
||||
use std::fs;
|
||||
use std::fs::File;
|
||||
use std::io::{BufRead, BufReader};
|
||||
use std::path::Path;
|
||||
use anyhow::{bail, Result};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Thumbnailer {
|
||||
try_exec: String,
|
||||
exec: String,
|
||||
mime_type: HashSet<String>
|
||||
}
|
||||
|
||||
impl Thumbnailer {
|
||||
/// Load an XDG thumbnailer (examples in /usr/share/thumbnailers)
|
||||
pub fn load(p: &Path) -> Result<Thumbnailer> {
|
||||
let mut content = fs::read_to_string(p)?;
|
||||
content = content.replace("\r\n", "\n");
|
||||
let lines = content.split("\n");
|
||||
|
||||
let mut t = Thumbnailer {
|
||||
try_exec: "".to_string(), exec: "".to_string(), mime_type: HashSet::new()
|
||||
};
|
||||
|
||||
lines.filter(|line| line.contains("="))
|
||||
.for_each(|line| {
|
||||
let sp: Vec<&str> = line.splitn(2, "=").collect();
|
||||
let (key, val) = (sp[0].trim(), sp[1].trim().to_string());
|
||||
match key {
|
||||
"TryExec" => t.try_exec = val,
|
||||
"Exec" => t.exec = val,
|
||||
"MimeType" => t.mime_type = HashSet::from_iter(val.split(";").map(str::to_string)),
|
||||
_ => {},
|
||||
}
|
||||
});
|
||||
|
||||
Ok(t)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user