mirror of
https://github.com/gotson/komga.git
synced 2025-12-22 00:13:30 +01:00
fix(analyzer): better rar5 detection
update to tika-core: 1.24 which can detect the rar version in mediaType rar5 is now marked as unsupported instead of error
This commit is contained in:
parent
d86d3427bb
commit
b07e9b9728
4 changed files with 24 additions and 59 deletions
|
|
@ -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' }
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class RarExtractor(
|
|||
|
||||
private val natSortComparator: Comparator<String> = CaseInsensitiveSimpleNaturalComparator.getInstance()
|
||||
|
||||
override fun mediaTypes(): List<String> = listOf("application/x-rar-compressed")
|
||||
override fun mediaTypes(): List<String> = listOf("application/x-rar-compressed", "application/x-rar-compressed; version=4")
|
||||
|
||||
override fun getEntries(path: Path): List<MediaContainerEntry> =
|
||||
Archive(Files.newInputStream(path)).use { rar ->
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue