[MangaDex] Language filter support

pull/404/head
Koitharu 2 years ago
parent 3ed960254d
commit 44c2c074a8
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -79,6 +79,10 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context
MangaState.PAUSED -> append("hiatus") MangaState.PAUSED -> append("hiatus")
} }
} }
filter.locale?.let {
append("&originalLanguage[]=")
append(it.language)
}
} }
null -> { 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.firstStringValue() = values().next() as String
private fun JSONObject.selectByLocale(): String? { private fun JSONObject.selectByLocale(): String? {

@ -115,6 +115,26 @@ internal class MangaParserTest {
assert(list.all { it.source == source }) 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}") @ParameterizedTest(name = "{index}|details|{0}")
@MangaSources @MangaSources
fun details(source: MangaSource) = runTest { fun details(source: MangaSource) = runTest {

Loading…
Cancel
Save