fix(all/lmanime): Fix video extractor (#2397)
This commit is contained in:
@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.lib.dailymotionextractor.DailymotionExtractor
|
import eu.kanade.tachiyomi.lib.dailymotionextractor.DailymotionExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||||
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
|
|
||||||
@ -20,7 +21,7 @@ class LMAnime : AnimeStream(
|
|||||||
override val prefQualityEntries = prefQualityValues
|
override val prefQualityEntries = prefQualityValues
|
||||||
|
|
||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val items = response.asJsoup().select(videoListSelector())
|
val items = response.use { it.asJsoup() }.select(videoListSelector())
|
||||||
val allowed = preferences.getStringSet(PREF_ALLOWED_LANGS_KEY, PREF_ALLOWED_LANGS_DEFAULT)!!
|
val allowed = preferences.getStringSet(PREF_ALLOWED_LANGS_KEY, PREF_ALLOWED_LANGS_DEFAULT)!!
|
||||||
return items
|
return items
|
||||||
.filter { element ->
|
.filter { element ->
|
||||||
@ -30,16 +31,29 @@ class LMAnime : AnimeStream(
|
|||||||
val language = it.text().substringBefore(" ")
|
val language = it.text().substringBefore(" ")
|
||||||
val url = getHosterUrl(it)
|
val url = getHosterUrl(it)
|
||||||
getVideoList(url, language)
|
getVideoList(url, language)
|
||||||
}.flatten()
|
}.flatten().ifEmpty { throw Exception("Empty video list!") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getHosterUrl(encodedData: String) =
|
||||||
|
client.newCall(GET(encodedData, headers)).execute()
|
||||||
|
.use { it.asJsoup() }
|
||||||
|
.selectFirst("iframe[src~=.]")!!
|
||||||
|
.attr("src")
|
||||||
|
.let { // sometimes the url dont specify its protocol
|
||||||
|
when {
|
||||||
|
it.startsWith("http") -> it
|
||||||
|
else -> "https:$it"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val okruExtractor by lazy { OkruExtractor(client) }
|
||||||
|
private val dailyExtractor by lazy { DailymotionExtractor(client, headers) }
|
||||||
|
|
||||||
override fun getVideoList(url: String, name: String): List<Video> {
|
override fun getVideoList(url: String, name: String): List<Video> {
|
||||||
val prefix = "$name -"
|
val prefix = "$name -"
|
||||||
return when {
|
return when {
|
||||||
"ok.ru" in url ->
|
"ok.ru" in url -> okruExtractor.videosFromUrl(url, prefix)
|
||||||
OkruExtractor(client).videosFromUrl(url, prefix)
|
"dailymotion.com" in url -> dailyExtractor.videosFromUrl(url, "Dailymotion ($name)")
|
||||||
"dailymotion.com" in url ->
|
|
||||||
DailymotionExtractor(client, headers).videosFromUrl(url, "Dailymotion ($name)")
|
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -48,7 +62,8 @@ class LMAnime : AnimeStream(
|
|||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
super.setupPreferenceScreen(screen) // Quality preferences
|
super.setupPreferenceScreen(screen) // Quality preferences
|
||||||
val langPref = ListPreference(screen.context).apply {
|
|
||||||
|
ListPreference(screen.context).apply {
|
||||||
key = PREF_LANG_KEY
|
key = PREF_LANG_KEY
|
||||||
title = PREF_LANG_TITLE
|
title = PREF_LANG_TITLE
|
||||||
entries = PREF_LANG_ENTRIES
|
entries = PREF_LANG_ENTRIES
|
||||||
@ -61,9 +76,9 @@ class LMAnime : AnimeStream(
|
|||||||
val entry = entryValues[index] as String
|
val entry = entryValues[index] as String
|
||||||
preferences.edit().putString(key, entry).commit()
|
preferences.edit().putString(key, entry).commit()
|
||||||
}
|
}
|
||||||
}
|
}.also(screen::addPreference)
|
||||||
|
|
||||||
val allowedPref = MultiSelectListPreference(screen.context).apply {
|
MultiSelectListPreference(screen.context).apply {
|
||||||
key = PREF_ALLOWED_LANGS_KEY
|
key = PREF_ALLOWED_LANGS_KEY
|
||||||
title = PREF_ALLOWED_LANGS_TITLE
|
title = PREF_ALLOWED_LANGS_TITLE
|
||||||
entries = PREF_ALLOWED_LANGS_ENTRIES
|
entries = PREF_ALLOWED_LANGS_ENTRIES
|
||||||
@ -73,10 +88,7 @@ class LMAnime : AnimeStream(
|
|||||||
setOnPreferenceChangeListener { _, newValue ->
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
preferences.edit().putStringSet(key, newValue as Set<String>).commit()
|
preferences.edit().putStringSet(key, newValue as Set<String>).commit()
|
||||||
}
|
}
|
||||||
}
|
}.also(screen::addPreference)
|
||||||
|
|
||||||
screen.addPreference(langPref)
|
|
||||||
screen.addPreference(allowedPref)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================= Utilities ==============================
|
// ============================= Utilities ==============================
|
||||||
|
@ -21,7 +21,7 @@ class AnimeStreamGenerator : ThemeSourceGenerator {
|
|||||||
SingleLang("desu-online", "https://desu-online.pl", "pl", className = "DesuOnline", isNsfw = false, overrideVersionCode = 3),
|
SingleLang("desu-online", "https://desu-online.pl", "pl", className = "DesuOnline", isNsfw = false, overrideVersionCode = 3),
|
||||||
SingleLang("DonghuaStream", "https://donghuastream.co.in", "en", isNsfw = false, overrideVersionCode = 2),
|
SingleLang("DonghuaStream", "https://donghuastream.co.in", "en", isNsfw = false, overrideVersionCode = 2),
|
||||||
SingleLang("Hstream", "https://hstream.moe", "en", isNsfw = true, overrideVersionCode = 3),
|
SingleLang("Hstream", "https://hstream.moe", "en", isNsfw = true, overrideVersionCode = 3),
|
||||||
SingleLang("LMAnime", "https://lmanime.com", "all", isNsfw = false, overrideVersionCode = 3),
|
SingleLang("LMAnime", "https://lmanime.com", "all", isNsfw = false, overrideVersionCode = 4),
|
||||||
SingleLang("LuciferDonghua", "https://luciferdonghua.in", "en", isNsfw = false, overrideVersionCode = 2),
|
SingleLang("LuciferDonghua", "https://luciferdonghua.in", "en", isNsfw = false, overrideVersionCode = 2),
|
||||||
SingleLang("MiniOppai", "https://minioppai.org", "id", isNsfw = true, overrideVersionCode = 2),
|
SingleLang("MiniOppai", "https://minioppai.org", "id", isNsfw = true, overrideVersionCode = 2),
|
||||||
SingleLang("RineCloud", "https://rine.cloud", "pt-BR", isNsfw = false, overrideVersionCode = 3),
|
SingleLang("RineCloud", "https://rine.cloud", "pt-BR", isNsfw = false, overrideVersionCode = 3),
|
||||||
|
Reference in New Issue
Block a user