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:
committed by
GitHub
parent
a27498bbc5
commit
4deaaa7f3e
@ -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'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
Reference in New Issue
Block a user