From 64aae014a85a4dec5705bb927e03e2f2484df28b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20=C5=A0imon=C3=ADk?= <32575328+ryzizub@users.noreply.github.com> Date: Thu, 25 Jul 2024 11:29:31 +0200 Subject: [PATCH] feat: allow nullable content-type (#966) * feat: allow empty content-type on android * feat: add nullable places for content type * feat: add nullable mimeType do worker * fix: add unknown type * fix: add unknown type * chore: fix lint issues --- .../kotlin/vn/hunghd/flutterdownloader/DownloadTask.kt | 2 +- .../vn/hunghd/flutterdownloader/DownloadWorker.kt | 10 ++++++---- .../main/kotlin/vn/hunghd/flutterdownloader/TaskDao.kt | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/android/src/main/kotlin/vn/hunghd/flutterdownloader/DownloadTask.kt b/android/src/main/kotlin/vn/hunghd/flutterdownloader/DownloadTask.kt index ed3da7f4..b07ac219 100644 --- a/android/src/main/kotlin/vn/hunghd/flutterdownloader/DownloadTask.kt +++ b/android/src/main/kotlin/vn/hunghd/flutterdownloader/DownloadTask.kt @@ -9,7 +9,7 @@ data class DownloadTask( var filename: String?, var savedDir: String, var headers: String, - var mimeType: String, + var mimeType: String?, var resumable: Boolean, var showNotification: Boolean, var openFileFromNotification: Boolean, diff --git a/android/src/main/kotlin/vn/hunghd/flutterdownloader/DownloadWorker.kt b/android/src/main/kotlin/vn/hunghd/flutterdownloader/DownloadWorker.kt index 94bd5c47..06ae79c3 100644 --- a/android/src/main/kotlin/vn/hunghd/flutterdownloader/DownloadWorker.kt +++ b/android/src/main/kotlin/vn/hunghd/flutterdownloader/DownloadWorker.kt @@ -338,12 +338,14 @@ class DownloadWorker(context: Context, params: WorkerParameters) : break } httpConn!!.connect() - val contentType: String + val contentType: String? if ((responseCode == HttpURLConnection.HTTP_OK || isResume && responseCode == HttpURLConnection.HTTP_PARTIAL) && !isStopped) { contentType = httpConn.contentType val contentLength: Long = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) httpConn.contentLengthLong else httpConn.contentLength.toLong() - log("Content-Type = $contentType") + if (contentType != null) { + log("Content-Type = $contentType") + } log("Content-Length = $contentLength") val charset = getCharsetFromContentType(contentType) log("Charset = $charset") @@ -517,7 +519,7 @@ class DownloadWorker(context: Context, params: WorkerParameters) : * Create a file inside the Download folder using MediaStore API */ @RequiresApi(Build.VERSION_CODES.Q) - private fun createFileInPublicDownloadsDir(filename: String?, mimeType: String): Uri? { + private fun createFileInPublicDownloadsDir(filename: String?, mimeType: String?): Uri? { val collection: Uri = MediaStore.Downloads.EXTERNAL_CONTENT_URI val values = ContentValues() values.put(MediaStore.Downloads.DISPLAY_NAME, filename) @@ -770,7 +772,7 @@ class DownloadWorker(context: Context, params: WorkerParameters) : return contentType?.split(";")?.toTypedArray()?.get(0)?.trim { it <= ' ' } } - private fun isImageOrVideoFile(contentType: String): Boolean { + private fun isImageOrVideoFile(contentType: String?): Boolean { val newContentType = getContentTypeWithoutCharset(contentType) return newContentType != null && (newContentType.startsWith("image/") || newContentType.startsWith("video")) } diff --git a/android/src/main/kotlin/vn/hunghd/flutterdownloader/TaskDao.kt b/android/src/main/kotlin/vn/hunghd/flutterdownloader/TaskDao.kt index 6bb7a8a9..7e862826 100644 --- a/android/src/main/kotlin/vn/hunghd/flutterdownloader/TaskDao.kt +++ b/android/src/main/kotlin/vn/hunghd/flutterdownloader/TaskDao.kt @@ -199,7 +199,7 @@ class TaskDao(private val dbHelper: TaskDbHelper) { val db = dbHelper.writableDatabase val values = ContentValues() values.put(TaskEntry.COLUMN_NAME_FILE_NAME, filename) - values.put(TaskEntry.COLUMN_NAME_MIME_TYPE, mimeType) + values.put(TaskEntry.COLUMN_NAME_MIME_TYPE, mimeType ?: "unknown") db.beginTransaction() try { db.update(