Skip to content

Commit

Permalink
improved performance
Browse files Browse the repository at this point in the history
  • Loading branch information
DatL4g committed Nov 8, 2020
1 parent 302f308 commit 5ee9bd2
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 109 deletions.
16 changes: 12 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,17 @@ allprojects {
```
Add this line in your app build.gradle:
```gradle
plugins {
...
id 'kotlin-android-extensions'
...
}
...
dependencies {
...
implementation("com.github.DatL4g:MimeMagic-Android:1.0.1")
implementation("com.github.DatL4g:MimeMagic-Android:1.0.2")
...
}
```
Expand Down Expand Up @@ -58,7 +66,7 @@ To get the most precise MimeType with a good fallback method, I recommend `fromF
Less precise is `fromFile(file: File)` because it uses the MimeType that matches the extension as fallback.

#### Recommended method
```java
```kotlin
val file = File("path/to/file.extension")
val mimeData = MimeData.fromFile(file, context)
// or
Expand All @@ -75,7 +83,7 @@ Available for:
* Uri

Example:
```java
```kotlin
val file = File("path/to/file.extension")
val mimeData = file.getMimeData(context)
// or
Expand All @@ -98,7 +106,7 @@ Available info:
* isVideo: Boolean

#### Full Example
```java
```kotlin
val file = File("path/to/file.extension")
val mimeData = MimeData.fromFile(file, context)

Expand Down
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
}

android {
Expand Down
3 changes: 2 additions & 1 deletion mimemagic/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-android-extensions'
}

