parent
8e9ef9d6e2
commit
d721d181c0
2 changed files with 28 additions and 36 deletions
|
@ -1,7 +1,7 @@
|
||||||
ext {
|
ext {
|
||||||
extName = 'HentaiLA'
|
extName = 'HentaiLA'
|
||||||
extClass = '.Hentaila'
|
extClass = '.Hentaila'
|
||||||
extVersionCode = 27
|
extVersionCode = 28
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,4 +14,5 @@ dependencies {
|
||||||
implementation(project(':lib:voe-extractor'))
|
implementation(project(':lib:voe-extractor'))
|
||||||
implementation(project(':lib:yourupload-extractor'))
|
implementation(project(':lib:yourupload-extractor'))
|
||||||
implementation(project(':lib:streamhidevid-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.animesource.online.AnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.burstcloudextractor.BurstCloudExtractor
|
import eu.kanade.tachiyomi.lib.burstcloudextractor.BurstCloudExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
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.streamhidevidextractor.StreamHideVidExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
|
import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
|
@ -30,7 +31,6 @@ import okhttp3.Response
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
import java.io.IOException
|
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
|
@ -65,6 +65,7 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
"Mp4Upload",
|
"Mp4Upload",
|
||||||
"BurstCloud",
|
"BurstCloud",
|
||||||
"StreamHideVid",
|
"StreamHideVid",
|
||||||
|
"Sendvid",
|
||||||
)
|
)
|
||||||
|
|
||||||
private val DATE_FORMATTER by lazy {
|
private val DATE_FORMATTER by lazy {
|
||||||
|
@ -94,45 +95,27 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
|
|
||||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||||
val filterList = if (filters.isEmpty()) getFilterList() else filters
|
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.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())
|
return POST("$baseUrl/api/search", headers, FormBody.Builder().add("value", query).build())
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = "$baseUrl/directorio?p=$page".toHttpUrl().newBuilder()
|
val urlBuilder = "$baseUrl/${if (genreFilter?.state != 0) "genero/${genreFilter?.toUriPart()}" else "directorio?p=$page"}"
|
||||||
|
.toHttpUrl().newBuilder()
|
||||||
if (genreFilter.state != 0) {
|
|
||||||
url = "$baseUrl/genero/${genreFilter.toUriPart()}?p=$page".toHttpUrl().newBuilder()
|
|
||||||
}
|
|
||||||
|
|
||||||
filterList.forEach { filter ->
|
filterList.forEach { filter ->
|
||||||
when (filter) {
|
when (filter) {
|
||||||
is OrderFilter -> {
|
is OrderFilter -> urlBuilder.addQueryParameter("filter", filter.toUriPart())
|
||||||
url.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 StatusOngoingFilter -> {
|
is UncensoredFilter -> if (filter.state) urlBuilder.addQueryParameter("uncensored", "on")
|
||||||
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")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return GET(url.build().toString(), headers)
|
return GET(urlBuilder.build().toString(), headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchAnimeParse(response: Response): AnimesPage {
|
override fun searchAnimeParse(response: Response): AnimesPage {
|
||||||
|
@ -150,7 +133,7 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
}
|
}
|
||||||
|
|
||||||
val document = response.asJsoup()
|
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 {
|
SAnime.create().apply {
|
||||||
title = it.select("header.h-header h2").text()
|
title = it.select("header.h-header h2").text()
|
||||||
setUrlWithoutDomain(it.select("a").attr("abs:href"))
|
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()
|
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 {
|
override fun animeDetailsParse(response: Response): SAnime {
|
||||||
|
@ -206,6 +189,7 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
||||||
private val burstCloudExtractor by lazy { BurstCloudExtractor(client) }
|
private val burstCloudExtractor by lazy { BurstCloudExtractor(client) }
|
||||||
private val streamHideVidExtractor by lazy { StreamHideVidExtractor(client) }
|
private val streamHideVidExtractor by lazy { StreamHideVidExtractor(client) }
|
||||||
|
private val sendvidExtractor by lazy { SendvidExtractor(client, headers) }
|
||||||
|
|
||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
|
@ -227,6 +211,7 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
"mp4upload" -> mp4uploadExtractor.videosFromUrl(urlServer, headers = headers)
|
"mp4upload" -> mp4uploadExtractor.videosFromUrl(urlServer, headers = headers)
|
||||||
"burst" -> burstCloudExtractor.videoFromUrl(urlServer, headers = headers)
|
"burst" -> burstCloudExtractor.videoFromUrl(urlServer, headers = headers)
|
||||||
"vidhide", "streamhide", "guccihide", "streamvid" -> streamHideVidExtractor.videosFromUrl(urlServer)
|
"vidhide", "streamhide", "guccihide", "streamvid" -> streamHideVidExtractor.videosFromUrl(urlServer)
|
||||||
|
"sendvid" -> sendvidExtractor.videosFromUrl(urlServer)
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -279,20 +264,20 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
Pair("Casadas", "casadas"),
|
Pair("Casadas", "casadas"),
|
||||||
Pair("Chikan", "chikan"),
|
Pair("Chikan", "chikan"),
|
||||||
Pair("Ecchi", "ecchi"),
|
Pair("Ecchi", "ecchi"),
|
||||||
Pair("Escolares", "escolares"),
|
|
||||||
Pair("Enfermeras", "enfermeras"),
|
Pair("Enfermeras", "enfermeras"),
|
||||||
|
Pair("Escolares", "escolares"),
|
||||||
Pair("Futanari", "futanari"),
|
Pair("Futanari", "futanari"),
|
||||||
Pair("Harem", "Harem"),
|
|
||||||
Pair("Gore", "gore"),
|
Pair("Gore", "gore"),
|
||||||
Pair("Hardcore", "hardcore"),
|
Pair("Hardcore", "hardcore"),
|
||||||
|
Pair("Harem", "harem"),
|
||||||
Pair("Incesto", "incesto"),
|
Pair("Incesto", "incesto"),
|
||||||
Pair("Juegos Sexuales", "juegos-sexuales"),
|
Pair("Juegos Sexuales", "juegos-sexuales"),
|
||||||
Pair("Maids", "maids"),
|
|
||||||
Pair("Milfs", "milfs"),
|
Pair("Milfs", "milfs"),
|
||||||
|
Pair("Maids", "maids"),
|
||||||
Pair("Netorare", "netorare"),
|
Pair("Netorare", "netorare"),
|
||||||
Pair("Ninfomania", "ninfomania"),
|
Pair("Ninfomania", "ninfomania"),
|
||||||
Pair("Ninjas", "ninjas"),
|
Pair("Ninjas", "ninjas"),
|
||||||
Pair("Orgia", "orgia"),
|
Pair("Orgias", "orgias"),
|
||||||
Pair("Romance", "romance"),
|
Pair("Romance", "romance"),
|
||||||
Pair("Shota", "shota"),
|
Pair("Shota", "shota"),
|
||||||
Pair("Softcore", "softcore"),
|
Pair("Softcore", "softcore"),
|
||||||
|
@ -303,9 +288,15 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||||
Pair("Vanilla", "vanilla"),
|
Pair("Vanilla", "vanilla"),
|
||||||
Pair("Violacion", "violacion"),
|
Pair("Violacion", "violacion"),
|
||||||
Pair("Virgenes", "virgenes"),
|
Pair("Virgenes", "virgenes"),
|
||||||
Pair("Yaoi", "Yaoi"),
|
Pair("Yaoi", "yaoi"),
|
||||||
Pair("Yuri", "yuri"),
|
Pair("Yuri", "yuri"),
|
||||||
Pair("Bondage", "bondage"),
|
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