mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 16:18:55 +01:00 
			
		
		
		
	Replace dependency for case insensitive natural sorting (#2389)
Replace dependency for case insensitive natural sorting
This commit is contained in:
		@@ -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) )}
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.ui.reader.loader
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.Page
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
 | 
			
		||||
import eu.kanade.tachiyomi.util.ComparatorUtil.CaseInsensitiveNaturalComparator
 | 
			
		||||
import eu.kanade.tachiyomi.util.ImageUtil
 | 
			
		||||
import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator
 | 
			
		||||
import rx.Observable
 | 
			
		||||
import java.io.File
 | 
			
		||||
import java.io.FileInputStream
 | 
			
		||||
@@ -18,11 +18,9 @@ class DirectoryPageLoader(val file: File) : PageLoader() {
 | 
			
		||||
     * comparator.
 | 
			
		||||
     */
 | 
			
		||||
    override fun getPages(): Observable<List<ReaderPage>> {
 | 
			
		||||
        val comparator = CaseInsensitiveSimpleNaturalComparator.getInstance<String>()
 | 
			
		||||
 | 
			
		||||
        return file.listFiles()
 | 
			
		||||
            .filter { !it.isDirectory && ImageUtil.isImage(it.name) { FileInputStream(it) } }
 | 
			
		||||
            .sortedWith(Comparator<File> { f1, f2 -> comparator.compare(f1.name, f2.name) })
 | 
			
		||||
            .sortedWith(Comparator<File> { f1, f2 -> CaseInsensitiveNaturalComparator.compare(f1.name, f2.name) })
 | 
			
		||||
            .mapIndexed { i, file ->
 | 
			
		||||
                val streamFn = { FileInputStream(file) }
 | 
			
		||||
                ReaderPage(i).apply {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,10 +2,10 @@ package eu.kanade.tachiyomi.ui.reader.loader
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.Page
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
 | 
			
		||||
import eu.kanade.tachiyomi.util.ComparatorUtil.CaseInsensitiveNaturalComparator
 | 
			
		||||
import eu.kanade.tachiyomi.util.ImageUtil
 | 
			
		||||
import junrar.Archive
 | 
			
		||||
import junrar.rarfile.FileHeader
 | 
			
		||||
import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator
 | 
			
		||||
import rx.Observable
 | 
			
		||||
import java.io.File
 | 
			
		||||
import java.io.InputStream
 | 
			
		||||
@@ -42,11 +42,9 @@ class RarPageLoader(file: File) : PageLoader() {
 | 
			
		||||
     * comparator.
 | 
			
		||||
     */
 | 
			
		||||
    override fun getPages(): Observable<List<ReaderPage>> {
 | 
			
		||||
        val comparator = CaseInsensitiveSimpleNaturalComparator.getInstance<String>()
 | 
			
		||||
 | 
			
		||||
        return archive.fileHeaders
 | 
			
		||||
            .filter { !it.isDirectory && ImageUtil.isImage(it.fileNameString) { archive.getInputStream(it) } }
 | 
			
		||||
            .sortedWith(Comparator<FileHeader> { f1, f2 -> comparator.compare(f1.fileNameString, f2.fileNameString) })
 | 
			
		||||
            .sortedWith(Comparator<FileHeader> { f1, f2 -> CaseInsensitiveNaturalComparator.compare(f1.fileNameString, f2.fileNameString) })
 | 
			
		||||
            .mapIndexed { i, header ->
 | 
			
		||||
                val streamFn = { getStream(header) }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.ui.reader.loader
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.Page
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
 | 
			
		||||
import eu.kanade.tachiyomi.util.ComparatorUtil.CaseInsensitiveNaturalComparator
 | 
			
		||||
import eu.kanade.tachiyomi.util.ImageUtil
 | 
			
		||||
import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator
 | 
			
		||||
import rx.Observable
 | 
			
		||||
import java.io.File
 | 
			
		||||
import java.util.zip.ZipEntry
 | 
			
		||||
@@ -32,11 +32,9 @@ class ZipPageLoader(file: File) : PageLoader() {
 | 
			
		||||
     * comparator.
 | 
			
		||||
     */
 | 
			
		||||
    override fun getPages(): Observable<List<ReaderPage>> {
 | 
			
		||||
        val comparator = CaseInsensitiveSimpleNaturalComparator.getInstance<String>()
 | 
			
		||||
 | 
			
		||||
        return zip.entries().toList()
 | 
			
		||||
            .filter { !it.isDirectory && ImageUtil.isImage(it.name) { zip.getInputStream(it) } }
 | 
			
		||||
            .sortedWith(Comparator<ZipEntry> { f1, f2 -> comparator.compare(f1.name, f2.name) })
 | 
			
		||||
            .sortedWith(Comparator<ZipEntry> { f1, f2 -> CaseInsensitiveNaturalComparator.compare(f1.name, f2.name) })
 | 
			
		||||
            .mapIndexed { i, entry ->
 | 
			
		||||
                val streamFn = { zip.getInputStream(entry) }
 | 
			
		||||
                ReaderPage(i).apply {
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,5 @@
 | 
			
		||||
package eu.kanade.tachiyomi.util
 | 
			
		||||
 | 
			
		||||
object ComparatorUtil {
 | 
			
		||||
    val CaseInsensitiveNaturalComparator = compareBy<String, String>(String.CASE_INSENSITIVE_ORDER) { it }.then(naturalOrder())
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user