This commit is contained in:
@@ -45,7 +45,8 @@ pub(crate) async fn list_images(state: &AppState) -> Result<Vec<ImageView>> {
|
||||
label: manifest.label,
|
||||
size: meta.len(),
|
||||
animated: true,
|
||||
frame_count: manifest.frames.len(),
|
||||
frame_count: manifest.source_frame_count.unwrap_or(manifest.frames.len()),
|
||||
display_frame_count: manifest.frames.len(),
|
||||
});
|
||||
} else {
|
||||
out.push(ImageView {
|
||||
@@ -55,6 +56,7 @@ pub(crate) async fn list_images(state: &AppState) -> Result<Vec<ImageView>> {
|
||||
size: meta.len(),
|
||||
animated: false,
|
||||
frame_count: 1,
|
||||
display_frame_count: 1,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -92,6 +94,7 @@ async fn convert_and_store_gif(state: &AppState, file_name: &str, bytes: &[u8])
|
||||
if frames.is_empty() {
|
||||
anyhow::bail!("GIF contains no frames");
|
||||
}
|
||||
let source_frame_count = frames.len();
|
||||
|
||||
let base = make_image_stem(file_name);
|
||||
let timestamp = Local::now().format("%Y%m%d-%H%M%S");
|
||||
@@ -132,6 +135,7 @@ async fn convert_and_store_gif(state: &AppState, file_name: &str, bytes: &[u8])
|
||||
.first()
|
||||
.map(|frame| frame.name.clone())
|
||||
.unwrap_or_default(),
|
||||
source_frame_count: Some(source_frame_count),
|
||||
frames: stored_frames,
|
||||
};
|
||||
let manifest_path = state.image_dir.join(&manifest_name);
|
||||
@@ -262,6 +266,9 @@ pub(crate) fn load_panel_rgb(image_dir: &PathBuf, image_name: &str) -> Result<Rg
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use image::{Rgb, RgbImage};
|
||||
use serde_json::json;
|
||||
|
||||
use crate::types::GifSetManifest;
|
||||
|
||||
use super::{collapse_rendered_frames, MIN_GIF_FRAME_DELAY_MS};
|
||||
|
||||
@@ -286,4 +293,22 @@ mod tests {
|
||||
fn min_gif_frame_delay_supports_50ms_frames() {
|
||||
assert!(MIN_GIF_FRAME_DELAY_MS <= 50);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn gif_manifest_without_source_frame_count_stays_compatible() {
|
||||
let manifest: GifSetManifest = serde_json::from_value(json!({
|
||||
"kind": "gif_set",
|
||||
"version": 1,
|
||||
"label": "demo.gif",
|
||||
"preview": ".gifframe-000.jpg",
|
||||
"frames": [
|
||||
{ "name": ".gifframe-000.jpg", "delay_ms": 50 },
|
||||
{ "name": ".gifframe-001.jpg", "delay_ms": 50 }
|
||||
]
|
||||
}))
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(manifest.source_frame_count, None);
|
||||
assert_eq!(manifest.frames.len(), 2);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user