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

View file

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