fix: strip accents from series sort title in metadata providers

Closes: #1199
This commit is contained in:
Gauthier Roebroeck 2023-09-04 17:42:55 +08:00
parent 974bf30749
commit e568dd0bbc
6 changed files with 11 additions and 9 deletions

View file

@ -2,7 +2,6 @@ package org.gotson.komga.domain.service
import mu.KotlinLogging
import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator
import org.apache.commons.lang3.StringUtils
import org.gotson.komga.application.events.EventPublisher
import org.gotson.komga.application.tasks.TaskEmitter
import org.gotson.komga.domain.model.Book
@ -150,7 +149,7 @@ class SeriesLifecycle(
seriesMetadataRepository.insert(
SeriesMetadata(
title = series.name,
titleSort = StringUtils.stripAccents(series.name),
titleSort = series.name.stripAccents(),
seriesId = series.id,
),
)

View file

@ -18,6 +18,7 @@ import org.gotson.komga.infrastructure.metadata.BookMetadataProvider
import org.gotson.komga.infrastructure.metadata.SeriesMetadataFromBookProvider
import org.gotson.komga.infrastructure.metadata.comicrack.dto.ComicInfo
import org.gotson.komga.infrastructure.metadata.comicrack.dto.Manga
import org.gotson.komga.language.stripAccents
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import java.net.URI
@ -131,7 +132,7 @@ class ComicInfoProvider(
return SeriesMetadataPatch(
title = series,
titleSort = series,
titleSort = series?.stripAccents(),
status = null,
summary = null,
readingDirection = readingDirection,

View file

@ -14,6 +14,7 @@ import org.gotson.komga.domain.model.SeriesMetadataPatch
import org.gotson.komga.infrastructure.mediacontainer.EpubExtractor
import org.gotson.komga.infrastructure.metadata.BookMetadataProvider
import org.gotson.komga.infrastructure.metadata.SeriesMetadataFromBookProvider
import org.gotson.komga.language.stripAccents
import org.jsoup.Jsoup
import org.jsoup.parser.Parser
import org.jsoup.safety.Safelist
@ -107,7 +108,7 @@ class EpubMetadataProvider(
return SeriesMetadataPatch(
title = series,
titleSort = series,
titleSort = series?.stripAccents(),
status = null,
readingDirection = direction,
publisher = publisher,

View file

@ -11,6 +11,7 @@ import org.gotson.komga.domain.model.Sidecar
import org.gotson.komga.infrastructure.metadata.SeriesMetadataProvider
import org.gotson.komga.infrastructure.metadata.mylar.dto.Status
import org.gotson.komga.infrastructure.sidecar.SidecarSeriesConsumer
import org.gotson.komga.language.stripAccents
import org.springframework.stereotype.Service
import kotlin.io.path.notExists
import org.gotson.komga.infrastructure.metadata.mylar.dto.Series as MylarSeries
@ -43,7 +44,7 @@ class MylarSeriesProvider(
return SeriesMetadataPatch(
title = title,
titleSort = title,
titleSort = title.stripAccents(),
status = when (metadata.status) {
Status.Ended -> SeriesMetadata.Status.ENDED
Status.Continuing -> SeriesMetadata.Status.ONGOING

View file

@ -343,7 +343,7 @@ class ComicInfoProviderTest {
@Test
fun `given comicInfo when getting series metadata then metadata patch is valid`() {
val comicInfo = ComicInfo().apply {
series = "series"
series = "séries"
seriesGroup = "multiple,collections"
publisher = "publisher"
ageRating = AgeRating.MA_15
@ -358,7 +358,7 @@ class ComicInfoProviderTest {
val patch = comicInfoProvider.getSeriesMetadataFromBook(BookWithMedia(book, media), library)!!
with(patch) {
assertThat(title).isEqualTo("series")
assertThat(title).isEqualTo("séries")
assertThat(titleSort).isEqualTo("series")
assertThat(status).isNull()
assertThat(collections).containsExactlyInAnyOrder("collections", "multiple")

View file

@ -37,7 +37,7 @@ class MylarSeriesProviderTest {
type = "comicSeries",
publisher = "DC",
imprint = "Vertigo",
name = "Sandman",
name = "Sàndman",
comicid = "12345",
year = 1990,
descriptionText = "Sandman comics",
@ -57,7 +57,7 @@ class MylarSeriesProviderTest {
val patch = mylarSeriesProvider.getSeriesMetadata(series)!!
with(patch) {
assertThat(title).isEqualTo("Sandman")
assertThat(title).isEqualTo("Sàndman")
assertThat(titleSort).isEqualTo("Sandman")
assertThat(status).isEqualTo(SeriesMetadata.Status.ENDED)
assertThat(summary).isEqualTo("Sandman comics formatted")