From a1fe8c3120b0c88be379368b4c085b9ba722295e Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Sun, 30 Oct 2022 17:54:33 +0900 Subject: [PATCH] Impl better handling of unknown image type --- src/display.rs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/display.rs b/src/display.rs index 040c206..316517a 100644 --- a/src/display.rs +++ b/src/display.rs @@ -8,6 +8,7 @@ use ggez::graphics::{ }; use ggez::{timer, Context, GameError, GameResult}; use image::io::Reader as ImageReader; +use image::DynamicImage; use std::io::Cursor; use std::path::PathBuf; use std::sync::atomic::AtomicBool; @@ -398,18 +399,24 @@ impl MPDDisplay { } let img_result = if is_unknown_format { - let mut reader = ImageReader::new(Cursor::new(&image_ref)); - reader = reader + let reader = ImageReader::new(Cursor::new(image_ref)); + let guessed_reader = reader .with_guessed_format() - .map_err(|e| format!("Error: Failed to guess format of album art image: {}", e))?; - reader.decode().map_err(|e| { - format!( - "Error: Failed to decode album art image (guessed format): {}", - e - ) - }) + .map_err(|e| format!("Error: Failed to guess format of album art image: {}", e)); + if let Ok(reader) = guessed_reader { + reader.decode().map_err(|e| { + format!( + "Error: Failed to decode album art image (guessed format): {}", + e + ) + }) + } else { + // Convert Ok(_) to Ok(DynamicImage) which will never be used since the if statement + // covers it. + guessed_reader.map(|_| DynamicImage::default()) + } } else { - ImageReader::with_format(Cursor::new(&image_ref), image_format) + ImageReader::with_format(Cursor::new(image_ref), image_format) .decode() .map_err(|e| format!("Error: Failed to decode album art image: {}", e)) };