diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookParser.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookParser.kt index 5809fffa..bd297c5a 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/BookParser.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/BookParser.kt @@ -2,6 +2,7 @@ package org.gotson.komga.domain.service import mu.KotlinLogging import net.coobird.thumbnailator.Thumbnails +import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.BookMetadata import org.gotson.komga.domain.model.Status @@ -11,6 +12,7 @@ import org.gotson.komga.infrastructure.archive.RarExtractor import org.gotson.komga.infrastructure.archive.ZipExtractor import org.springframework.stereotype.Service import java.io.ByteArrayOutputStream +import java.util.* private val logger = KotlinLogging.logger {} @@ -26,6 +28,8 @@ class BookParser( "application/x-rar-compressed" to rarExtractor ) + private val natSortComparator: Comparator = CaseInsensitiveSimpleNaturalComparator.getInstance() + private val thumbnailSize = 300 private val thumbnailFormat = "png" @@ -38,6 +42,7 @@ class BookParser( throw UnsupportedMediaTypeException("Unsupported mime type: $mediaType. File: ${book.url}", mediaType) val pages = supportedMediaTypes.getValue(mediaType).getPagesList(book.path()) + .sortedWith(compareBy(natSortComparator) { it.fileName }) logger.info { "Book has ${pages.size} pages" } logger.info { "Trying to generate cover for book: ${book.url}" } diff --git a/komga/src/test/kotlin/org/gotson/komga/domain/service/BookParserTest.kt b/komga/src/test/kotlin/org/gotson/komga/domain/service/BookParserTest.kt index b7461bfa..f702a23c 100644 --- a/komga/src/test/kotlin/org/gotson/komga/domain/service/BookParserTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/domain/service/BookParserTest.kt @@ -31,7 +31,7 @@ class BookParserTest { //when val thumbnailFile = slot() every { mockZip.getPageStream(book.path(), capture(thumbnailFile)) } returns ByteArray(1) - val metadata = bookParser.parse(book) + bookParser.parse(book) // then assertThat(thumbnailFile.captured).isEqualTo("01")