feat: import total book count from ComicInfo.xml and Mylar series.json

closes #450
This commit is contained in:
Gauthier Roebroeck 2021-07-30 11:15:42 +08:00
parent 6090e3f0c5
commit 64acfeff99
11 changed files with 17 additions and 2 deletions

View file

@ -10,6 +10,7 @@ data class SeriesMetadataPatch(
val ageRating: Int?, val ageRating: Int?,
val language: String?, val language: String?,
val genres: Set<String>?, val genres: Set<String>?,
val totalBookCount: Int?,
val collections: List<String> val collections: List<String>
) )

View file

@ -118,6 +118,7 @@ class BookMetadataLifecycle(
logger.debug { "Apply metadata for book: $book" } logger.debug { "Apply metadata for book: $book" }
logger.debug { "Original metadata: $it" } logger.debug { "Original metadata: $it" }
logger.debug { "Patch: $patch" }
val patched = metadataApplier.apply(bPatch, it) val patched = metadataApplier.apply(bPatch, it)
logger.debug { "Patched metadata: $patched" } logger.debug { "Patched metadata: $patched" }

View file

@ -37,7 +37,8 @@ class MetadataApplier {
ageRating = getIfNotLocked(ageRating, patch.ageRating, ageRatingLock), ageRating = getIfNotLocked(ageRating, patch.ageRating, ageRatingLock),
publisher = getIfNotLocked(publisher, patch.publisher, publisherLock), publisher = getIfNotLocked(publisher, patch.publisher, publisherLock),
language = getIfNotLocked(language, patch.language, languageLock), language = getIfNotLocked(language, patch.language, languageLock),
genres = getIfNotLocked(genres, patch.genres, genresLock) genres = getIfNotLocked(genres, patch.genres, genresLock),
totalBookCount = getIfNotLocked(totalBookCount, patch.totalBookCount, totalBookCountLock)
) )
} }
} }

View file

@ -131,6 +131,7 @@ class SeriesMetadataLifecycle(
readingDirection = patches.mostFrequent { it.readingDirection }, readingDirection = patches.mostFrequent { it.readingDirection },
ageRating = patches.mapNotNull { it.ageRating }.maxOrNull(), ageRating = patches.mapNotNull { it.ageRating }.maxOrNull(),
publisher = patches.mostFrequent { it.publisher }, publisher = patches.mostFrequent { it.publisher },
totalBookCount = patches.mapNotNull { it.totalBookCount }.maxOrNull(),
collections = emptyList() collections = emptyList()
) )
@ -145,6 +146,7 @@ class SeriesMetadataLifecycle(
logger.debug { "Apply metadata for series: $series" } logger.debug { "Apply metadata for series: $series" }
logger.debug { "Original metadata: $it" } logger.debug { "Original metadata: $it" }
logger.debug { "Patch: $patch" }
val patched = metadataApplier.apply(patch, it) val patched = metadataApplier.apply(patch, it)
logger.debug { "Patched metadata: $patched" } logger.debug { "Patched metadata: $patched" }

View file

@ -114,6 +114,7 @@ class ComicInfoProvider(
ageRating = comicInfo.ageRating?.ageRating, ageRating = comicInfo.ageRating?.ageRating,
language = if (comicInfo.languageISO != null && BCP47TagValidator.isValid(comicInfo.languageISO!!)) comicInfo.languageISO else null, language = if (comicInfo.languageISO != null && BCP47TagValidator.isValid(comicInfo.languageISO!!)) comicInfo.languageISO else null,
genres = if (!genres.isNullOrEmpty()) genres.toSet() else null, genres = if (!genres.isNullOrEmpty()) genres.toSet() else null,
totalBookCount = comicInfo.count,
collections = listOfNotNull(comicInfo.seriesGroup?.ifBlank { null }) collections = listOfNotNull(comicInfo.seriesGroup?.ifBlank { null })
) )
} }

View file

@ -120,6 +120,7 @@ class EpubMetadataProvider(
summary = null, summary = null,
language = if (language != null && BCP47TagValidator.isValid(language)) language else null, language = if (language != null && BCP47TagValidator.isValid(language)) language else null,
genres = genres, genres = genres,
totalBookCount = null,
collections = emptyList() collections = emptyList()
) )
} }

View file

