[MangaDex] Language filter support

This commit is contained in:
2023-12-05 13:39:07 +02:00
parent 3ed960254d
commit 44c2c074a8
2 changed files with 33 additions and 0 deletions

View File

@@ -79,6 +79,10 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context
MangaState.PAUSED -> append("hiatus")
}
}
filter.locale?.let {
append("&originalLanguage[]=")
append(it.language)
}
}
null -> {
@@ -183,6 +187,15 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context
}
}
override suspend fun getAvailableLocales(): Set<Locale> {
val head = webClient.httpGet("https://$domain/").parseHtml().head()
return head.getElementsByAttributeValue("property", "og:locale:alternate")
.mapNotNullToSet { meta ->
val raw = meta.attrOrNull("content") ?: return@mapNotNullToSet null
Locale(raw.substringBefore('_'), raw.substringAfter('_', ""))
}
}
private fun JSONObject.firstStringValue() = values().next() as String
private fun JSONObject.selectByLocale(): String? {

View File

@@ -115,6 +115,26 @@ internal class MangaParserTest {
assert(list.all { it.source == source })
}
@ParameterizedTest(name = "{index}|locale|{0}")
@MangaSources
fun locale(source: MangaSource) = runTest {
val parser = context.newParserInstance(source)
val locales = parser.getAvailableLocales()
if (locales.isEmpty()) {
return@runTest
}
val filter = MangaListFilter.Advanced(
sortOrder = parser.availableSortOrders.first(),
tags = setOf(),
locale = locales.random(),
states = setOf(),
)
val list = parser.getList(offset = 0, filter)
checkMangaList(list, filter.locale.toString())
assert(list.all { it.source == source })
}
@ParameterizedTest(name = "{index}|details|{0}")
@MangaSources
fun details(source: MangaSource) = runTest {