]> git.seodisparate.com - mpd_info_screen/commitdiff
Fix second album art fetch method on decode fail 0.2.13
authorStephen Seo <seo.disparate@gmail.com>
Wed, 12 Jan 2022 12:07:31 +0000 (21:07 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Wed, 12 Jan 2022 12:07:31 +0000 (21:07 +0900)
Previous implementation did not try second fetch method on actual decode fail,
only on unknown mime type.

Version bumped to 0.2.13.

Cargo.lock
Cargo.toml
src/display.rs

index 8455de46778b69b3d070dd42a70145f27d5180c4..5e8010b17e8db8463ff6c631fc4840a6c11a0517 100644 (file)
@@ -1427,7 +1427,7 @@ dependencies = [
 
 [[package]]
 name = "mpd_info_screen"
-version = "0.2.12"
+version = "0.2.13"
 dependencies = [
  "ggez",
  "image",
index 57aab27a58afdb676adec4c24f9b5667ed4e9e37..2bfaf59dc15ecdf573f0fa61ab4cbd601cad1b5c 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "mpd_info_screen"
-version = "0.2.12"
+version = "0.2.13"
 edition = "2018"
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
index 9e503d4268efe8b8692ec3a0613942fc3b6e89cf..e53213758bd0bde9e640d4206c89e01146f06cb1 100644 (file)
@@ -220,29 +220,52 @@ impl MPDDisplay {
 
         match read_guard_opt.as_ref().unwrap().get_art_type().as_str() {
             "image/png" => image_format = image::ImageFormat::Png,
-            "image/jpg" | "image/jpeg" => image_format = image::ImageFormat::Jpeg,
+            "image/jpg" | "image/jpeg" | "JPG" => image_format = image::ImageFormat::Jpeg,
             "image/gif" => image_format = image::ImageFormat::Gif,
             _ => is_unknown_format = true,
         }
 
-        #[allow(unused_assignments)]
-        if is_unknown_format && !self.tried_album_art_in_dir {
-            self.tried_album_art_in_dir = true;
-            self.album_art = None;
+        let try_second_art_fetch_method = |tried_in_dir: &mut bool,
+                                           album_art: &mut Option<Image>,
+                                           read_guard_opt: &mut Option<
+            RwLockReadGuard<'_, MPDHandlerState>,
+        >,
+                                           mpd_handler: &Option<MPDHandler>|
+         -> Result<(), String> {
+            *tried_in_dir = true;
+            album_art.take();
             // Drop the "read_guard" so that the "force_try_other_album_art()"
             // can get a "write_guard"
-            read_guard_opt = None;
-            self.mpd_handler
+            read_guard_opt.take();
+            mpd_handler
                 .as_ref()
                 .unwrap()
                 .force_try_other_album_art()
                 .map_err(|_| String::from("Failed to force try other album art fetching method"))?;
             return Err("Got unknown format album art image".into());
+        };
+
+        if is_unknown_format && !self.tried_album_art_in_dir {
+            return try_second_art_fetch_method(
+                &mut self.tried_album_art_in_dir,
+                &mut self.album_art,
+                &mut read_guard_opt,
+                &self.mpd_handler,
+            );
         }
 
-        let img = ImageReader::with_format(Cursor::new(&image_ref), image_format)
+        let img_result = ImageReader::with_format(Cursor::new(&image_ref), image_format)
             .decode()
-            .map_err(|e| format!("ERROR: Failed to decode album art image: {}", e))?;
+            .map_err(|e| format!("ERROR: Failed to decode album art image: {}", e));
+        if img_result.is_err() && !self.tried_album_art_in_dir {
+            return try_second_art_fetch_method(
+                &mut self.tried_album_art_in_dir,
+                &mut self.album_art,
+                &mut read_guard_opt,
+                &self.mpd_handler,
+            );
+        }
+        let img = img_result?;
         let rgba8 = img.to_rgba8();
         let ggez_img = Image::from_rgba8(
             ctx,