added search by text option [Vostfree] (#363)

* New source [HentaiLA]

* Fix ok.ru server and add Mytv extractor

* Update version [Vostfree]

* added search by text option [VostFree]
This commit is contained in:
Diego Peña Y Lillo
2022-02-26 00:42:14 -03:00
committed by GitHub
parent a27498bbc5
commit 4deaaa7f3e
2 changed files with 57 additions and 19 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'Vostfree' extName = 'Vostfree'
pkgNameSuffix = 'fr.vostfree' pkgNameSuffix = 'fr.vostfree'
extClass = '.Vostfree' extClass = '.Vostfree'
extVersionCode = 2 extVersionCode = 3
libVersion = '12' libVersion = '12'
} }

View File

@ -12,20 +12,26 @@ import eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors.VudeoExtractor
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilter
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
import eu.kanade.tachiyomi.animesource.model.AnimesPage
import eu.kanade.tachiyomi.animesource.model.SAnime import eu.kanade.tachiyomi.animesource.model.SAnime
import eu.kanade.tachiyomi.animesource.model.SEpisode import eu.kanade.tachiyomi.animesource.model.SEpisode
import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.asJsoup
import kotlinx.serialization.json.Json
import okhttp3.FormBody
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
import org.jsoup.Connection
import org.jsoup.Jsoup import org.jsoup.Jsoup
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
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 java.lang.Exception import java.lang.Exception
class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() { class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
@ -36,6 +42,8 @@ class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val lang = "fr" override val lang = "fr"
private val json: Json by injectLazy()
override val supportsLatest = false override val supportsLatest = false
override val client: OkHttpClient = network.cloudflareClient override val client: OkHttpClient = network.cloudflareClient
@ -52,10 +60,10 @@ class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
Log.i("bruh", "${element.baseUri()}") Log.i("bruh", "${element.baseUri()}")
val anime = SAnime.create() val anime = SAnime.create()
anime.setUrlWithoutDomain( anime.setUrlWithoutDomain(
element.select("div.play a").attr("href") element.select("div.movie-poster div.play a").attr("href")
) )
anime.title = element.select("div.info.hidden div.title").text() anime.title = element.select("div.movie-poster div.info.hidden div.title").text()
anime.thumbnail_url = baseUrl + element.select("span.image img").attr("src") anime.thumbnail_url = baseUrl + element.select("div.movie-poster span.image img").attr("src")
return anime return anime
} }
@ -163,30 +171,60 @@ class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
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 typeFilter = filterList.find { it is TypeFilter } as TypeFilter
val genreFilter = filterList.find { it is GenreFilter } as GenreFilter val genreFilter = filterList.find { it is GenreFilter } as GenreFilter
val typeFilter = filterList.find { it is TypeFilter } as TypeFilter
return if (typeFilter.state != 0) { val formData = FormBody.Builder()
GET("https://vostfree.tv/${typeFilter.toUriPart()}/page/$page/") .addEncoded("do", "search")
} else { .addEncoded("subaction", "search")
if (query.isNotBlank()) { .addEncoded("search_start", "0")
throw Exception("Recherche non prise en charge") .addEncoded("full_search", "0")
} else { .addEncoded("result_from", "1")
if (genreFilter.state != 0) { .addEncoded("story", "$query")
GET("https://vostfree.tv/genre/${genreFilter.toUriPart()}/page/$page/") .build()
} else {
GET("https://vostfree.tv/films-vf-vostfr/page/$page/") val test = Jsoup.connect("https://vostfree.tv/index.php?do=search").method(Connection.Method.POST).data("do", "search").data("subaction", "search").data("search_start", "0").data("full_search", "0").data("result_from", "1").data("story", "$query").get()
}
} return when {
query.isNotBlank() && test.select("div.search-result").toString() != "" -> POST("https://vostfree.tv/index.php?do=search", headers, formData)
genreFilter.state != 0 -> GET("$baseUrl/genre/${genreFilter.toUriPart()}/page/$page/")
typeFilter.state != 0 -> GET("https://vostfree.tv/${typeFilter.toUriPart()}/page/$page/")
else -> GET("https://vostfree.tv/animes-vostfr/page/$page/")
} }
} }
override fun searchAnimeParse(response: Response): AnimesPage {
val document = response.asJsoup()
val animeList = document.select("div.search-result")
val animeList2 = document.select("div.movie-poster")
val animes = animeList.map {
searchAnimeFromElement(it)
} + animeList2.map {
searchAnimeFromElement(it)
}
return AnimesPage(animes, false)
}
override fun searchAnimeFromElement(element: Element): SAnime { override fun searchAnimeFromElement(element: Element): SAnime {
return popularAnimeFromElement(element) return when {
element.select("div.search-result").toString() != "" -> searchPopularAnimeFromElement(element)
else -> popularAnimeFromElement(element)
}
}
private fun searchPopularAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create()
anime.setUrlWithoutDomain(
element.select("div.search-result div.info div.title a").attr("href")
)
anime.title = element.select("div.search-result div.info div.title a").text()
anime.thumbnail_url = baseUrl + element.select("div.search-result span.image img").attr("src")
return anime
} }
override fun searchAnimeNextPageSelector(): String = popularAnimeNextPageSelector() override fun searchAnimeNextPageSelector(): String = popularAnimeNextPageSelector()
override fun searchAnimeSelector(): String = popularAnimeSelector() override fun searchAnimeSelector(): String = "div#dle-content"
override fun animeDetailsParse(document: Document): SAnime { override fun animeDetailsParse(document: Document): SAnime {
val anime = SAnime.create() val anime = SAnime.create()