HLA fixes

Closes #372
Closes #371
This commit is contained in:
imper1aldev 2025-01-10 18:01:50 -06:00
parent 8e9ef9d6e2
commit d721d181c0
2 changed files with 28 additions and 36 deletions

View file

@ -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'))
}

View file

@ -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"),
),
)