Fix subanimes search and video extractor (#1308)
* Fix anime search without filters * Fix video extractor * Prevent timeouts * Bump version
This commit is contained in:
@ -6,7 +6,7 @@ ext {
|
||||
extName = 'SubAnimes'
|
||||
pkgNameSuffix = 'pt.subanimes'
|
||||
extClass = '.SubAnimes'
|
||||
extVersionCode = 1
|
||||
extVersionCode = 2
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
|
@ -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) }
|
||||
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user