|
@@ -2,20 +2,24 @@ package eu.kanade.tachiyomi.source
|
|
|
|
|
|
import android.content.Context
|
|
|
import eu.kanade.tachiyomi.R
|
|
|
-import eu.kanade.tachiyomi.source.model.*
|
|
|
+import eu.kanade.tachiyomi.source.model.Filter
|
|
|
+import eu.kanade.tachiyomi.source.model.FilterList
|
|
|
+import eu.kanade.tachiyomi.source.model.MangasPage
|
|
|
+import eu.kanade.tachiyomi.source.model.Page
|
|
|
+import eu.kanade.tachiyomi.source.model.SChapter
|
|
|
+import eu.kanade.tachiyomi.source.model.SManga
|
|
|
import eu.kanade.tachiyomi.util.ChapterRecognition
|
|
|
+import eu.kanade.tachiyomi.util.ComparatorUtil.CaseInsensitiveNaturalComparator
|
|
|
import eu.kanade.tachiyomi.util.DiskUtil
|
|
|
import eu.kanade.tachiyomi.util.EpubFile
|
|
|
import eu.kanade.tachiyomi.util.ImageUtil
|
|
|
import junrar.Archive
|
|
|
import junrar.rarfile.FileHeader
|
|
|
-import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator
|
|
|
import rx.Observable
|
|
|
import timber.log.Timber
|
|
|
import java.io.File
|
|
|
import java.io.FileInputStream
|
|
|
import java.io.InputStream
|
|
|
-import java.util.Comparator
|
|
|
import java.util.Locale
|
|
|
import java.util.concurrent.TimeUnit
|
|
|
import java.util.zip.ZipEntry
|
|
@@ -125,7 +129,6 @@ class LocalSource(private val context: Context) : CatalogueSource {
|
|
|
override fun fetchMangaDetails(manga: SManga) = Observable.just(manga)
|
|
|
|
|
|
override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {
|
|
|
- val comparator = CaseInsensitiveSimpleNaturalComparator.getInstance<String>()
|
|
|
val chapters = getBaseDirectories(context)
|
|
|
.mapNotNull { File(it, manga.url).listFiles()?.toList() }
|
|
|
.flatten()
|
|
@@ -146,7 +149,7 @@ class LocalSource(private val context: Context) : CatalogueSource {
|
|
|
}
|
|
|
.sortedWith(Comparator { c1, c2 ->
|
|
|
val c = c2.chapter_number.compareTo(c1.chapter_number)
|
|
|
- if (c == 0) comparator.compare(c2.name, c1.name) else c
|
|
|
+ if (c == 0) CaseInsensitiveNaturalComparator.compare(c2.name, c1.name) else c
|
|
|
})
|
|
|
|
|
|
return Observable.just(chapters)
|
|
@@ -189,20 +192,19 @@ class LocalSource(private val context: Context) : CatalogueSource {
|
|
|
|
|
|
private fun updateCover(chapter: SChapter, manga: SManga): File? {
|
|
|
val format = getFormat(chapter)
|
|
|
- val comparator = CaseInsensitiveSimpleNaturalComparator.getInstance<String>()
|
|
|
return when (format) {
|
|
|
is Format.Directory -> {
|
|
|
val entry = format.file.listFiles()
|
|
|
- .sortedWith(Comparator<File> { f1, f2 -> comparator.compare(f1.name, f2.name) })
|
|
|
- .find { !it.isDirectory && ImageUtil.isImage(it.name, { FileInputStream(it) }) }
|
|
|
+ .sortedWith(Comparator<File> { f1, f2 -> CaseInsensitiveNaturalComparator.compare(f1.name, f2.name) })
|
|
|
+ .find { !it.isDirectory && ImageUtil.isImage(it.name) { FileInputStream(it) } }
|
|
|
|
|
|
entry?.let { updateCover(context, manga, it.inputStream())}
|
|
|
}
|
|
|
is Format.Zip -> {
|
|
|
ZipFile(format.file).use { zip ->
|
|
|
val entry = zip.entries().toList()
|
|
|
- .sortedWith(Comparator<ZipEntry> { f1, f2 -> comparator.compare(f1.name, f2.name) })
|
|
|
- .find { !it.isDirectory && ImageUtil.isImage(it.name, { zip.getInputStream(it) }) }
|
|
|
+ .sortedWith(Comparator<ZipEntry> { f1, f2 -> CaseInsensitiveNaturalComparator.compare(f1.name, f2.name) })
|
|
|
+ .find { !it.isDirectory && ImageUtil.isImage(it.name) { zip.getInputStream(it) } }
|
|
|
|
|
|
entry?.let { updateCover(context, manga, zip.getInputStream(it) )}
|
|
|
}
|
|
@@ -210,8 +212,8 @@ class LocalSource(private val context: Context) : CatalogueSource {
|
|
|
is Format.Rar -> {
|
|
|
Archive(format.file).use { archive ->
|
|
|
val entry = archive.fileHeaders
|
|
|
- .sortedWith(Comparator<FileHeader> { f1, f2 -> comparator.compare(f1.fileNameString, f2.fileNameString) })
|
|
|
- .find { !it.isDirectory && ImageUtil.isImage(it.fileNameString, { archive.getInputStream(it) }) }
|
|
|
+ .sortedWith(Comparator<FileHeader> { f1, f2 -> CaseInsensitiveNaturalComparator.compare(f1.fileNameString, f2.fileNameString) })
|
|
|
+ .find { !it.isDirectory && ImageUtil.isImage(it.fileNameString) { archive.getInputStream(it) } }
|
|
|
|
|
|
entry?.let { updateCover(context, manga, archive.getInputStream(it) )}
|
|
|
}
|