mirror of
https://github.com/gotson/komga.git
synced 2025-12-22 00:13:30 +01:00
fix(comicinfo): avoid reading the file twice
This commit is contained in:
parent
253088b483
commit
1dab826622
5 changed files with 20 additions and 36 deletions
|
|
@ -27,19 +27,17 @@ class MetadataLifecycle(
|
|||
logger.info { "Refresh metadata for book: $book" }
|
||||
val loadedBook = bookRepository.findByIdOrNull(book.id)
|
||||
|
||||
loadedBook?.let { b ->
|
||||
val patch = comicInfoProvider.getBookMetadataFromBook(b)
|
||||
loadedBook?.let { bookToPatch ->
|
||||
val patch = comicInfoProvider.getBookMetadataFromBook(bookToPatch)
|
||||
|
||||
patch?.let {
|
||||
metadataApplier.apply(it, b)
|
||||
bookRepository.save(b)
|
||||
}
|
||||
patch?.let { bPatch ->
|
||||
metadataApplier.apply(bPatch, bookToPatch)
|
||||
bookRepository.save(bookToPatch)
|
||||
|
||||
val seriesPatch = comicInfoProvider.getSeriesMetadataFromBook(b)
|
||||
|
||||
seriesPatch?.let {
|
||||
metadataApplier.apply(it, b.series)
|
||||
seriesRepository.save(b.series)
|
||||
bPatch.series?.let { sPatch ->
|
||||
metadataApplier.apply(sPatch, bookToPatch.series)
|
||||
seriesRepository.save(bookToPatch.series)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,5 +11,6 @@ class BookMetadataPatch(
|
|||
val publisher: String?,
|
||||
val ageRating: Int?,
|
||||
val releaseDate: LocalDate?,
|
||||
val authors: List<Author>?
|
||||
val authors: List<Author>?,
|
||||
val series: SeriesMetadataPatch?
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
package org.gotson.komga.infrastructure.metadata
|
||||
|
||||
import org.gotson.komga.domain.model.Book
|
||||
import org.gotson.komga.domain.model.SeriesMetadataPatch
|
||||
|
||||
interface SeriesMetadataProvider {
|
||||
fun getSeriesMetadataFromBook(book: Book): SeriesMetadataPatch?
|
||||
}
|
||||
|
|
@ -9,7 +9,6 @@ import org.gotson.komga.domain.model.BookMetadataPatch
|
|||
import org.gotson.komga.domain.model.SeriesMetadataPatch
|
||||
import org.gotson.komga.domain.service.BookAnalyzer
|
||||
import org.gotson.komga.infrastructure.metadata.BookMetadataProvider
|
||||
import org.gotson.komga.infrastructure.metadata.SeriesMetadataProvider
|
||||
import org.gotson.komga.infrastructure.metadata.comicinfo.dto.ComicInfo
|
||||
import org.gotson.komga.infrastructure.metadata.comicinfo.dto.Manga
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
|
|
@ -24,7 +23,7 @@ private const val COMIC_INFO = "ComicInfo.xml"
|
|||
class ComicInfoProvider(
|
||||
@Autowired(required = false) private val mapper: XmlMapper = XmlMapper(),
|
||||
private val bookAnalyzer: BookAnalyzer
|
||||
) : BookMetadataProvider, SeriesMetadataProvider {
|
||||
) : BookMetadataProvider {
|
||||
|
||||
override fun getBookMetadataFromBook(book: Book): BookMetadataPatch? {
|
||||
getComicInfo(book)?.let { comicInfo ->
|
||||
|
|
@ -56,18 +55,12 @@ class ComicInfoProvider(
|
|||
comicInfo.publisher,
|
||||
comicInfo.ageRating?.ageRating,
|
||||
releaseDate,
|
||||
if (authors.isEmpty()) null else authors
|
||||
)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getSeriesMetadataFromBook(book: Book): SeriesMetadataPatch? {
|
||||
getComicInfo(book)?.let { comicInfo ->
|
||||
return SeriesMetadataPatch(
|
||||
comicInfo.series,
|
||||
comicInfo.series,
|
||||
null
|
||||
if (authors.isEmpty()) null else authors,
|
||||
SeriesMetadataPatch(
|
||||
comicInfo.series,
|
||||
comicInfo.series,
|
||||
null
|
||||
)
|
||||
)
|
||||
}
|
||||
return null
|
||||
|
|
@ -76,7 +69,7 @@ class ComicInfoProvider(
|
|||
private fun getComicInfo(book: Book): ComicInfo? {
|
||||
try {
|
||||
if (book.media.files.none { it == COMIC_INFO }) {
|
||||
logger.debug { "Book does not contain any $COMIC_INFO file: ${book.url}" }
|
||||
logger.debug { "Book does not contain any $COMIC_INFO file: $book" }
|
||||
return null
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ class ComicInfoProviderTest {
|
|||
|
||||
every { mockMapper.readValue(any<ByteArray>(), ComicInfo::class.java) } returns comicInfo
|
||||
|
||||
val patch = comicInfoProvider.getSeriesMetadataFromBook(book)
|
||||
val patch = comicInfoProvider.getBookMetadataFromBook(book)!!.series
|
||||
|
||||
with(patch!!) {
|
||||
assertThat(title).isEqualTo("series")
|
||||
|
|
|
|||
Loading…
Reference in a new issue