parent
8e9ef9d6e2
commit
d721d181c0
2 changed files with 28 additions and 36 deletions
|
@ -1,7 +1,7 @@
|
|||
ext {
|
||||
extName = 'HentaiLA'
|
||||
extClass = '.Hentaila'
|
||||
extVersionCode = 27
|
||||
extVersionCode = 28
|
||||
isNsfw = true
|
||||
}
|
||||
|
||||
|
@ -14,4 +14,5 @@ dependencies {
|
|||
implementation(project(':lib:voe-extractor'))
|
||||
implementation(project(':lib:yourupload-extractor'))
|
||||
implementation(project(':lib:streamhidevid-extractor'))
|
||||
implementation(project(':lib:sendvid-extractor'))
|
||||
}
|
|
@ -14,6 +14,7 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.burstcloudextractor.BurstCloudExtractor
|
||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||
import eu.kanade.tachiyomi.lib.sendvidextractor.SendvidExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamhidevidextractor.StreamHideVidExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
|
@ -30,7 +31,6 @@ import okhttp3.Response
|
|||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.io.IOException
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
|
@ -65,6 +65,7 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
"Mp4Upload",
|
||||
"BurstCloud",
|
||||
"StreamHideVid",
|
||||
"Sendvid",
|
||||
)
|
||||
|
||||
private val DATE_FORMATTER by lazy {
|
||||
|
@ -94,45 +95,27 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
|
||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||
val filterList = if (filters.isEmpty()) getFilterList() else filters
|
||||
val genreFilter = filterList.find { it is GenreFilter } as GenreFilter
|
||||
val genreFilter = filterList.filterIsInstance<GenreFilter>().firstOrNull()
|
||||
|
||||
if (query.isNotEmpty()) {
|
||||
if (query.length < 2) throw IOException("La búsqueda debe tener al menos 2 caracteres")
|
||||
require(query.length >= 2) { "La búsqueda debe tener al menos 2 caracteres" }
|
||||
return POST("$baseUrl/api/search", headers, FormBody.Builder().add("value", query).build())
|
||||
}
|
||||
|
||||
var url = "$baseUrl/directorio?p=$page".toHttpUrl().newBuilder()
|
||||
|
||||
if (genreFilter.state != 0) {
|
||||
url = "$baseUrl/genero/${genreFilter.toUriPart()}?p=$page".toHttpUrl().newBuilder()
|
||||
}
|
||||
val urlBuilder = "$baseUrl/${if (genreFilter?.state != 0) "genero/${genreFilter?.toUriPart()}" else "directorio?p=$page"}"
|
||||
.toHttpUrl().newBuilder()
|
||||
|
||||
filterList.forEach { filter ->
|
||||
when (filter) {
|
||||
is OrderFilter -> {
|
||||
url.addQueryParameter("filter", filter.toUriPart())
|
||||
}
|
||||
is StatusOngoingFilter -> {
|
||||
if (filter.state) {
|
||||
url.addQueryParameter("status[1]", "on")
|
||||
}
|
||||
}
|
||||
is StatusCompletedFilter -> {
|
||||
if (filter.state) {
|
||||
url.addQueryParameter("status[2]", "on")
|
||||
}
|
||||
}
|
||||
is UncensoredFilter -> {
|
||||
if (filter.state) {
|
||||
url.addQueryParameter("uncensored", "on")
|
||||
}
|
||||
}
|
||||
|
||||
is OrderFilter -> urlBuilder.addQueryParameter("filter", filter.toUriPart())
|
||||
is StatusOngoingFilter -> if (filter.state) urlBuilder.addQueryParameter("status[1]", "on")
|
||||
is StatusCompletedFilter -> if (filter.state) urlBuilder.addQueryParameter("status[2]", "on")
|
||||
is UncensoredFilter -> if (filter.state) urlBuilder.addQueryParameter("uncensored", "on")
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(urlBuilder.build().toString(), headers)
|
||||
}
|
||||
|
||||
override fun searchAnimeParse(response: Response): AnimesPage {
|
||||
|
@ -150,7 +133,7 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
}
|
||||
|
||||
val document = response.asJsoup()
|
||||
val animes = document.select("div.columns main section.section div.grid.hentais article.hentai").map {
|
||||
val animeList = document.select("div.columns main section.section div.grid.hentais article.hentai").map {
|
||||
SAnime.create().apply {
|
||||
title = it.select("header.h-header h2").text()
|
||||
setUrlWithoutDomain(it.select("a").attr("abs:href"))
|
||||
|
@ -160,7 +143,7 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
|
||||
val hasNextPage = document.select("a.btn.rnd.npd.fa-arrow-right").any()
|
||||
|
||||
return AnimesPage(animes, hasNextPage)
|
||||
return AnimesPage(animeList, hasNextPage)
|
||||
}
|
||||
|
||||
override fun animeDetailsParse(response: Response): SAnime {
|
||||
|
@ -206,6 +189,7 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
||||
private val burstCloudExtractor by lazy { BurstCloudExtractor(client) }
|
||||
private val streamHideVidExtractor by lazy { StreamHideVidExtractor(client) }
|
||||
private val sendvidExtractor by lazy { SendvidExtractor(client, headers) }
|
||||
|
||||
override fun videoListParse(response: Response): List<Video> {
|
||||
val document = response.asJsoup()
|
||||
|
@ -227,6 +211,7 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
"mp4upload" -> mp4uploadExtractor.videosFromUrl(urlServer, headers = headers)
|
||||
"burst" -> burstCloudExtractor.videoFromUrl(urlServer, headers = headers)
|
||||
"vidhide", "streamhide", "guccihide", "streamvid" -> streamHideVidExtractor.videosFromUrl(urlServer)
|
||||
"sendvid" -> sendvidExtractor.videosFromUrl(urlServer)
|
||||
else -> emptyList()
|
||||
}
|
||||
}
|
||||
|
@ -279,20 +264,20 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
Pair("Casadas", "casadas"),
|
||||
Pair("Chikan", "chikan"),
|
||||
Pair("Ecchi", "ecchi"),
|
||||
Pair("Escolares", "escolares"),
|
||||
Pair("Enfermeras", "enfermeras"),
|
||||
Pair("Escolares", "escolares"),
|
||||
Pair("Futanari", "futanari"),
|
||||
Pair("Harem", "Harem"),
|
||||
Pair("Gore", "gore"),
|
||||
Pair("Hardcore", "hardcore"),
|
||||
Pair("Harem", "harem"),
|
||||
Pair("Incesto", "incesto"),
|
||||
Pair("Juegos Sexuales", "juegos-sexuales"),
|
||||
Pair("Maids", "maids"),
|
||||
Pair("Milfs", "milfs"),
|
||||
Pair("Maids", "maids"),
|
||||
Pair("Netorare", "netorare"),
|
||||
Pair("Ninfomania", "ninfomania"),
|
||||
Pair("Ninjas", "ninjas"),
|
||||
Pair("Orgia", "orgia"),
|
||||
Pair("Orgias", "orgias"),
|
||||
Pair("Romance", "romance"),
|
||||
Pair("Shota", "shota"),
|
||||
Pair("Softcore", "softcore"),
|
||||
|
@ -303,9 +288,15 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||
Pair("Vanilla", "vanilla"),
|
||||
Pair("Violacion", "violacion"),
|
||||
Pair("Virgenes", "virgenes"),
|
||||
Pair("Yaoi", "Yaoi"),
|
||||
Pair("Yaoi", "yaoi"),
|
||||
Pair("Yuri", "yuri"),
|
||||
Pair("Bondage", "bondage"),
|
||||
Pair("Elfas", "elfas"),
|
||||
Pair("Petit", "petit"),
|
||||
Pair("Threesome", "threesome"),
|
||||
Pair("Paizuri", "paizuri"),
|
||||
Pair("Gal", "gal"),
|
||||
Pair("Oyakodon", "oyakodon"),
|
||||
),
|
||||
)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue