diff --git a/komga-webui/src/functions/book-format.ts b/komga-webui/src/functions/book-format.ts index 40340c867..7a4750561 100644 --- a/komga-webui/src/functions/book-format.ts +++ b/komga-webui/src/functions/book-format.ts @@ -1,6 +1,7 @@ export function getBookFormatFromMediaType (mediaType: string): BookFormat { switch (mediaType) { case 'application/x-rar-compressed': + case 'application/x-rar-compressed; version=4': return { type: 'CBR', color: '#03A9F4' } case 'application/zip': return { type: 'CBZ', color: '#4CAF50' } diff --git a/komga/build.gradle.kts b/komga/build.gradle.kts index 79fae8769..d3fe19b36 100644 --- a/komga/build.gradle.kts +++ b/komga/build.gradle.kts @@ -66,7 +66,7 @@ dependencies { implementation("commons-io:commons-io:2.6") implementation("org.apache.commons:commons-lang3:3.10") - implementation("org.apache.tika:tika-core:1.23") + implementation("org.apache.tika:tika-core:1.24") implementation("org.apache.commons:commons-compress:1.20") implementation("com.github.junrar:junrar:4.0.0") implementation("org.apache.pdfbox:pdfbox:2.0.19") diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/RarExtractor.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/RarExtractor.kt index dd44e9e74..57248783f 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/RarExtractor.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/RarExtractor.kt @@ -18,7 +18,7 @@ class RarExtractor( private val natSortComparator: Comparator = CaseInsensitiveSimpleNaturalComparator.getInstance() - override fun mediaTypes(): List = listOf("application/x-rar-compressed") + override fun mediaTypes(): List = listOf("application/x-rar-compressed", "application/x-rar-compressed; version=4") override fun getEntries(path: Path): List = Archive(Files.newInputStream(path)).use { rar -> diff --git a/komga/src/test/kotlin/org/gotson/komga/domain/service/BookAnalyzerTest.kt b/komga/src/test/kotlin/org/gotson/komga/domain/service/BookAnalyzerTest.kt index 20d769118..86291bb60 100644 --- a/komga/src/test/kotlin/org/gotson/komga/domain/service/BookAnalyzerTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/domain/service/BookAnalyzerTest.kt @@ -21,26 +21,17 @@ class BookAnalyzerTest( @Autowired private val bookAnalyzer: BookAnalyzer ) { - @Test - fun `given rar4 archive when analyzing then media status is READY`() { - val file = ClassPathResource("archives/rar4.rar") + @ParameterizedTest + @ValueSource(strings = [ + "rar4.rar", "rar4-solid.rar" + ]) + fun `given rar4 archive when analyzing then media status is READY`(fileName: String) { + val file = ClassPathResource("archives/$fileName") val book = Book("book", file.url, LocalDateTime.now()) val media = bookAnalyzer.analyze(book) - assertThat(media.mediaType).isEqualTo("application/x-rar-compressed") - assertThat(media.status).isEqualTo(Media.Status.READY) - assertThat(media.pages).hasSize(1) - } - - @Test - fun `given rar4 solid archive when analyzing then media status is READY`() { - val file = ClassPathResource("archives/rar4-solid.rar") - val book = Book("book", file.url, LocalDateTime.now()) - - val media = bookAnalyzer.analyze(book) - - assertThat(media.mediaType).isEqualTo("application/x-rar-compressed") + assertThat(media.mediaType).isEqualTo("application/x-rar-compressed; version=4") assertThat(media.status).isEqualTo(Media.Status.READY) assertThat(media.pages).hasSize(1) } @@ -52,57 +43,30 @@ class BookAnalyzerTest( val media = bookAnalyzer.analyze(book) - assertThat(media.mediaType).isEqualTo("application/x-rar-compressed") + assertThat(media.mediaType).isEqualTo("application/x-rar-compressed; version=4") assertThat(media.status).isEqualTo(Media.Status.ERROR) } - @Test - fun `given rar5 archive when analyzing then media status is ERROR`() { - val file = ClassPathResource("archives/rar5.rar") + @ParameterizedTest + @ValueSource(strings = [ + "rar5.rar", "rar5-solid.rar", "rar5-encrypted.rar" + ]) + fun `given rar5 archive when analyzing then media status is UNSUPPORTED`(fileName: String) { + val file = ClassPathResource("archives/$fileName") val book = Book("book", file.url, LocalDateTime.now()) val media = bookAnalyzer.analyze(book) - assertThat(media.mediaType).isEqualTo("application/x-rar-compressed") - assertThat(media.status).isEqualTo(Media.Status.ERROR) - } - - @Test - fun `given rar5 solid archive when analyzing then media status is ERROR`() { - val file = ClassPathResource("archives/rar5-solid.rar") - val book = Book("book", file.url, LocalDateTime.now()) - - val media = bookAnalyzer.analyze(book) - - assertThat(media.mediaType).isEqualTo("application/x-rar-compressed") - assertThat(media.status).isEqualTo(Media.Status.ERROR) - } - - @Test - fun `given rar5 encrypted archive when analyzing then media status is ERROR`() { - val file = ClassPathResource("archives/rar5-encrypted.rar") - val book = Book("book", file.url, LocalDateTime.now()) - - val media = bookAnalyzer.analyze(book) - - assertThat(media.mediaType).isEqualTo("application/x-rar-compressed") - assertThat(media.status).isEqualTo(Media.Status.ERROR) - } - - @Test - fun `given 7zip archive when analyzing then media status is UNSUPPORTED`() { - val file = ClassPathResource("archives/7zip.7z") - val book = Book("book", file.url, LocalDateTime.now()) - - val media = bookAnalyzer.analyze(book) - - assertThat(media.mediaType).isEqualTo("application/x-7z-compressed") + assertThat(media.mediaType).isEqualTo("application/x-rar-compressed; version=5") assertThat(media.status).isEqualTo(Media.Status.UNSUPPORTED) } - @Test - fun `given 7zip encrypted archive when analyzing then media status is UNSUPPORTED`() { - val file = ClassPathResource("archives/7zip-encrypted.7z") + @ParameterizedTest + @ValueSource(strings = [ + "7zip.7z", "7zip-encrypted.7z" + ]) + fun `given 7zip archive when analyzing then media status is UNSUPPORTED`(fileName: String) { + val file = ClassPathResource("archives/$fileName") val book = Book("book", file.url, LocalDateTime.now()) val media = bookAnalyzer.analyze(book)