pinakes-core: improve media management features; various configuration improvements
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I2d1f04f13970d21c36067f30bc04a9176a6a6964
This commit is contained in:
parent
cfdc3d0622
commit
e02c15490e
31 changed files with 1167 additions and 197 deletions
|
|
@ -367,7 +367,14 @@ pub fn extract_epub_cover(epub_path: &Path) -> Result<Option<Vec<u8>>> {
|
|||
}
|
||||
|
||||
// Fallback: look for common cover image filenames
|
||||
let cover_names = ["cover.jpg", "cover.jpeg", "cover.png", "Cover.jpg", "Cover.jpeg", "Cover.png"];
|
||||
let cover_names = [
|
||||
"cover.jpg",
|
||||
"cover.jpeg",
|
||||
"cover.png",
|
||||
"Cover.jpg",
|
||||
"Cover.jpeg",
|
||||
"Cover.png",
|
||||
];
|
||||
for name in &cover_names {
|
||||
if let Some(data) = doc.get_resource_by_path(name) {
|
||||
return Ok(Some(data));
|
||||
|
|
@ -423,3 +430,72 @@ pub fn default_covers_dir() -> PathBuf {
|
|||
pub fn default_thumbnail_dir() -> PathBuf {
|
||||
crate::config::Config::default_data_dir().join("thumbnails")
|
||||
}
|
||||
|
||||
/// Thumbnail size variant for multi-resolution support
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum ThumbnailSize {
|
||||
/// Tiny thumbnail for map markers and icons (64x64)
|
||||
Tiny,
|
||||
/// Grid thumbnail for library grid view (320x320)
|
||||
Grid,
|
||||
/// Preview thumbnail for quick fullscreen preview (1024x1024)
|
||||
Preview,
|
||||
}
|
||||
|
||||
impl ThumbnailSize {
|
||||
/// Get the pixel size for this thumbnail variant
|
||||
pub fn pixels(&self) -> u32 {
|
||||
match self {
|
||||
ThumbnailSize::Tiny => 64,
|
||||
ThumbnailSize::Grid => 320,
|
||||
ThumbnailSize::Preview => 1024,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the subdirectory name for this size
|
||||
pub fn subdir_name(&self) -> &'static str {
|
||||
match self {
|
||||
ThumbnailSize::Tiny => "tiny",
|
||||
ThumbnailSize::Grid => "grid",
|
||||
ThumbnailSize::Preview => "preview",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Generate all thumbnail sizes for a media file
|
||||
/// Returns paths to the generated thumbnails (tiny, grid, preview)
|
||||
pub fn generate_all_thumbnail_sizes(
|
||||
media_id: MediaId,
|
||||
source_path: &Path,
|
||||
media_type: MediaType,
|
||||
thumbnail_base_dir: &Path,
|
||||
) -> Result<(Option<PathBuf>, Option<PathBuf>, Option<PathBuf>)> {
|
||||
let sizes = [
|
||||
ThumbnailSize::Tiny,
|
||||
ThumbnailSize::Grid,
|
||||
ThumbnailSize::Preview,
|
||||
];
|
||||
let mut results = Vec::new();
|
||||
|
||||
for size in &sizes {
|
||||
let size_dir = thumbnail_base_dir.join(size.subdir_name());
|
||||
std::fs::create_dir_all(&size_dir)?;
|
||||
|
||||
let config = ThumbnailConfig {
|
||||
size: size.pixels(),
|
||||
..ThumbnailConfig::default()
|
||||
};
|
||||
|
||||
let result = generate_thumbnail_with_config(
|
||||
media_id,
|
||||
source_path,
|
||||
media_type.clone(),
|
||||
&size_dir,
|
||||
&config,
|
||||
)?;
|
||||
|
||||
results.push(result);
|
||||
}
|
||||
|
||||
Ok((results[0].clone(), results[1].clone(), results[2].clone()))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue