From db8e91eafa9bbfcdab69ee29ce5cc0b456221cc6 Mon Sep 17 00:00:00 2001 From: l-jonas <43265000+l-jonas@users.noreply.github.com> Date: Thu, 13 Dec 2018 19:44:44 +0100 Subject: [PATCH] Fix handling file names with spaces for mime type detection (#134) This fixes https://github.com/syncthing/syncthing-lite/issues/133 --- .../net/syncthing/lite/dialogs/FileMenuDialogFragment.kt | 2 +- .../dialogs/downloadfile/DownloadFileDialogFragment.kt | 2 +- .../net/syncthing/lite/library/SyncthingProvider.kt | 2 +- app/src/main/kotlin/net/syncthing/lite/utils/MimeType.kt | 5 +++-- .../kotlin/net/syncthing/java/core/utils/PathUtils.kt | 8 ++++++++ 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/net/syncthing/lite/dialogs/FileMenuDialogFragment.kt b/app/src/main/kotlin/net/syncthing/lite/dialogs/FileMenuDialogFragment.kt index 31a27ac..6ca1020 100644 --- a/app/src/main/kotlin/net/syncthing/lite/dialogs/FileMenuDialogFragment.kt +++ b/app/src/main/kotlin/net/syncthing/lite/dialogs/FileMenuDialogFragment.kt @@ -47,7 +47,7 @@ class FileMenuDialogFragment: BottomSheetDialogFragment() { Intent(Intent.ACTION_CREATE_DOCUMENT).apply { addCategory(Intent.CATEGORY_OPENABLE) - type = MimeType.getFromUrl(fileSpec.fileName) + type = MimeType.getFromFilename(fileSpec.fileName) putExtra(Intent.EXTRA_TITLE, fileSpec.fileName) }, diff --git a/app/src/main/kotlin/net/syncthing/lite/dialogs/downloadfile/DownloadFileDialogFragment.kt b/app/src/main/kotlin/net/syncthing/lite/dialogs/downloadfile/DownloadFileDialogFragment.kt index 9e2d239..580d5b7 100644 --- a/app/src/main/kotlin/net/syncthing/lite/dialogs/downloadfile/DownloadFileDialogFragment.kt +++ b/app/src/main/kotlin/net/syncthing/lite/dialogs/downloadfile/DownloadFileDialogFragment.kt @@ -88,7 +88,7 @@ class DownloadFileDialogFragment : DialogFragment() { dismissAllowingStateLoss() if (outputUri == null) { - val mimeType = MimeType.getFromUrl(fileSpec.fileName) + val mimeType = MimeType.getFromFilename(fileSpec.fileName) try { context!!.startActivity( diff --git a/app/src/main/kotlin/net/syncthing/lite/library/SyncthingProvider.kt b/app/src/main/kotlin/net/syncthing/lite/library/SyncthingProvider.kt index ff3555f..83786cc 100644 --- a/app/src/main/kotlin/net/syncthing/lite/library/SyncthingProvider.kt +++ b/app/src/main/kotlin/net/syncthing/lite/library/SyncthingProvider.kt @@ -159,7 +159,7 @@ class SyncthingProvider : DocumentsProvider() { if (fileInfo.isDirectory()) Document.MIME_TYPE_DIR else - MimeType.getFromUrl(fileInfo.fileName) + MimeType.getFromFilename(fileInfo.fileName) ) add(Document.COLUMN_LAST_MODIFIED, fileInfo.lastModified) add(Document.COLUMN_FLAGS, 0) diff --git a/app/src/main/kotlin/net/syncthing/lite/utils/MimeType.kt b/app/src/main/kotlin/net/syncthing/lite/utils/MimeType.kt index 314bf13..1476d47 100644 --- a/app/src/main/kotlin/net/syncthing/lite/utils/MimeType.kt +++ b/app/src/main/kotlin/net/syncthing/lite/utils/MimeType.kt @@ -1,6 +1,7 @@ package net.syncthing.lite.utils import android.webkit.MimeTypeMap +import net.syncthing.java.core.utils.PathUtils object MimeType { private const val DEFAULT_MIME_TYPE = "application/octet-stream" @@ -11,7 +12,7 @@ object MimeType { return mimeType ?: DEFAULT_MIME_TYPE } - fun getFromUrl(url: String) = getFromExtension( - MimeTypeMap.getFileExtensionFromUrl(url).toLowerCase() + fun getFromFilename(path: String) = getFromExtension( + PathUtils.getFileExtensionFromFilename(path).toLowerCase() ) } diff --git a/syncthing-core/src/main/kotlin/net/syncthing/java/core/utils/PathUtils.kt b/syncthing-core/src/main/kotlin/net/syncthing/java/core/utils/PathUtils.kt index 4f6371b..dc28463 100644 --- a/syncthing-core/src/main/kotlin/net/syncthing/java/core/utils/PathUtils.kt +++ b/syncthing-core/src/main/kotlin/net/syncthing/java/core/utils/PathUtils.kt @@ -130,4 +130,12 @@ object PathUtils { return dir.removeSuffix(PATH_SEPARATOR) + file } + + fun getFileExtensionFromFilename(filename: String): String { + assertFilenameValid(filename) + + val dotIndex = filename.lastIndexOf(".") + + return if (dotIndex != 0) filename.substring(dotIndex + 1) else "" + } }