Bläddra i källkod

Add MIME type mapping for image/jxl (fixes #7117)

(cherry picked from commit 591df8abccba95031a670b1ef761fb522b0c0517)
arkon 2 år sedan
förälder
incheckning
71e31e6c03

+ 1 - 2
app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt

@@ -1,7 +1,6 @@
 package eu.kanade.tachiyomi.data.download
 
 import android.content.Context
-import android.webkit.MimeTypeMap
 import com.hippo.unifile.UniFile
 import com.jakewharton.rxrelay.BehaviorRelay
 import com.jakewharton.rxrelay.PublishRelay
@@ -472,7 +471,7 @@ class Downloader(
             // Else read magic numbers.
             ?: ImageUtil.findImageType { file.openInputStream() }?.mime
 
-        return MimeTypeMap.getSingleton().getExtensionFromMimeType(mime) ?: "jpg"
+        return ImageUtil.getExtensionFromMimeType(mime)
     }
 
     /**

+ 13 - 0
app/src/main/java/eu/kanade/tachiyomi/util/system/ImageUtil.kt

@@ -10,6 +10,7 @@ import android.graphics.drawable.ColorDrawable
 import android.graphics.drawable.Drawable
 import android.graphics.drawable.GradientDrawable
 import android.os.Build
+import android.webkit.MimeTypeMap
 import androidx.core.graphics.alpha
 import androidx.core.graphics.applyCanvas
 import androidx.core.graphics.blue
@@ -56,6 +57,12 @@ object ImageUtil {
         return null
     }
 
+    fun getExtensionFromMimeType(mime: String?): String {
+        return MimeTypeMap.getSingleton().getExtensionFromMimeType(mime)
+            ?: SUPPLEMENTARY_MIMETYPE_MAPPING[mime]
+            ?: "jpg"
+    }
+
     fun isAnimatedAndSupported(stream: InputStream): Boolean {
         try {
             val type = getImageType(stream) ?: return false
@@ -392,4 +399,10 @@ object ImageUtil {
 
     private fun Int.isWhite(): Boolean =
         red + blue + green > 740
+
+    // Android doesn't include some mappings
+    private val SUPPLEMENTARY_MIMETYPE_MAPPING = mapOf(
+        // https://issuetracker.google.com/issues/182703810
+        "image/jxl" to "jxl",
+    )
 }