[MangaDex] Language filter support
This commit is contained in:
@@ -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? {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user