From e1741c34fa88d188f703fa2d85f005b50d0c475e Mon Sep 17 00:00:00 2001 From: Gauthier Roebroeck Date: Wed, 23 Jun 2021 09:12:26 +0800 Subject: [PATCH] fix(epub): better isbn parsing --- .../metadata/epub/EpubMetadataProvider.kt | 2 +- .../metadata/epub/EpubMetadataProviderTest.kt | 36 +++++++++++ komga/src/test/resources/epub/Die Drei 3.opf | 62 +++++++++++++++++++ 3 files changed, 99 insertions(+), 1 deletion(-) create mode 100755 komga/src/test/resources/epub/Die Drei 3.opf diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/metadata/epub/EpubMetadataProvider.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/metadata/epub/EpubMetadataProvider.kt index ecb3f6e44..3003c9226 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/metadata/epub/EpubMetadataProvider.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/metadata/epub/EpubMetadataProvider.kt @@ -69,7 +69,7 @@ class EpubMetadataProvider( } val isbn = opf.select("metadata > dc|identifier") - ?.map { it.text().removePrefix("isbn:") } + ?.map { it.text().toLowerCase().removePrefix("isbn:") } ?.mapNotNull { isbnValidator.validate(it) } ?.firstOrNull() diff --git a/komga/src/test/kotlin/org/gotson/komga/infrastructure/metadata/epub/EpubMetadataProviderTest.kt b/komga/src/test/kotlin/org/gotson/komga/infrastructure/metadata/epub/EpubMetadataProviderTest.kt index a5d6af51a..486d8e21e 100644 --- a/komga/src/test/kotlin/org/gotson/komga/infrastructure/metadata/epub/EpubMetadataProviderTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/infrastructure/metadata/epub/EpubMetadataProviderTest.kt @@ -57,6 +57,25 @@ class EpubMetadataProviderTest { } } + @Test + fun `given another epub 3 opf when getting book metadata then metadata patch is valid`() { + val opf = ClassPathResource("epub/Die Drei 3.opf") + every { mockExtractor.getPackageFile(any()) } returns opf.file.readText() + + val patch = epubMetadataProvider.getBookMetadataFromBook(BookWithMedia(book, media)) + + with(patch!!) { + assertThat(title).isEqualTo("Die Drei Fragezeichen-Kids, Bd.3, Invasion Der Fliegen") + assertThat(summary).isEqualTo("Hunderte von Fliegen tummeln sich auf dem Schrottplatz vor Tante Mathildas Haus. Das ist ein Alptraum! Findet diese \"Invasion der Fliegen\" tatsächlich statt oder leidet Tante Mathilda etwa an Halluzinationen? Justus, Peter und Bob nehmen sich der Sache an und kommen schnell dahinter, daß es sich hier nicht um eine Einbildung von Tante Mathilda handelt. Sie verfolgen die Spur der Fliegen bis in einen düsteren Kanalschacht...") + assertThat(releaseDate).isEqualTo(LocalDate.of(1999, 7, 31)) + assertThat(authors).containsExactlyInAnyOrder( + Author("Ulf Blanck", "writer"), + Author("Stefanie Wegner", "writer"), + ) + assertThat(isbn).isEqualTo("9783440077931") + } + } + @Test fun `given real epub 3 when getting book metadata then metadata patch is valid`() { val epubResource = ClassPathResource("epub/The Incomplete Theft - Ralph Burke.epub") @@ -116,6 +135,23 @@ class EpubMetadataProviderTest { } } + @Test + fun `given another epub 3 opf when getting series metadata then metadata patch is valid`() { + val opf = ClassPathResource("epub/Die Drei 3.opf") + every { mockExtractor.getPackageFile(any()) } returns opf.file.readText() + + val patch = epubMetadataProvider.getSeriesMetadataFromBook(BookWithMedia(book, media)) + + with(patch!!) { + assertThat(title).isEqualTo("Die drei ??? Kids") + assertThat(titleSort).isEqualTo("Die drei ??? Kids") + assertThat(readingDirection).isNull() + assertThat(publisher).isEqualTo("Franckh-Kosmos Verlag") + assertThat(language).isEqualTo("de") + assertThat(genres).containsExactlyInAnyOrder("Kinder- und Jugendbücher", "Juvenile Fiction", "Mysteries & Detective Stories") + } + } + @Test fun `given epub 2 opf when getting series metadata then metadata patch is valid`() { val opf = ClassPathResource("epub/1979.opf") diff --git a/komga/src/test/resources/epub/Die Drei 3.opf b/komga/src/test/resources/epub/Die Drei 3.opf new file mode 100755 index 000000000..c2a2d26da --- /dev/null +++ b/komga/src/test/resources/epub/Die Drei 3.opf @@ -0,0 +1,62 @@ + + + + Die Drei Fragezeichen-Kids, Bd.3, Invasion Der Fliegen + Ulf Blanck + Stefanie Wegner + de + calibre (5.21.0) [https://calibre-ebook.com] + Franckh-Kosmos Verlag + AMAZON:3440077934 + GOOGLE:pPamZwEACAAJ + ISBN:9783440077931 + GOODREADS:71348 + uuid:38969b48-0187-4654-9e62-f2b21d4c5e40 + calibre:38969b48-0187-4654-9e62-f2b21d4c5e40 + Juvenile Fiction + Mysteries & Detective Stories + Kinder- und Jugendbücher + 1999-07-31T16:00:00+00:00 + <div> +<p>Hunderte von Fliegen tummeln sich auf dem Schrottplatz vor Tante Mathildas Haus. Das ist ein Alptraum! Findet diese "Invasion der Fliegen" tatsächlich statt oder leidet Tante Mathilda etwa an Halluzinationen? Justus, Peter und Bob nehmen sich der Sache an und kommen schnell dahinter, daß es sich hier nicht um eine Einbildung von Tante Mathilda handelt. Sie verfolgen die Spur der Fliegen bis in einen düsteren Kanalschacht...</p></div> + main + Drei Fragezeichen-Kids, Bd.3, Invasion Der Fliegen, Die + + aut + Blanck, Ulf & Wegner, Stefanie + aut + Blanck, Ulf & Wegner, Stefanie + bkp + 2020-08-09T08:40:50Z + 8.00 + Die drei ??? Kids + series + 3 + 2021-06-22T13:37:39Z + + + + + + + + + + + + + + + + + + + + + + + + + +