From fe0c74de238100d2b7098bed1fd4ee06b8432f40 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sat, 27 Apr 2024 16:00:38 +0800 Subject: [PATCH] `MimeTypeMap` is case-sensitive prior to Android O https://android-review.googlesource.com/251120 --- .../com/hippo/ehviewer/gallery/PageLoader2.kt | 2 +- .../com/hippo/ehviewer/spider/ComicInfo.kt | 2 +- .../hippo/ehviewer/ui/settings/AdvancedScreen.kt | 2 +- .../kotlin/com/hippo/ehviewer/util/FileUtils.kt | 4 ++-- app/src/main/kotlin/com/hippo/unifile/RawFile.kt | 16 ++-------------- .../kotlin/com/hippo/unifile/TreeDocumentFile.kt | 2 +- 6 files changed, 8 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/gallery/PageLoader2.kt b/app/src/main/kotlin/com/hippo/ehviewer/gallery/PageLoader2.kt index 258df5044..f17f7ff8c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/gallery/PageLoader2.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/gallery/PageLoader2.kt @@ -62,7 +62,7 @@ abstract class PageLoader2(private val gid: Long, var startPage: Int) : PageLoad protected abstract fun getImageExtension(index: Int): String fun getImageFilename(index: Int): String { - return "$title - ${index + 1}.${getImageExtension(index)}" + return "$title - ${index + 1}.${getImageExtension(index).lowercase()}" } abstract fun save(index: Int, file: UniFile): Boolean diff --git a/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt b/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt index 6d3bd160e..fb80c14c3 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/spider/ComicInfo.kt @@ -76,7 +76,7 @@ fun GalleryInfo.getComicInfo(): ComicInfo { } return ComicInfo( series = title, - alternateSeries = titleJpn.takeUnless { it.isNullOrBlank() }, + alternateSeries = titleJpn?.ifBlank { null }, writer = groups.ifEmpty { null }, penciller = artists.ifEmpty { null }, genre = otherTags.ifEmpty { null }, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt index 061a05ea7..712446500 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt @@ -169,7 +169,7 @@ fun AdvancedScreen(navigator: DestinationsNavigator) { userAgent = dialogState.awaitInputText( initial = userAgent, title = userAgentTitle, - ).trim().takeUnless { it.isBlank() } ?: CHROME_USER_AGENT + ).trim().ifBlank { null } ?: CHROME_USER_AGENT } } val exportFailed = stringResource(id = R.string.settings_advanced_export_data_failed) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/FileUtils.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/FileUtils.kt index ffb10a90c..ec36a2471 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/util/FileUtils.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/util/FileUtils.kt @@ -129,7 +129,7 @@ object FileUtils { * @return null for can't find extension */ fun getExtensionFromFilename(filename: String?) = - filename?.substringAfterLast('.', "").takeUnless { it.isNullOrEmpty() } + filename?.substringAfterLast('.', "")?.ifEmpty { null } /** * Get name from filename @@ -138,7 +138,7 @@ object FileUtils { * @return null for start with . dot */ fun getNameFromFilename(filename: String?) = - filename?.substringBeforeLast('.').takeUnless { it.isNullOrEmpty() } + filename?.substringBeforeLast('.')?.ifEmpty { null } /** * Create a temp file, you need to delete it by you self. diff --git a/app/src/main/kotlin/com/hippo/unifile/RawFile.kt b/app/src/main/kotlin/com/hippo/unifile/RawFile.kt index 5cb9d9a9c..7b2a7d76d 100644 --- a/app/src/main/kotlin/com/hippo/unifile/RawFile.kt +++ b/app/src/main/kotlin/com/hippo/unifile/RawFile.kt @@ -21,7 +21,6 @@ import android.os.ParcelFileDescriptor.open import android.os.ParcelFileDescriptor.parseMode import android.webkit.MimeTypeMap import java.io.File -import java.util.Locale class RawFile(override val parent: RawFile?, private var file: File) : UniFile { @@ -71,7 +70,8 @@ class RawFile(override val parent: RawFile?, private var file: File) : UniFile { get() = if (file.isDirectory) { null } else { - getTypeForName(file.name) + val extension = file.extension.ifEmpty { null }?.lowercase() + MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) ?: "application/octet-stream" } override val isDirectory: Boolean get() = file.isDirectory @@ -130,15 +130,3 @@ class RawFile(override val parent: RawFile?, private var file: File) : UniFile { override fun openFileDescriptor(mode: String): ParcelFileDescriptor = open(file, parseMode(mode)) } - -private fun getTypeForName(name: String): String { - val lastDot = name.lastIndexOf('.') - if (lastDot >= 0) { - val extension = name.substring(lastDot + 1).lowercase(Locale.getDefault()) - val mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) - if (mime != null) { - return mime - } - } - return "application/octet-stream" -} diff --git a/app/src/main/kotlin/com/hippo/unifile/TreeDocumentFile.kt b/app/src/main/kotlin/com/hippo/unifile/TreeDocumentFile.kt index 5210e737f..b5fcbeb35 100644 --- a/app/src/main/kotlin/com/hippo/unifile/TreeDocumentFile.kt +++ b/app/src/main/kotlin/com/hippo/unifile/TreeDocumentFile.kt @@ -54,7 +54,7 @@ class TreeDocumentFile( if (child != null) { if (child.isFile) return child } else { - val extension = displayName.substringAfterLast('.', "") + val extension = displayName.substringAfterLast('.', "").ifEmpty { null }?.lowercase() val mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) ?: "application/octet-stream" val result = DocumentsContractApi21.createFile(uri, mimeType, displayName) if (result != null) {