@ -47,6 +47,7 @@ class MylarSeriesProvider(
ageRating = metadata.ageRating?.ageRating, ageRating = metadata.ageRating?.ageRating,
language = null, language = null,
genres = null, genres = null,
totalBookCount = metadata.totalIssues,
collections = emptyList(), collections = emptyList(),
) )
} catch (e: Exception) { } catch (e: Exception) {

View file

@ -321,6 +321,7 @@ class ComicInfoProviderTest {
ageRating = AgeRating.MA_15 ageRating = AgeRating.MA_15
manga = Manga.YES_AND_RIGHT_TO_LEFT manga = Manga.YES_AND_RIGHT_TO_LEFT
languageISO = "en" languageISO = "en"
count = 10
genre = "Action, Adventure" genre = "Action, Adventure"
} }
@ -337,7 +338,8 @@ class ComicInfoProviderTest {
assertThat(ageRating).isEqualTo(15) assertThat(ageRating).isEqualTo(15)
assertThat(readingDirection).isEqualTo(SeriesMetadata.ReadingDirection.RIGHT_TO_LEFT) assertThat(readingDirection).isEqualTo(SeriesMetadata.ReadingDirection.RIGHT_TO_LEFT)
assertThat(language).isEqualTo("en") assertThat(language).isEqualTo("en")
assertThat(summary).isBlank() assertThat(summary).isBlank
assertThat(totalBookCount).isEqualTo(10)
assertThat(genres).containsExactlyInAnyOrder("Action", "Adventure") assertThat(genres).containsExactlyInAnyOrder("Action", "Adventure")
} }
} }

View file

@ -23,6 +23,7 @@ class ComicInfoTest {
assertThat(notes).isEqualTo("Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]") assertThat(notes).isEqualTo("Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]")
assertThat(publisher).isEqualTo("DC") assertThat(publisher).isEqualTo("DC")
assertThat(imprint).isEqualTo("Vertigo") assertThat(imprint).isEqualTo("Vertigo")
assertThat(count).isEqualTo(10)
assertThat(genre).isEqualTo("Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama") assertThat(genre).isEqualTo("Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama")
assertThat(pageCount).isEqualTo(237) assertThat(pageCount).isEqualTo(237)
assertThat(languageISO).isEqualTo("en") assertThat(languageISO).isEqualTo("en")
@ -47,6 +48,7 @@ class ComicInfoTest {
assertThat(notes).isEqualTo("Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]") assertThat(notes).isEqualTo("Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]")
assertThat(publisher).isEqualTo("DC") assertThat(publisher).isEqualTo("DC")
assertThat(imprint).isEqualTo("Vertigo") assertThat(imprint).isEqualTo("Vertigo")
assertThat(pageCount).isNull()
assertThat(genre).isEqualTo("Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama") assertThat(genre).isEqualTo("Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama")
assertThat(pageCount).isEqualTo(237) assertThat(pageCount).isEqualTo(237)
assertThat(languageISO).isEqualTo("en") assertThat(languageISO).isEqualTo("en")

View file

@ -57,6 +57,7 @@ class MylarSeriesProviderTest {
assertThat(ageRating).isEqualTo(18) assertThat(ageRating).isEqualTo(18)
assertThat(language).isNull() assertThat(language).isNull()
assertThat(genres).isNull() assertThat(genres).isNull()
assertThat(totalBookCount).isEqualTo(2)
assertThat(collections).isEmpty() assertThat(collections).isEmpty()
} }
} }
@ -96,6 +97,7 @@ class MylarSeriesProviderTest {
assertThat(ageRating).isNull() assertThat(ageRating).isNull()
assertThat(language).isNull() assertThat(language).isNull()
assertThat(genres).isNull() assertThat(genres).isNull()
assertThat(totalBookCount).isEqualTo(2)
assertThat(collections).isEmpty() assertThat(collections).isEmpty()
} }
} }

View file

@ -23,6 +23,7 @@
<Notes>Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]</Notes> <Notes>Scraped metadata from Comixology [CMXDB727888], [RELDATE:2018-10-30]</Notes>
<Publisher>DC</Publisher> <Publisher>DC</Publisher>
<Imprint>Vertigo</Imprint> <Imprint>Vertigo</Imprint>
<Count>10</Count>
<Genre>Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama</Genre> <Genre>Fantasy, Supernatural/Occult, Horror, Mature, Superhero, Mythology, Drama</Genre>
<PageCount>237</PageCount> <PageCount>237</PageCount>
<LanguageISO>en</LanguageISO> <LanguageISO>en</LanguageISO>