Fix subanimes search and video extractor (#1308)

* Fix anime search without filters

* Fix video extractor

* Prevent timeouts

* Bump version
This commit is contained in:
Claudemirovsky
2023-02-20 18:12:19 -03:00
committed by GitHub
parent 2ff1ccf50d
commit 6303b18d24
3 changed files with 23 additions and 14 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'SubAnimes'
pkgNameSuffix = 'pt.subanimes'
extClass = '.SubAnimes'
extVersionCode = 1
extVersionCode = 2
libVersion = '13'
}

View File

@ -23,6 +23,7 @@ import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import rx.Observable
import uy.kohesive.injekt.api.get
import java.util.concurrent.TimeUnit
import kotlin.Exception
class SubAnimes : ParsedAnimeHttpSource() {
@ -36,7 +37,12 @@ class SubAnimes : ParsedAnimeHttpSource() {
override val supportsLatest = true
override val client: OkHttpClient = network.client
// Sometimes the site is slow.
override val client: OkHttpClient = network.client.newBuilder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES)
.build()
private val json = Json {
ignoreUnknownKeys = true
@ -113,12 +119,10 @@ class SubAnimes : ParsedAnimeHttpSource() {
override fun videoUrlParse(document: Document) = throw Exception("not used")
// =============================== Search ===============================
// We'll be using serialization in the search system,
// so those functions won't be used.
override fun searchAnimeFromElement(element: Element) = throw Exception("not used")
override fun searchAnimeSelector() = throw Exception("not used")
override fun searchAnimeNextPageSelector() = throw Exception("not used")
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = throw Exception("not used")
override fun searchAnimeFromElement(element: Element) = latestUpdatesFromElement(element)
override fun searchAnimeSelector() = "div.aniItem > a"
override fun searchAnimeNextPageSelector() = latestUpdatesNextPageSelector()
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList) = GET("$baseUrl/page/$page/?s=$query")
override fun getFilterList(): AnimeFilterList = SBFilters.filterList
@ -130,6 +134,10 @@ class SubAnimes : ParsedAnimeHttpSource() {
.map { searchAnimeBySlugParse(it, slug) }
} else {
val params = SBFilters.getSearchParameters(filters)
if (params == SBFilters.FilterSearchParams()) // no filters
return super.fetchSearchAnime(page, query, filters)
client.newCall(searchAnimeRequest(page, query, params))
.asObservableSuccess()
.map { searchAnimeParse(it, page) }

View File

@ -9,25 +9,26 @@ import okhttp3.OkHttpClient
class SubAnimesExtractor(private val client: OkHttpClient) {
fun videoListFromUrl(url: String, player: String, headers: Headers): List<Video> {
val iframeBody = client.newCall(GET(url)).execute().asJsoup()
val newHeaders = headers.newBuilder().set("Referer", url).build()
val playerUrl = url.replace("&p=true", "")
val iframeBody = client.newCall(GET(playerUrl)).execute().asJsoup()
val newHeaders = headers.newBuilder().set("Referer", playerUrl).build()
val script = iframeBody.selectFirst("script:containsData(addButton)").data()
return if (script.contains("vSources")) {
val sources = script.substringAfter("vSources").substringBefore(";")
sources.split("src\":").drop(1).map {
val url = it.substringAfter("\"")
val videoUrl = it.substringAfter("\"")
.substringBefore("\"")
.replace("\\", "")
.trim()
val quality = it.substringAfter("size\":").substringBefore("}")
Video(url, "$player - ${quality}p", url, headers)
Video(videoUrl, "$player - ${quality}p", videoUrl, newHeaders)
}
} else {
val url = script.substringAfter("file:")
val videoUrl = script.substringAfter("file:")
.substringAfter("'")
.substringBefore("'")
.trim()
listOf(Video(url, player, url, newHeaders))
listOf(Video(videoUrl, player, videoUrl, newHeaders))
}
}
}