Merge pull request #1 from CakesTwix/rewrite-uakino

uakino: Reworked the logic of episodes and sources
This commit is contained in:
CakesTwix 2023-02-16 10:32:58 +02:00 committed by GitHub
commit bea1c907db
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -3,7 +3,6 @@ package com.lagradost
import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.*
import com.lagradost.cloudstream3.LoadResponse.Companion.addActors import com.lagradost.cloudstream3.LoadResponse.Companion.addActors
import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer
import com.lagradost.cloudstream3.mvvm.safeApiCall
import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.M3u8Helper import com.lagradost.cloudstream3.utils.M3u8Helper
import org.jsoup.Jsoup import org.jsoup.Jsoup
@ -69,6 +68,7 @@ class UakinoProvider : MainAPI() {
} }
} }
// Detailed information
override suspend fun load(url: String): LoadResponse { override suspend fun load(url: String): LoadResponse {
val document = app.get(url).document val document = app.get(url).document
@ -98,12 +98,12 @@ class UakinoProvider : MainAPI() {
val episodes = val episodes =
app.get("$mainUrl/engine/ajax/playlists.php?news_id=$id&xfield=playlist&time=${Date().time}") app.get("$mainUrl/engine/ajax/playlists.php?news_id=$id&xfield=playlist&time=${Date().time}")
.parsedSafe<Responses>()?.response.let { .parsedSafe<Responses>()?.response.let {
Jsoup.parse(it.toString()).select("ul > li").mapNotNull { eps -> Jsoup.parse(it.toString()).select("div.playlists-videos li").mapNotNull { eps ->
val href = fixUrl(eps.attr("data-file")) // ashdi.vip/... val href = "$mainUrl/engine/ajax/playlists.php?news_id=$id&xfield=playlist&time=${Date().time}"
val name = "${eps.text().trim()} (${eps.attr("data-voice")})" // Серія 1 (Озвучення) val name = eps.text().trim() // Серія 1
if (href.isNotEmpty()) { if (href.isNotEmpty()) {
Episode( Episode(
href, "$href,$name",
name, name,
) )
} else { } else {
@ -111,7 +111,7 @@ class UakinoProvider : MainAPI() {
} }
} }
} }
newTvSeriesLoadResponse(title, url, TvType.TvSeries, episodes) { newTvSeriesLoadResponse(title, url, TvType.TvSeries, episodes.distinctBy{ it.name }) {
this.posterUrl = poster this.posterUrl = poster
this.year = year this.year = year
this.plot = description this.plot = description
@ -135,47 +135,36 @@ class UakinoProvider : MainAPI() {
} }
} }
// It works when I click to view the series
override suspend fun loadLinks( override suspend fun loadLinks(
data: String, data: String, // link, episode name
isCasting: Boolean, isCasting: Boolean,
subtitleCallback: (SubtitleFile) -> Unit, subtitleCallback: (SubtitleFile) -> Unit,
callback: (ExtractorLink) -> Unit callback: (ExtractorLink) -> Unit
): Boolean { ): Boolean {
val dataList = data.split(",")
val links = ArrayList<String>() app.get(dataList[0]) // Link
.parsedSafe<Responses>()?.response.let {
Jsoup.parse(it.toString()).select("div.playlists-videos li:contains(${dataList[1]})").mapNotNull { eps ->
val href = eps.attr("data-file") // ashdi
val dub = eps.attr("data-voice") // FanWoxUA
if (data.startsWith("https://ashdi.vip")) { // Get m3u from player script
links.add(data) app.get("https:$href", referer = "$mainUrl/").document.select("script").map { script ->
} else { if (script.data().contains("var player = new Playerjs({")) {
val iframeUrl = app.get(data).document.selectFirst("iframe#pre")?.attr("src") val m3uLink = script.data().substringAfterLast("file:\"").substringBefore("\",")
if (iframeUrl.isNullOrEmpty()) {
val id = data.split("/").last().split("-").first() // Add as source
app.get("$mainUrl/engine/ajax/playlists.php?news_id=$id&xfield=playlist&time=${Date().time}") M3u8Helper.generateM3u8(
.parsedSafe<Responses>()?.response.let { source = dub,
Jsoup.parse(it.toString()).select("ul > li").mapNotNull { mirror -> streamUrl = m3uLink,
links.add(fixUrl(mirror.attr("data-file"))) referer = "https://ashdi.vip/"
).forEach(callback)
} }
} }
} else {
links.add(iframeUrl)
}
}
links.apmap { link ->
safeApiCall {
app.get(link, referer = "$mainUrl/").document.select("script").map { script ->
if (script.data().contains("var player = new Playerjs({")) {
val m3uLink =
script.data().substringAfterLast("file:\"").substringBefore("\",")
M3u8Helper.generateM3u8(
source = this.name,
streamUrl = m3uLink,
referer = "https://ashdi.vip/"
).forEach(callback)
}
} }
} }
}
return true return true
} }