diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ArchiveExtractor.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ArchiveExtractor.kt index ca26cf6a..7c39afd2 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ArchiveExtractor.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ArchiveExtractor.kt @@ -6,7 +6,6 @@ import java.nio.file.Path import java.util.* abstract class ArchiveExtractor { - protected val natSortComparator: Comparator = CaseInsensitiveSimpleNaturalComparator.getInstance() abstract fun getFilenames(path: Path): List diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ContentDetector.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ContentDetector.kt index 508a810d..59096dad 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ContentDetector.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ContentDetector.kt @@ -36,4 +36,11 @@ class ContentDetector( return mediaType.toString() } } + + fun isImage(stream: InputStream): Boolean = + try { + detectMediaType(stream).startsWith("image/") + } catch (ex: Exception) { + false + } } \ No newline at end of file diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/RarExtractor.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/RarExtractor.kt index 1fe90eaa..67cd5bb6 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/RarExtractor.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/RarExtractor.kt @@ -7,13 +7,16 @@ import java.nio.file.Files import java.nio.file.Path @Service -class RarExtractor : ArchiveExtractor() { +class RarExtractor( + private val contentDetector: ContentDetector +) : ArchiveExtractor() { override fun getFilenames(path: Path): List { val archive = Archive(Files.newInputStream(path)) return archive.fileHeaders .filter { !it.isDirectory } + .filter { contentDetector.isImage(archive.getInputStream(it)) } .map { it.fileNameString } .sortedWith(natSortComparator) } diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ZipExtractor.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ZipExtractor.kt index d453acd0..9b617064 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ZipExtractor.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/archive/ZipExtractor.kt @@ -6,13 +6,18 @@ import java.nio.file.Path import java.util.zip.ZipFile @Service -class ZipExtractor : ArchiveExtractor() { +class ZipExtractor( + private val contentDetector: ContentDetector +) : ArchiveExtractor() { - override fun getFilenames(path: Path) = - ZipFile(path.toFile()).entries().toList() - .filter { !it.isDirectory } - .map { it.name } - .sortedWith(natSortComparator) + override fun getFilenames(path: Path): List { + val zip = ZipFile(path.toFile()) + return zip.entries().toList() + .filter { !it.isDirectory } + .filter { contentDetector.isImage(zip.getInputStream(it)) } + .map { it.name } + .sortedWith(natSortComparator) + } override fun getEntryStream(path: Path, entryName: String): InputStream = ZipFile(path.toFile()).let {