mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-19 03:59:19 +01:00
Improve extension discovery. Fix #542
This commit is contained in:
parent
830f792824
commit
0db1a3167d
@ -25,6 +25,7 @@ import rx.subjects.BehaviorSubject
|
|||||||
import rx.subscriptions.CompositeSubscription
|
import rx.subscriptions.CompositeSubscription
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
import java.net.URLConnection
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is the one in charge of downloading chapters.
|
* This class is the one in charge of downloading chapters.
|
||||||
@ -366,19 +367,22 @@ class Downloader(private val context: Context, private val provider: DownloadPro
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the extension of the downloaded image from the network response, or if it's null,
|
* Returns the extension of the downloaded image from the network response, or if it's null,
|
||||||
* analyze the file. If both fail, assume it's a jpg.
|
* analyze the file. If everything fails, assume it's a jpg.
|
||||||
*
|
*
|
||||||
* @param response the network response of the image.
|
* @param response the network response of the image.
|
||||||
* @param file the file where the image is already downloaded.
|
* @param file the file where the image is already downloaded.
|
||||||
*/
|
*/
|
||||||
private fun getImageExtension(response: Response, file: UniFile): String {
|
private fun getImageExtension(response: Response, file: UniFile): String {
|
||||||
val contentType = response.body().contentType()
|
// Read content type if available.
|
||||||
val mimeStr = if (contentType != null) {
|
val mime = response.body().contentType()?.let { ct -> "${ct.type()}/${ct.subtype()}" }
|
||||||
"${contentType.type()}/${contentType.subtype()}"
|
// Else guess from the uri.
|
||||||
} else {
|
?: context.contentResolver.getType(file.uri)
|
||||||
context.contentResolver.getType(file.uri)
|
// Else read magic numbers.
|
||||||
|
?: file.openInputStream().buffered().use {
|
||||||
|
URLConnection.guessContentTypeFromStream(it)
|
||||||
}
|
}
|
||||||
return MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeStr) ?: "jpg"
|
|
||||||
|
return MimeTypeMap.getSingleton().getExtensionFromMimeType(mime) ?: "jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.reader
|
|||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
|
import android.webkit.MimeTypeMap
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
||||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||||
@ -29,6 +30,7 @@ import rx.schedulers.Schedulers
|
|||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.net.URLConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -563,14 +565,21 @@ class ReaderPresenter : BasePresenter<ReaderActivity>() {
|
|||||||
// Copy file in background.
|
// Copy file in background.
|
||||||
Observable
|
Observable
|
||||||
.fromCallable {
|
.fromCallable {
|
||||||
// File where the image will be saved.
|
// Folder where the image will be saved.
|
||||||
val destDir = File(pictureDirectory)
|
val destDir = File(pictureDirectory)
|
||||||
destDir.mkdirs()
|
destDir.mkdirs()
|
||||||
|
|
||||||
val destFile = File(destDir, manga.title + " - " + chapter.name +
|
// Find out file extension.
|
||||||
" - " + (page.index + 1))
|
val mime = context.contentResolver.getType(page.uri)
|
||||||
|
?: context.contentResolver.openInputStream(page.uri).buffered().use {
|
||||||
|
URLConnection.guessContentTypeFromStream(it)
|
||||||
|
}
|
||||||
|
val ext = MimeTypeMap.getSingleton().getExtensionFromMimeType(mime) ?: "jpg"
|
||||||
|
|
||||||
|
// Destination file.
|
||||||
|
val destFile = File(destDir, manga.title + " - " + chapter.name +
|
||||||
|
" - " + (page.index + 1) + ".$ext")
|
||||||
|
|
||||||
// Location of image file.
|
|
||||||
context.contentResolver.openInputStream(page.uri).use { input ->
|
context.contentResolver.openInputStream(page.uri).use { input ->
|
||||||
destFile.outputStream().use { output ->
|
destFile.outputStream().use { output ->
|
||||||
input.copyTo(output)
|
input.copyTo(output)
|
||||||
|
Loading…
Reference in New Issue
Block a user