mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +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