use dotmax::media::{detect_format, ApngPlayer, MediaContent, MediaFormat, MediaPlayer};
use dotmax::quick;
use dotmax::Result;
use std::env;
use std::time::Duration;
fn main() -> Result<()> {
let _ = tracing_subscriber::fmt::try_init();
let args: Vec<String> = env::args().collect();
let path = if args.len() > 1 {
args[1].clone()
} else {
"tests/fixtures/media/animated.png".to_string()
};
println!("dotmax APNG Playback Demo");
println!("=========================\n");
if !std::path::Path::new(&path).exists() {
eprintln!("File not found: {}", path);
eprintln!("\nGenerate test fixtures first:");
eprintln!(" cargo run --features image --example generate_apng_fixtures");
return Ok(());
}
println!("1. Format Detection");
println!("-------------------");
let format = detect_format(&path)?;
println!(" File: {}", path);
println!(" Format: {}", format);
match format {
MediaFormat::AnimatedPng => {
println!(" ✓ Detected as animated PNG (APNG)\n");
}
MediaFormat::StaticImage(_) => {
println!(" ✓ Detected as static image\n");
println!(" Displaying static image...\n");
quick::show_file(&path)?;
return Ok(());
}
_ => {
println!(" ✗ Not an image file\n");
return Ok(());
}
}
println!("2. ApngPlayer API Demo");
println!("----------------------");
let player = ApngPlayer::new(&path)?;
println!(" Canvas size: {}x{}", player.canvas_width(), player.canvas_height());
println!(" Frame count: {:?}", player.frame_count());
println!(
" Loop count: {:?} (0 = infinite)",
player.loop_count()
);
println!();
println!("3. MediaContent API (Polymorphic)");
println!("---------------------------------");
let content = quick::load_file(&path)?;
match &content {
MediaContent::Static(_) => println!(" Loaded as: Static image"),
MediaContent::Animated(player) => {
println!(" Loaded as: Animated content");
println!(" Frame count: {:?}", player.frame_count());
}
}
println!();
println!("4. Playing Animation");
println!("--------------------");
println!(" Press any key to stop playback.\n");
std::thread::sleep(Duration::from_secs(1));
quick::show_file(&path)?;
println!("\n✓ Playback complete!");
Ok(())
}