|
|
|
|
@ -19,6 +19,58 @@ internal class Komikcast(context: MangaLoaderContext) :
|
|
|
|
|
override val datePattern = "MMM d, yyyy"
|
|
|
|
|
override val sourceLocale: Locale = Locale.ENGLISH
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override suspend fun getListPage(
|
|
|
|
|
page: Int,
|
|
|
|
|
query: String?,
|
|
|
|
|
tags: Set<MangaTag>?,
|
|
|
|
|
sortOrder: SortOrder,
|
|
|
|
|
): List<Manga> {
|
|
|
|
|
if (!query.isNullOrEmpty()) {
|
|
|
|
|
if (page > lastSearchPage) {
|
|
|
|
|
return emptyList()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val url = buildString {
|
|
|
|
|
append("https://")
|
|
|
|
|
append(domain)
|
|
|
|
|
append("/page/")
|
|
|
|
|
append(page)
|
|
|
|
|
append("/?s=")
|
|
|
|
|
append(query.urlEncoded())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val docs = webClient.httpGet(url).parseHtml()
|
|
|
|
|
lastSearchPage = docs.selectFirst(".pagination .next")
|
|
|
|
|
?.previousElementSibling()
|
|
|
|
|
?.text()?.toIntOrNull() ?: 1
|
|
|
|
|
return parseMangaList(docs)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val sortQuery = when (sortOrder) {
|
|
|
|
|
SortOrder.ALPHABETICAL -> "title"
|
|
|
|
|
SortOrder.NEWEST -> "latest"
|
|
|
|
|
SortOrder.POPULARITY -> "popular"
|
|
|
|
|
SortOrder.UPDATED -> "update"
|
|
|
|
|
else -> ""
|
|
|
|
|
}
|
|
|
|
|
val tagKey = "genre[]".urlEncoded()
|
|
|
|
|
val tagQuery =
|
|
|
|
|
if (tags.isNullOrEmpty()) "" else tags.joinToString(separator = "&", prefix = "&") { "$tagKey=${it.key}" }
|
|
|
|
|
val url = buildString {
|
|
|
|
|
append("https://")
|
|
|
|
|
append(domain)
|
|
|
|
|
append(listUrl)
|
|
|
|
|
append("/page/")
|
|
|
|
|
append(page)
|
|
|
|
|
append("/?order=")
|
|
|
|
|
append(sortQuery)
|
|
|
|
|
append(tagQuery)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return parseMangaList(webClient.httpGet(url).parseHtml())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override suspend fun getDetails(manga: Manga): Manga {
|
|
|
|
|
val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
|
|
|
|
|
val dateFormat = SimpleDateFormat(datePattern, sourceLocale)
|
|
|
|
|
|