mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Avoid crashing if picture can't be saved (related to #6905)
This commit is contained in:
		@@ -13,6 +13,8 @@ import eu.kanade.tachiyomi.util.storage.DiskUtil
 | 
			
		||||
import eu.kanade.tachiyomi.util.storage.cacheImageDir
 | 
			
		||||
import eu.kanade.tachiyomi.util.storage.getUriCompat
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.ImageUtil
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.logcat
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import okio.IOException
 | 
			
		||||
import java.io.ByteArrayInputStream
 | 
			
		||||
import java.io.ByteArrayOutputStream
 | 
			
		||||
@@ -30,11 +32,7 @@ class ImageSaver(
 | 
			
		||||
        val type = ImageUtil.findImageType(data) ?: throw Exception("Not an image")
 | 
			
		||||
        val filename = DiskUtil.buildValidFilename("${image.name}.${type.extension}")
 | 
			
		||||
 | 
			
		||||
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
 | 
			
		||||
            return save(data(), image.location.directory(context), filename)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (image.location !is Location.Pictures) {
 | 
			
		||||
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || image.location !is Location.Pictures) {
 | 
			
		||||
            return save(data(), image.location.directory(context), filename)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -54,13 +52,18 @@ class ImageSaver(
 | 
			
		||||
        val picture = context.contentResolver.insert(
 | 
			
		||||
            pictureDir,
 | 
			
		||||
            contentValues,
 | 
			
		||||
        ) ?: throw IOException("Couldn't create file")
 | 
			
		||||
        ) ?: throw IOException(context.getString(R.string.error_saving_picture))
 | 
			
		||||
 | 
			
		||||
        data().use { input ->
 | 
			
		||||
            @Suppress("BlockingMethodInNonBlockingContext")
 | 
			
		||||
            context.contentResolver.openOutputStream(picture, "w").use { output ->
 | 
			
		||||
                input.copyTo(output!!)
 | 
			
		||||
        try {
 | 
			
		||||
            data().use { input ->
 | 
			
		||||
                @Suppress("BlockingMethodInNonBlockingContext")
 | 
			
		||||
                context.contentResolver.openOutputStream(picture, "w").use { output ->
 | 
			
		||||
                    input.copyTo(output!!)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (e: Exception) {
 | 
			
		||||
            logcat(LogPriority.ERROR, e)
 | 
			
		||||
            throw IOException(context.getString(R.string.error_saving_picture))
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        DiskUtil.scanMedia(context, picture)
 | 
			
		||||
 
 | 
			
		||||
@@ -669,6 +669,7 @@
 | 
			
		||||
 | 
			
		||||
    <!-- Image notifier -->
 | 
			
		||||
    <string name="picture_saved">Picture saved</string>
 | 
			
		||||
    <string name="error_saving_picture">Error saving picture</string>
 | 
			
		||||
 | 
			
		||||
    <!-- Reader activity -->
 | 
			
		||||
    <string name="custom_filter">Custom filter</string>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user