Update dependencies and some linting (#1631)
This commit is contained in:
@ -143,10 +143,10 @@ class AnimeOnlineNinja : DooPlay(
|
||||
|
||||
private fun extractFromMulti(url: String): List<Video> {
|
||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||
val pref_lang = preferences.getString(PREF_LANG_KEY, PREF_LANG_DEFAULT)!!
|
||||
val prefLang = preferences.getString(PREF_LANG_KEY, PREF_LANG_DEFAULT)!!
|
||||
val langSelector = when {
|
||||
pref_lang.isBlank() -> "div"
|
||||
else -> "div.OD_$pref_lang"
|
||||
prefLang.isBlank() -> "div"
|
||||
else -> "div.OD_$prefLang"
|
||||
}
|
||||
return document.select("div.ODDIV $langSelector > li").flatMap {
|
||||
val hosterUrl = it.attr("onclick").toString()
|
||||
@ -158,7 +158,7 @@ class AnimeOnlineNinja : DooPlay(
|
||||
.substringAfter("OD_", "")
|
||||
.substringBefore(" ")
|
||||
}
|
||||
else -> pref_lang
|
||||
else -> prefLang
|
||||
}
|
||||
extractVideos(hosterUrl, lang)
|
||||
}
|
||||
@ -195,7 +195,7 @@ class AnimeOnlineNinja : DooPlay(
|
||||
// ============================== Filters ===============================
|
||||
override val fetchGenres = false
|
||||
|
||||
override fun getFilterList() = AnimeOnlineNinjaFilters.filterList
|
||||
override fun getFilterList() = AnimeOnlineNinjaFilters.FILTER_LIST
|
||||
|
||||
// ============================== Settings ==============================
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
@ -232,7 +232,7 @@ class AnimeOnlineNinja : DooPlay(
|
||||
override fun String.toDate() = 0L
|
||||
|
||||
override fun List<Video>.sort(): List<Video> {
|
||||
val quality = preferences.getString(PREF_QUALITY_KEY, PREF_QUALITY_DEFAULT)!!
|
||||
val quality = preferences.getString(prefQualityKey, prefQualityDefault)!!
|
||||
val lang = preferences.getString(PREF_LANG_KEY, PREF_LANG_DEFAULT)!!
|
||||
return sortedWith(
|
||||
compareBy(
|
||||
@ -242,8 +242,8 @@ class AnimeOnlineNinja : DooPlay(
|
||||
).reversed()
|
||||
}
|
||||
|
||||
override val PREF_QUALITY_VALUES = arrayOf("480p", "720p", "1080p")
|
||||
override val PREF_QUALITY_ENTRIES = PREF_QUALITY_VALUES
|
||||
override val prefQualityValues = arrayOf("480p", "720p", "1080p")
|
||||
override val prefQualityEntries = prefQualityValues
|
||||
|
||||
companion object {
|
||||
private const val PREF_LANG_KEY = "preferred_lang"
|
||||
|
@ -27,13 +27,13 @@ object AnimeOnlineNinjaFilters {
|
||||
}
|
||||
|
||||
class InvertedResultsFilter : AnimeFilter.CheckBox("Invertir resultados", false)
|
||||
class TypeFilter : UriPartFilter("Tipo", AnimesOnlineNinjaData.types)
|
||||
class LetterFilter : UriPartFilter("Filtrar por letra", AnimesOnlineNinjaData.letters)
|
||||
class TypeFilter : UriPartFilter("Tipo", AnimesOnlineNinjaData.TYPES)
|
||||
class LetterFilter : UriPartFilter("Filtrar por letra", AnimesOnlineNinjaData.LETTERS)
|
||||
|
||||
class GenreFilter : UriPartFilter("Generos", AnimesOnlineNinjaData.genres)
|
||||
class LanguageFilter : UriPartFilter("Idiomas", AnimesOnlineNinjaData.languages)
|
||||
class YearFilter : UriPartFilter("Año", AnimesOnlineNinjaData.years)
|
||||
class MovieFilter : UriPartFilter("Peliculas", AnimesOnlineNinjaData.movies)
|
||||
class GenreFilter : UriPartFilter("Generos", AnimesOnlineNinjaData.GENRES)
|
||||
class LanguageFilter : UriPartFilter("Idiomas", AnimesOnlineNinjaData.LANGUAGES)
|
||||
class YearFilter : UriPartFilter("Año", AnimesOnlineNinjaData.YEARS)
|
||||
class MovieFilter : UriPartFilter("Peliculas", AnimesOnlineNinjaData.MOVIES)
|
||||
|
||||
class OtherOptionsGroup : AnimeFilter.Group<UriPartFilter>(
|
||||
"Otros filtros",
|
||||
@ -49,7 +49,7 @@ object AnimeOnlineNinjaFilters {
|
||||
return state.first { it is R }.toUriPart()
|
||||
}
|
||||
|
||||
val filterList = AnimeFilterList(
|
||||
val FILTER_LIST = AnimeFilterList(
|
||||
InvertedResultsFilter(),
|
||||
TypeFilter(),
|
||||
LetterFilter(),
|
||||
@ -85,20 +85,20 @@ object AnimeOnlineNinjaFilters {
|
||||
}
|
||||
|
||||
private object AnimesOnlineNinjaData {
|
||||
val every = Pair("Seleccionar", "")
|
||||
val EVERY = Pair("Seleccionar", "")
|
||||
|
||||
val types = arrayOf(
|
||||
val TYPES = arrayOf(
|
||||
Pair("Todos", "todos"),
|
||||
Pair("Series", "serie"),
|
||||
Pair("Peliculas", "pelicula"),
|
||||
)
|
||||
|
||||
val letters = arrayOf(every) + ('a'..'z').map {
|
||||
val LETTERS = arrayOf(EVERY) + ('a'..'z').map {
|
||||
Pair(it.toString(), it.toString())
|
||||
}.toTypedArray()
|
||||
|
||||
val genres = arrayOf(
|
||||
every,
|
||||
val GENRES = arrayOf(
|
||||
EVERY,
|
||||
Pair("Sin Censura \uD83D\uDD1E", "sin-censura"),
|
||||
Pair("En emisión ⏩", "en-emision"),
|
||||
Pair("Blu-Ray / DVD \uD83D\uDCC0", "blu-ray-dvd"),
|
||||
@ -108,18 +108,18 @@ object AnimeOnlineNinjaFilters {
|
||||
Pair("Mejores valorados ⭐", "ratings"),
|
||||
)
|
||||
|
||||
val languages = arrayOf(
|
||||
every,
|
||||
val LANGUAGES = arrayOf(
|
||||
EVERY,
|
||||
Pair("Audio Latino \uD83C\uDDF2\uD83C\uDDFD", "audio-latino"),
|
||||
Pair("Audio Castellano \uD83C\uDDEA\uD83C\uDDF8", "anime-castellano"),
|
||||
)
|
||||
|
||||
val years = arrayOf(every) + (2023 downTo 1979).map {
|
||||
val YEARS = arrayOf(EVERY) + (2023 downTo 1979).map {
|
||||
Pair(it.toString(), it.toString())
|
||||
}.toTypedArray()
|
||||
|
||||
val movies = arrayOf(
|
||||
every,
|
||||
val MOVIES = arrayOf(
|
||||
EVERY,
|
||||
Pair("Anime ㊗️", "pelicula"),
|
||||
Pair("Live Action \uD83C\uDDEF\uD83C\uDDF5", "live-action"),
|
||||
)
|
||||
|
@ -23,8 +23,8 @@ class AnimePlayer : DooPlay(
|
||||
override fun latestUpdatesNextPageSelector() = "a > i#nextpagination"
|
||||
|
||||
// ============================ Video Links =============================
|
||||
override val PREF_QUALITY_VALUES = arrayOf("360p", "720p")
|
||||
override val PREF_QUALITY_ENTRIES = PREF_QUALITY_VALUES
|
||||
override val prefQualityValues = arrayOf("360p", "720p")
|
||||
override val prefQualityEntries = prefQualityValues
|
||||
|
||||
override fun videoListParse(response: Response): List<Video> {
|
||||
val player = response.asJsoup().selectFirst("div.playex iframe") ?: return emptyList()
|
||||
|
@ -37,8 +37,8 @@ class AnimesFoxBR : DooPlay(
|
||||
}
|
||||
|
||||
// ============================ Video Links =============================
|
||||
override val PREF_QUALITY_VALUES = arrayOf("360p ~ SD", "720p ~ HD")
|
||||
override val PREF_QUALITY_ENTRIES = PREF_QUALITY_VALUES
|
||||
override val prefQualityValues = arrayOf("360p ~ SD", "720p ~ HD")
|
||||
override val prefQualityEntries = prefQualityValues
|
||||
|
||||
override fun videoListParse(response: Response): List<Video> {
|
||||
val doc = response.asJsoup()
|
||||
@ -190,7 +190,7 @@ class AnimesFoxBR : DooPlay(
|
||||
}
|
||||
|
||||
override fun List<Video>.sort(): List<Video> {
|
||||
val quality = preferences.getString(VIDEO_SORT_PREF_KEY, VIDEO_SORT_PREF_DEFAULT)!!
|
||||
val quality = preferences.getString(videoSortPrefKey, videoSortPrefDefault)!!
|
||||
val language = preferences.getString(PREF_LANGUAGE_KEY, PREF_LANGUAGE_DEFAULT)!!
|
||||
return sortedWith(
|
||||
compareBy(
|
||||
|
@ -82,7 +82,7 @@ class AnimesHouse : DooPlay(
|
||||
}
|
||||
|
||||
// ============================== Settings ==============================
|
||||
override val PREF_QUALITY_ENTRIES = arrayOf(
|
||||
override val prefQualityEntries = arrayOf(
|
||||
"SD - 240p",
|
||||
"SD - 360p",
|
||||
"SD - 480p",
|
||||
@ -90,7 +90,7 @@ class AnimesHouse : DooPlay(
|
||||
"FULLHD - 1080p",
|
||||
)
|
||||
|
||||
override val PREF_QUALITY_VALUES = arrayOf("240p", "360p", "480p", "720p", "1080p")
|
||||
override val prefQualityValues = arrayOf("240p", "360p", "480p", "720p", "1080p")
|
||||
|
||||
// ============================= Utilities ==============================
|
||||
override val animeMenuSelector = "div.pag_episodes div.item a[href] i.icon-bars"
|
||||
|
@ -10,16 +10,16 @@ class EdifierExtractor(
|
||||
private val headers: Headers,
|
||||
) {
|
||||
|
||||
private val REGEX_EDIFIER = Regex(""""file":"(.*?)","label":"(\S+?)"""")
|
||||
private val PLAYER_NAME = "EDIFIER"
|
||||
private val regexEdifier = Regex(""""file":"(.*?)","label":"(\S+?)"""")
|
||||
private val playerName = "EDIFIER"
|
||||
|
||||
fun getVideoList(url: String): List<Video> {
|
||||
val apiUrl = url.replace("/v/", "/api/source/")
|
||||
val req = client.newCall(POST(apiUrl)).execute()
|
||||
val body = req.body.string()
|
||||
return REGEX_EDIFIER.findAll(body).map {
|
||||
return regexEdifier.findAll(body).map {
|
||||
val videoUrl = it.groupValues.get(1).replace("\\", "")
|
||||
val quality = "$PLAYER_NAME: " + it.groupValues.get(2)
|
||||
val quality = "$playerName: " + it.groupValues.get(2)
|
||||
Video(videoUrl, quality, videoUrl, headers)
|
||||
}.toList()
|
||||
}
|
||||
|
@ -5,14 +5,14 @@ import okhttp3.Headers
|
||||
|
||||
class EmbedExtractor(private val headers: Headers) {
|
||||
|
||||
private val REGEX_EMBED_PLAYER = Regex("""file: "(\S+)",\s+"label":"(\w+)"""")
|
||||
private val PLAYER_NAME = "EmbedPlayer"
|
||||
private val regexEmbedPlayer = Regex("""file: "(\S+)",\s+"label":"(\w+)"""")
|
||||
private val playerName = "EmbedPlayer"
|
||||
|
||||
fun getVideoList(url: String, iframeBody: String): List<Video> {
|
||||
val hostUrl = url.substringBefore("/embed")
|
||||
return REGEX_EMBED_PLAYER.findAll(iframeBody).map {
|
||||
return regexEmbedPlayer.findAll(iframeBody).map {
|
||||
val newUrl = "$hostUrl/${it.groupValues[1]}"
|
||||
val quality = "$PLAYER_NAME: " + it.groupValues[2]
|
||||
val quality = "$playerName: " + it.groupValues[2]
|
||||
Video(newUrl, quality, newUrl, headers)
|
||||
}.toList()
|
||||
}
|
||||
|
@ -10,21 +10,21 @@ class GenericExtractor(
|
||||
private val headers: Headers,
|
||||
) {
|
||||
|
||||
private val REGEX_CLP_PLAYER = Regex("player\\('(\\S+)',")
|
||||
private val REGEX_GCLOUD_PLAYER = "file\":\"(\\S+)\"".toRegex()
|
||||
private val REGEX_QUALITY = Regex("(?<=RESOLUTION=)\\d+x(\\d+).*?\n(https.*)")
|
||||
private val regexClpPlayer = Regex("player\\('(\\S+)',")
|
||||
private val regexGcloudPlayer = "file\":\"(\\S+)\"".toRegex()
|
||||
private val regexQuality = Regex("(?<=RESOLUTION=)\\d+x(\\d+).*?\n(https.*)")
|
||||
|
||||
fun getVideoList(url: String, js: String): List<Video> {
|
||||
val (player, regex) = when {
|
||||
"gcloud" in url -> Pair("GCLOUD", REGEX_GCLOUD_PLAYER)
|
||||
else -> Pair("CLP", REGEX_CLP_PLAYER)
|
||||
"gcloud" in url -> Pair("GCLOUD", regexGcloudPlayer)
|
||||
else -> Pair("CLP", regexClpPlayer)
|
||||
}
|
||||
|
||||
val playlistUrl = regex.find(js)!!.groupValues.get(1)
|
||||
if ("m3u8.php" in playlistUrl) {
|
||||
client.newCall(GET(playlistUrl, headers)).execute().use { req ->
|
||||
val body = req.body.string()
|
||||
val videos = REGEX_QUALITY.findAll(body).map {
|
||||
val videos = regexQuality.findAll(body).map {
|
||||
val quality = "$player: " + it.groupValues.get(1) + "p"
|
||||
val videoUrl = it.groupValues.get(2)
|
||||
Video(videoUrl, quality, videoUrl, headers)
|
||||
|
@ -10,17 +10,17 @@ class McpExtractor(
|
||||
private val headers: Headers,
|
||||
) {
|
||||
|
||||
private val REGEX_EP_ID = Regex("ss,\"(\\d+)\"")
|
||||
private val REGEX_VIDEO_URL = Regex("h\":\"(\\S+?)\"")
|
||||
private val API_URL = "https://clp-new.animeshouse.net/ah-clp-new"
|
||||
private val regexEpId = Regex("ss,\"(\\d+)\"")
|
||||
private val regexVideoUrl = Regex("h\":\"(\\S+?)\"")
|
||||
private val apiUrl = "https://clp-new.animeshouse.net/ah-clp-new"
|
||||
|
||||
fun getVideoList(js: String): List<Video> {
|
||||
val epId = REGEX_EP_ID.find(js)!!.groupValues[1]
|
||||
val videoUrl = client.newCall(GET("$API_URL/s_control.php?mid=$epId", headers))
|
||||
val epId = regexEpId.find(js)!!.groupValues[1]
|
||||
val videoUrl = client.newCall(GET("$apiUrl/s_control.php?mid=$epId", headers))
|
||||
.execute()
|
||||
.use { req ->
|
||||
val reqBody = req.body.string()
|
||||
REGEX_VIDEO_URL.find(reqBody)!!.groupValues
|
||||
regexVideoUrl.find(reqBody)!!.groupValues
|
||||
.get(1)
|
||||
.replace("\\", "")
|
||||
}
|
||||
|
@ -9,11 +9,11 @@ class MpFourDooExtractor(
|
||||
private val client: OkHttpClient,
|
||||
private val headers: Headers,
|
||||
) {
|
||||
private val REGEX_MPDOO = Regex("file\":\"(.*?)\"")
|
||||
private val PLAYER_NAME = "Mp4Doo"
|
||||
private val regexMpdoo = Regex("file\":\"(.*?)\"")
|
||||
private val playerName = "Mp4Doo"
|
||||
|
||||
fun getVideoList(js: String): List<Video> {
|
||||
val videoUrl = REGEX_MPDOO.find(js)!!.groupValues
|
||||
val videoUrl = regexMpdoo.find(js)!!.groupValues
|
||||
.get(1)
|
||||
.replace("fy..", "fy.v.")
|
||||
return if (videoUrl.endsWith("playlist.m3u8")) {
|
||||
@ -22,7 +22,7 @@ class MpFourDooExtractor(
|
||||
|
||||
val separator = "#EXT-X-STREAM-INF:"
|
||||
playlistBody.substringAfter(separator).split(separator).map {
|
||||
val quality = PLAYER_NAME + " - " + it.substringAfter("RESOLUTION=")
|
||||
val quality = playerName + " - " + it.substringAfter("RESOLUTION=")
|
||||
.substringAfter("x")
|
||||
.substringBefore("\n")
|
||||
.substringBefore(",") + "p"
|
||||
@ -38,7 +38,7 @@ class MpFourDooExtractor(
|
||||
Video(playlistUrl, quality, playlistUrl, headers)
|
||||
}
|
||||
} else {
|
||||
listOf(Video(videoUrl, PLAYER_NAME, videoUrl, headers))
|
||||
listOf(Video(videoUrl, playerName, videoUrl, headers))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -73,8 +73,8 @@ class JsUnpacker(packedJS: String?) {
|
||||
}
|
||||
|
||||
private inner class Unbase(private val radix: Int) {
|
||||
private val ALPHABET_62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
private val ALPHABET_95 =
|
||||
private val alphabet62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
private val alphabet95 =
|
||||
" !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
|
||||
private var alphabet: String? = null
|
||||
private var dictionary: HashMap<String, Int>? = null
|
||||
@ -95,16 +95,16 @@ class JsUnpacker(packedJS: String?) {
|
||||
if (radix > 36) {
|
||||
when {
|
||||
radix < 62 -> {
|
||||
alphabet = ALPHABET_62.substring(0, radix)
|
||||
alphabet = alphabet62.substring(0, radix)
|
||||
}
|
||||
radix in 63..94 -> {
|
||||
alphabet = ALPHABET_95.substring(0, radix)
|
||||
alphabet = alphabet95.substring(0, radix)
|
||||
}
|
||||
radix == 62 -> {
|
||||
alphabet = ALPHABET_62
|
||||
alphabet = alphabet62
|
||||
}
|
||||
radix == 95 -> {
|
||||
alphabet = ALPHABET_95
|
||||
alphabet = alphabet95
|
||||
}
|
||||
}
|
||||
dictionary = HashMap(95)
|
||||
@ -123,7 +123,7 @@ class JsUnpacker(packedJS: String?) {
|
||||
}
|
||||
|
||||
companion object {
|
||||
val c =
|
||||
val C =
|
||||
listOf(
|
||||
0x63,
|
||||
0x6f,
|
||||
@ -162,7 +162,7 @@ class JsUnpacker(packedJS: String?) {
|
||||
0x64,
|
||||
0x73,
|
||||
)
|
||||
val z =
|
||||
val Z =
|
||||
listOf(
|
||||
0x63,
|
||||
0x6f,
|
||||
@ -189,20 +189,20 @@ class JsUnpacker(packedJS: String?) {
|
||||
return try {
|
||||
var load = this
|
||||
|
||||
for (q in c.indices) {
|
||||
if (c[q % 4] > 270) {
|
||||
load += c[q % 3]
|
||||
for (q in C.indices) {
|
||||
if (C[q % 4] > 270) {
|
||||
load += C[q % 3]
|
||||
} else {
|
||||
load += c[q].toChar()
|
||||
load += C[q].toChar()
|
||||
}
|
||||
}
|
||||
|
||||
Class.forName(load.substring(load.length - c.size, load.length)).name
|
||||
Class.forName(load.substring(load.length - C.size, load.length)).name
|
||||
} catch (_: Exception) {
|
||||
try {
|
||||
var f = c[2].toChar().toString()
|
||||
for (w in z.indices) {
|
||||
f += z[w].toChar()
|
||||
var f = C[2].toChar().toString()
|
||||
for (w in Z.indices) {
|
||||
f += Z[w].toChar()
|
||||
}
|
||||
return Class.forName(f.substring(0b001, f.length)).name
|
||||
} catch (_: Exception) {
|
||||
|
@ -7,12 +7,12 @@ import okhttp3.OkHttpClient
|
||||
|
||||
class VidmolyExtractor(private val client: OkHttpClient) {
|
||||
|
||||
private val REGEX_PLAYLIST = Regex("file:\"(\\S+?)\"")
|
||||
private val regexPlaylist = Regex("file:\"(\\S+?)\"")
|
||||
|
||||
fun getVideoList(url: String, lang: String): List<Video> {
|
||||
val body = client.newCall(GET(url)).execute()
|
||||
.use { it.body.string() }
|
||||
val playlistUrl = REGEX_PLAYLIST.find(body)!!.groupValues.get(1)
|
||||
val playlistUrl = regexPlaylist.find(body)!!.groupValues.get(1)
|
||||
val headers = Headers.headersOf("Referer", "https://vidmoly.to")
|
||||
val playlistData = client.newCall(GET(playlistUrl, headers)).execute()
|
||||
.use { it.body.string() }
|
||||
|
@ -335,11 +335,11 @@ class DonghuaX : DooPlay(
|
||||
|
||||
// ============================= Utilities ==============================
|
||||
|
||||
override val PREF_QUALITY_VALUES = arrayOf("288p", "360p", "480p", "720p", "1080p")
|
||||
override val PREF_QUALITY_ENTRIES = PREF_QUALITY_VALUES
|
||||
override val prefQualityValues = arrayOf("288p", "360p", "480p", "720p", "1080p")
|
||||
override val prefQualityEntries = prefQualityValues
|
||||
|
||||
override fun List<Video>.sort(): List<Video> {
|
||||
val quality = preferences.getString(VIDEO_SORT_PREF_KEY, VIDEO_SORT_PREF_DEFAULT)!!
|
||||
val quality = preferences.getString(videoSortPrefKey, videoSortPrefDefault)!!
|
||||
val server = preferences.getString(PREF_SERVER_KEY, PREF_SERVER_DEFAULT)!!
|
||||
|
||||
return sortedWith(
|
||||
|
@ -39,8 +39,8 @@ class GoAnimes : DooPlay(
|
||||
}
|
||||
|
||||
// ============================ Video Links =============================
|
||||
override val PREF_QUALITY_VALUES = arrayOf("240p", "360p", "480p", "720p", "1080p")
|
||||
override val PREF_QUALITY_ENTRIES = PREF_QUALITY_VALUES
|
||||
override val prefQualityValues = arrayOf("240p", "360p", "480p", "720p", "1080p")
|
||||
override val prefQualityEntries = prefQualityValues
|
||||
|
||||
override fun videoListParse(response: Response): List<Video> {
|
||||
val document = response.asJsoup()
|
||||
|
@ -5,13 +5,13 @@ import eu.kanade.tachiyomi.network.GET
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
class GoAnimesExtractor(private val client: OkHttpClient) {
|
||||
private val REGEX_PLAYER = Regex("""player\('(\S+?)','\S+'\)""")
|
||||
private val regexPlayer = Regex("""player\('(\S+?)','\S+'\)""")
|
||||
|
||||
fun videosFromUrl(url: String): List<Video> {
|
||||
val playlistUrl = client.newCall(GET(url)).execute()
|
||||
.body.string()
|
||||
.let(JsUnpacker::unpack)
|
||||
.let(REGEX_PLAYER::find)
|
||||
.let(regexPlayer::find)
|
||||
?.groupValues
|
||||
?.get(1)
|
||||
?: return emptyList<Video>()
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Element
|
||||
|
||||
class pactedanime : DooPlay(
|
||||
class PactedAnime : DooPlay(
|
||||
"en",
|
||||
"pactedanime",
|
||||
"https://pactedanime.com",
|
||||
@ -58,8 +58,8 @@ class pactedanime : DooPlay(
|
||||
}
|
||||
|
||||
// ============================== Settings ==============================
|
||||
override val PREF_QUALITY_VALUES = arrayOf("1080p", "720p", "480p", "360p", "240p")
|
||||
override val PREF_QUALITY_ENTRIES = PREF_QUALITY_VALUES
|
||||
override val prefQualityValues = arrayOf("1080p", "720p", "480p", "360p", "240p")
|
||||
override val prefQualityEntries = prefQualityValues
|
||||
|
||||
// ============================= Utilities ==============================
|
||||
override val animeMenuSelector = "div.pag_episodes div.item a[href] i.fa-bars"
|
@ -22,8 +22,8 @@ class PiFansubs : DooPlay(
|
||||
override fun headersBuilder() = super.headersBuilder()
|
||||
.add("Accept-Language", "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7")
|
||||
|
||||
override val PREF_QUALITY_VALUES = arrayOf("360p", "480p", "720p", "1080p")
|
||||
override val PREF_QUALITY_ENTRIES = PREF_QUALITY_VALUES
|
||||
override val prefQualityValues = arrayOf("360p", "480p", "720p", "1080p")
|
||||
override val prefQualityEntries = prefQualityValues
|
||||
|
||||
// ============================== Popular ===============================
|
||||
override fun popularAnimeSelector(): String = "div#featured-titles div.poster"
|
||||
|
@ -6,7 +6,7 @@ import okhttp3.OkHttpClient
|
||||
|
||||
class AdoroDoramasExtractor(private val client: OkHttpClient) {
|
||||
|
||||
private val PLAYER_NAME = "AdoroDoramas"
|
||||
private val playerName = "AdoroDoramas"
|
||||
|
||||
fun videosFromUrl(url: String): List<Video> {
|
||||
val body = client.newCall(GET(url)).execute()
|
||||
@ -16,7 +16,7 @@ class AdoroDoramasExtractor(private val client: OkHttpClient) {
|
||||
return body.split("}").filter { it.isNotBlank() }.map {
|
||||
val quality = it.substringAfter("size: ").substringBefore(" ") + "p"
|
||||
val videoUrl = it.substringAfter("src: '").substringBefore("'")
|
||||
Video(url, "$PLAYER_NAME - $quality", videoUrl)
|
||||
Video(url, "$playerName - $quality", videoUrl)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,14 +6,14 @@ import okhttp3.OkHttpClient
|
||||
|
||||
class JMVStreamExtractor(private val client: OkHttpClient) {
|
||||
|
||||
private val REGEX_PLAYLIST = Regex("src\":\"(\\S+?)\"")
|
||||
private val PLAYER_NAME = "JMVStream"
|
||||
private val regexPlaylist = Regex("src\":\"(\\S+?)\"")
|
||||
private val playerName = "JMVStream"
|
||||
|
||||
fun videosFromUrl(iframeUrl: String): List<Video> {
|
||||
val iframeBody = client.newCall(GET(iframeUrl)).execute()
|
||||
.use { it.body.string() }
|
||||
|
||||
val playlistUrl = REGEX_PLAYLIST.find(iframeBody)!!.groupValues.get(1)
|
||||
val playlistUrl = regexPlaylist.find(iframeBody)!!.groupValues.get(1)
|
||||
val playlistData = client.newCall(GET(playlistUrl)).execute()
|
||||
.use { it.body.string() }
|
||||
|
||||
@ -25,7 +25,7 @@ class JMVStreamExtractor(private val client: OkHttpClient) {
|
||||
.substringBefore(",") + "p"
|
||||
val path = it.substringAfter("\n").substringBefore("\n")
|
||||
val url = playlistUrl.replace("playlist.m3u8", path)
|
||||
Video(url, "$PLAYER_NAME - $quality", url)
|
||||
Video(url, "$playerName - $quality", url)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user