|
|
|
@ -33,6 +33,8 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser(
|
|
|
|
SortOrder.ALPHABETICAL,
|
|
|
|
SortOrder.ALPHABETICAL,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override val availableStates: Set<MangaState> = EnumSet.allOf(MangaState::class.java)
|
|
|
|
|
|
|
|
|
|
|
|
override val configKeyDomain = ConfigKey.Domain(
|
|
|
|
override val configKeyDomain = ConfigKey.Domain(
|
|
|
|
"bato.to",
|
|
|
|
"bato.to",
|
|
|
|
"batocomic.com",
|
|
|
|
"batocomic.com",
|
|
|
|
@ -61,38 +63,69 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser(
|
|
|
|
"zbato.org",
|
|
|
|
"zbato.org",
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
override suspend fun getListPage(
|
|
|
|
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
|
|
|
|
page: Int,
|
|
|
|
when (filter) {
|
|
|
|
query: String?,
|
|
|
|
|
|
|
|
tags: Set<MangaTag>?,
|
|
|
|
is MangaListFilter.Search -> {
|
|
|
|
sortOrder: SortOrder,
|
|
|
|
return search(page, filter.query)
|
|
|
|
): List<Manga> {
|
|
|
|
}
|
|
|
|
if (!query.isNullOrEmpty()) {
|
|
|
|
|
|
|
|
return search(page, query)
|
|
|
|
is MangaListFilter.Advanced -> {
|
|
|
|
}
|
|
|
|
|
|
|
|
@Suppress("NON_EXHAUSTIVE_WHEN_STATEMENT")
|
|
|
|
|
|
|
|
val url = buildString {
|
|
|
|
val url = buildString {
|
|
|
|
append("https://")
|
|
|
|
append("https://")
|
|
|
|
append(domain)
|
|
|
|
append(domain)
|
|
|
|
append("/browse?sort=")
|
|
|
|
|
|
|
|
when (sortOrder) {
|
|
|
|
|
|
|
|
SortOrder.UPDATED,
|
|
|
|
|
|
|
|
-> append("update.za")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
append("/browse?sort=")
|
|
|
|
|
|
|
|
when (filter.sortOrder) {
|
|
|
|
|
|
|
|
SortOrder.UPDATED -> append("update.za")
|
|
|
|
SortOrder.POPULARITY -> append("views_a.za")
|
|
|
|
SortOrder.POPULARITY -> append("views_a.za")
|
|
|
|
SortOrder.NEWEST -> append("create.za")
|
|
|
|
SortOrder.NEWEST -> append("create.za")
|
|
|
|
SortOrder.ALPHABETICAL -> append("title.az")
|
|
|
|
SortOrder.ALPHABETICAL -> append("title.az")
|
|
|
|
SortOrder.RATING -> Unit
|
|
|
|
else -> append("update.za")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!tags.isNullOrEmpty()) {
|
|
|
|
|
|
|
|
|
|
|
|
if (filter.states.isNotEmpty()) {
|
|
|
|
|
|
|
|
val state = filter.states.oneOrThrowIfMany()
|
|
|
|
|
|
|
|
append("&release=")
|
|
|
|
|
|
|
|
append(
|
|
|
|
|
|
|
|
when (state) {
|
|
|
|
|
|
|
|
MangaState.ONGOING -> "ongoing"
|
|
|
|
|
|
|
|
MangaState.FINISHED -> "completed"
|
|
|
|
|
|
|
|
MangaState.ABANDONED -> "cancelled"
|
|
|
|
|
|
|
|
MangaState.PAUSED -> "hiatus"
|
|
|
|
|
|
|
|
else -> ""
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// langs= en ...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (filter.tags.isNotEmpty()) {
|
|
|
|
append("&genres=")
|
|
|
|
append("&genres=")
|
|
|
|
appendAll(tags, ",") { it.key }
|
|
|
|
appendAll(filter.tags, ",") { it.key }
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
append("&page=")
|
|
|
|
|
|
|
|
append(page)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return parseList(url, page)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
null -> {
|
|
|
|
|
|
|
|
val url = buildString {
|
|
|
|
|
|
|
|
append("https://")
|
|
|
|
|
|
|
|
append(domain)
|
|
|
|
|
|
|
|
append("/browse?sort=update.za")
|
|
|
|
append("&page=")
|
|
|
|
append("&page=")
|
|
|
|
append(page)
|
|
|
|
append(page)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return parseList(url, page)
|
|
|
|
return parseList(url, page)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override suspend fun getDetails(manga: Manga): Manga {
|
|
|
|
override suspend fun getDetails(manga: Manga): Manga {
|
|
|
|
val root = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
|
|
|
|
val root = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
|
|
|
|
@ -109,9 +142,11 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser(
|
|
|
|
?.selectFirst(".limit-html")
|
|
|
|
?.selectFirst(".limit-html")
|
|
|
|
?.html(),
|
|
|
|
?.html(),
|
|
|
|
tags = manga.tags + attrs["Genres:"]?.parseTags().orEmpty(),
|
|
|
|
tags = manga.tags + attrs["Genres:"]?.parseTags().orEmpty(),
|
|
|
|
state = when (attrs["Release status:"]?.text()) {
|
|
|
|
state = when (attrs["Original work:"]?.text()) {
|
|
|
|
"Ongoing" -> MangaState.ONGOING
|
|
|
|
"Ongoing" -> MangaState.ONGOING
|
|
|
|
"Completed" -> MangaState.FINISHED
|
|
|
|
"Completed" -> MangaState.FINISHED
|
|
|
|
|
|
|
|
"Cancelled" -> MangaState.ABANDONED
|
|
|
|
|
|
|
|
"Hiatus" -> MangaState.PAUSED
|
|
|
|
else -> manga.state
|
|
|
|
else -> manga.state
|
|
|
|
},
|
|
|
|
},
|
|
|
|
author = attrs["Authors:"]?.text()?.trim() ?: manga.author,
|
|
|
|
author = attrs["Authors:"]?.text()?.trim() ?: manga.author,
|
|
|
|
|