android {
Expand Down Expand Up @@ -38,7 +39,7 @@ dependencies {
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
testImplementation 'junit:junit:4.+'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
207 changes: 103 additions & 104 deletions mimemagic/src/main/java/de/datlag/mimemagic/MimeData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,119 +3,31 @@ package de.datlag.mimemagic
import android.content.ContentResolver
import android.content.Context
import android.net.Uri
import android.os.Parcelable
import android.webkit.MimeTypeMap
import kotlinx.android.parcel.Parcelize
import java.io.ByteArrayInputStream
import java.io.File
import java.io.InputStream
import kotlin.jvm.Throws

data class MimeData(
val mimeType: String?
) {

val delimiter = '/'
val prefix = mimeType?.split(delimiter)?.get(0)
val suffix = mimeType?.split(delimiter)?.get(1)

val isApplication: Boolean = prefix.equals(MimePrefix.APPLICATION, true)

val isArchive: Boolean = isApplication && when (suffix) {
MimeSuffix.UNIX_ARCHIVER -> true
MimeSuffix.CPIO -> true
MimeSuffix.SHELL_ARCHIVE -> true
MimeSuffix.ISO_9660_IMAGE -> true
MimeSuffix.SEQBOX -> true
MimeSuffix.TAPE_ARCHIVE -> true
MimeSuffix.BZIP2 -> true
MimeSuffix.GZIP -> true
MimeSuffix.LZIP -> true
MimeSuffix.LZMA -> true
MimeSuffix.LZOP -> true
MimeSuffix.SNAPPY -> true
MimeSuffix.XZ -> true
MimeSuffix.DEFLATE -> true
MimeSuffix.COMPRESS -> true
MimeSuffix.Z_STANDARD -> true
MimeSuffix.Z7 -> true
MimeSuffix.Z7X -> true
MimeSuffix.ACE -> true
MimeSuffix.AFA -> true
MimeSuffix.ALZIP -> true
MimeSuffix.APK -> true
MimeSuffix.ARC -> true
MimeSuffix.FREE_ARC -> true
MimeSuffix.ARJ -> true
MimeSuffix.B1 -> true
MimeSuffix.CABINET -> true
MimeSuffix.COMPACT_FILE_SET -> true
MimeSuffix.DISK_ARCHIVER -> true
MimeSuffix.DGCA -> true
MimeSuffix.APPLE_DISK_IMAGE -> true
MimeSuffix.GCA -> true
MimeSuffix.JAR -> true
MimeSuffix.LHA -> true
MimeSuffix.LZX -> true
MimeSuffix.RAR -> true
MimeSuffix.STUFF_IT -> true
MimeSuffix.STUFF_IT_X -> true
MimeSuffix.GZIP_TAR -> true
MimeSuffix.WINDOWS_IMAGE -> true
MimeSuffix.XAR -> true
MimeSuffix.ZIP -> true
MimeSuffix.ZOO -> true
MimeSuffix.PAR2 -> true
else -> false
}

val isAudio: Boolean = prefix.equals(MimePrefix.AUDIO, true)

val isDocument: Boolean = isApplication && when (suffix) {
MimeSuffix.DOC -> true
MimeSuffix.DOT -> true
MimeSuffix.DOCX -> true
MimeSuffix.DOTX -> true
MimeSuffix.DOCM -> true
MimeSuffix.DOTM -> true
MimeSuffix.XLS -> true
MimeSuffix.XLT -> true
MimeSuffix.XLA -> true
MimeSuffix.XLSX -> true
MimeSuffix.XLTX -> true
MimeSuffix.XLSM -> true
MimeSuffix.XLTM -> true
MimeSuffix.XLAM -> true
MimeSuffix.XLSB -> true
MimeSuffix.PPT -> true
MimeSuffix.POT -> true
MimeSuffix.PPS -> true
MimeSuffix.PPA -> true
MimeSuffix.PPTX -> true
MimeSuffix.POTX -> true
MimeSuffix.PPSX -> true
MimeSuffix.PPAM -> true
MimeSuffix.PPTM -> true
MimeSuffix.POTM -> true
MimeSuffix.PPSM -> true
MimeSuffix.MDB -> true
MimeSuffix.ABI_WORD -> true
MimeSuffix.ODP -> true
MimeSuffix.ODS -> true
MimeSuffix.ODT -> true
MimeSuffix.VISIO -> true
MimeSuffix.PDF -> true
else -> false
}

val isFont: Boolean = prefix.equals(MimePrefix.FONT, true)

val isImage: Boolean = prefix.equals(MimePrefix.IMAGE, true)

val isText: Boolean = prefix.equals(MimePrefix.TEXT, true)

@Parcelize
data class MimeData internal constructor(
val mimeType: String?,
val delimiter: Char = '/',
val prefix: String? = mimeType?.split(delimiter)?.get(0),
val suffix: String? = mimeType?.split(delimiter)?.get(1),
val isApplication: Boolean = prefix.equals(MimePrefix.APPLICATION, true),
val isArchive: Boolean = isArchive(isApplication, suffix),
val isAudio: Boolean = prefix.equals(MimePrefix.AUDIO, true),
val isDocument: Boolean = isDocument(isApplication, suffix),
val isFont: Boolean = prefix.equals(MimePrefix.FONT, true),
val isImage: Boolean = prefix.equals(MimePrefix.IMAGE, true),
val isText: Boolean = prefix.equals(MimePrefix.TEXT, true),
val isVideo: Boolean = prefix.equals(MimePrefix.VIDEO, true)
) : Parcelable {

companion object {

@Throws(IllegalArgumentException::class)
fun fromFile(file: File): MimeData {
if (file.isDirectory) {
Expand Down Expand Up @@ -180,6 +92,93 @@ data class MimeData(
fun fromName(name: String): MimeData {
return fromExtension(name.substringAfterLast('.', ""))
}

private fun isArchive(isApplication: Boolean, suffix: String?): Boolean = isApplication && when (suffix) {
null -> false
MimeSuffix.UNIX_ARCHIVER -> true
MimeSuffix.CPIO -> true
MimeSuffix.SHELL_ARCHIVE -> true
MimeSuffix.ISO_9660_IMAGE -> true
MimeSuffix.SEQBOX -> true
MimeSuffix.TAPE_ARCHIVE -> true
MimeSuffix.BZIP2 -> true
MimeSuffix.GZIP -> true
MimeSuffix.LZIP -> true
MimeSuffix.LZMA -> true
MimeSuffix.LZOP -> true
MimeSuffix.SNAPPY -> true
MimeSuffix.XZ -> true
MimeSuffix.DEFLATE -> true
MimeSuffix.COMPRESS -> true
MimeSuffix.Z_STANDARD -> true
MimeSuffix.Z7 -> true
MimeSuffix.Z7X -> true
MimeSuffix.ACE -> true
MimeSuffix.AFA -> true
MimeSuffix.ALZIP -> true
MimeSuffix.APK -> true
MimeSuffix.ARC -> true
MimeSuffix.FREE_ARC -> true
MimeSuffix.ARJ -> true
MimeSuffix.B1 -> true
MimeSuffix.CABINET -> true
MimeSuffix.COMPACT_FILE_SET -> true
MimeSuffix.DISK_ARCHIVER -> true
MimeSuffix.DGCA -> true
MimeSuffix.APPLE_DISK_IMAGE -> true
MimeSuffix.GCA -> true
MimeSuffix.JAR -> true
MimeSuffix.LHA -> true
MimeSuffix.LZX -> true
MimeSuffix.RAR -> true
MimeSuffix.STUFF_IT -> true
MimeSuffix.STUFF_IT_X -> true
MimeSuffix.GZIP_TAR -> true
MimeSuffix.WINDOWS_IMAGE -> true
MimeSuffix.XAR -> true
MimeSuffix.ZIP -> true
MimeSuffix.ZOO -> true
MimeSuffix.PAR2 -> true
else -> false
}

private fun isDocument(isApplication: Boolean, suffix: String?): Boolean = isApplication && when (suffix) {
null -> false
MimeSuffix.DOC -> true
MimeSuffix.DOT -> true
MimeSuffix.DOCX -> true
MimeSuffix.DOTX -> true
MimeSuffix.DOCM -> true
MimeSuffix.DOTM -> true
MimeSuffix.XLS -> true
MimeSuffix.XLT -> true
MimeSuffix.XLA -> true
MimeSuffix.XLSX -> true
MimeSuffix.XLTX -> true
MimeSuffix.XLSM -> true
MimeSuffix.XLTM -> true
MimeSuffix.XLAM -> true
MimeSuffix.XLSB -> true
MimeSuffix.PPT -> true
MimeSuffix.POT -> true
MimeSuffix.PPS -> true
MimeSuffix.PPA -> true
MimeSuffix.PPTX -> true
MimeSuffix.POTX -> true
MimeSuffix.PPSX -> true
MimeSuffix.PPAM -> true
MimeSuffix.PPTM -> true
MimeSuffix.POTM -> true
MimeSuffix.PPSM -> true
MimeSuffix.MDB -> true
MimeSuffix.ABI_WORD -> true
MimeSuffix.ODP -> true
MimeSuffix.ODS -> true
MimeSuffix.ODT -> true
MimeSuffix.VISIO -> true
MimeSuffix.PDF -> true
else -> false
}
}

}

0 comments on commit 5ee9bd2

Please sign in to comment.