fix: Purge StreamSB extractor (#2042)
Co-authored-by: jmir1 <jhmiramon@gmail.com>
This commit is contained in:
@ -1,18 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id("com.android.library")
|
|
||||||
id("kotlinx-serialization") // for the DTO
|
|
||||||
kotlin("android")
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdk = AndroidConfig.compileSdk
|
|
||||||
namespace = "eu.kanade.tachiyomi.lib.streamsbextractor"
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
minSdk = AndroidConfig.minSdk
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compileOnly(libs.bundles.common)
|
|
||||||
}
|
|
@ -1,145 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.lib.streamsbextractor
|
|
||||||
|
|
||||||
import android.app.Application
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Track
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import kotlinx.serialization.decodeFromString
|
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
import okhttp3.Headers
|
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
import uy.kohesive.injekt.Injekt
|
|
||||||
import uy.kohesive.injekt.api.get
|
|
||||||
import uy.kohesive.injekt.injectLazy
|
|
||||||
|
|
||||||
class StreamSBExtractor(private val client: OkHttpClient) {
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private const val PREF_ENDPOINT_KEY = "streamsb_api_endpoint"
|
|
||||||
private const val PREF_ENDPOINT_DEFAULT = "/sources16"
|
|
||||||
private const val ENDPOINT_URL = "https://raw.githubusercontent.com/Claudemirovsky/streamsb-endpoint/master/endpoint.txt"
|
|
||||||
}
|
|
||||||
|
|
||||||
private val json: Json by injectLazy()
|
|
||||||
|
|
||||||
private val preferences by lazy {
|
|
||||||
Injekt.get<Application>().getSharedPreferences(javaClass.simpleName, 0x0000)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getEndpoint() = preferences.getString(PREF_ENDPOINT_KEY, PREF_ENDPOINT_DEFAULT)!!
|
|
||||||
|
|
||||||
private fun updateEndpoint() {
|
|
||||||
client.newCall(GET(ENDPOINT_URL)).execute()
|
|
||||||
.use { it.body.string() }
|
|
||||||
.let {
|
|
||||||
preferences.edit().putString(PREF_ENDPOINT_KEY, it).commit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun bytesToHex(bytes: ByteArray): String {
|
|
||||||
val hexArray = "0123456789ABCDEF".toCharArray()
|
|
||||||
val hexChars = CharArray(bytes.size * 2)
|
|
||||||
for (j in bytes.indices) {
|
|
||||||
val v = bytes[j].toInt() and 0xFF
|
|
||||||
|
|
||||||
hexChars[j * 2] = hexArray[v ushr 4]
|
|
||||||
hexChars[j * 2 + 1] = hexArray[v and 0x0F]
|
|
||||||
}
|
|
||||||
return String(hexChars)
|
|
||||||
}
|
|
||||||
|
|
||||||
// animension, asianload and dramacool uses "common = false"
|
|
||||||
private fun fixUrl(url: String, common: Boolean): String {
|
|
||||||
val host = url.toHttpUrl().host
|
|
||||||
val sbUrl = "https://$host" + getEndpoint()
|
|
||||||
val id = url.substringAfter(host)
|
|
||||||
.substringAfter("/e/")
|
|
||||||
.substringAfter("/embed-")
|
|
||||||
.substringBefore("?")
|
|
||||||
.substringBefore(".html")
|
|
||||||
.substringAfter("/")
|
|
||||||
return sbUrl + if (common) {
|
|
||||||
val hexBytes = bytesToHex(id.toByteArray())
|
|
||||||
"/625a364258615242766475327c7c${hexBytes}7c7c4761574550654f7461566d347c7c73747265616d7362"
|
|
||||||
} else {
|
|
||||||
"/${bytesToHex("||$id||||streamsb".toByteArray())}/"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun videosFromUrl(
|
|
||||||
url: String,
|
|
||||||
headers: Headers,
|
|
||||||
prefix: String = "",
|
|
||||||
suffix: String = "",
|
|
||||||
common: Boolean = true,
|
|
||||||
manualData: Boolean = false,
|
|
||||||
externalSubs: List<Track> = emptyList(),
|
|
||||||
): List<Video> {
|
|
||||||
val trimmedUrl = url.trim() // Prevents some crashes
|
|
||||||
val newHeaders = if (manualData) {
|
|
||||||
headers
|
|
||||||
} else {
|
|
||||||
headers.newBuilder()
|
|
||||||
.set("referer", trimmedUrl)
|
|
||||||
.set("watchsb", "sbstream")
|
|
||||||
.set("authority", "embedsb.com")
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
return runCatching {
|
|
||||||
val master = if (manualData) trimmedUrl else fixUrl(trimmedUrl, common)
|
|
||||||
val request = client.newCall(GET(master, newHeaders)).execute()
|
|
||||||
|
|
||||||
val json = json.decodeFromString<Response>(
|
|
||||||
if (request.code == 200) {
|
|
||||||
request.use { it.body.string() }
|
|
||||||
} else {
|
|
||||||
request.close()
|
|
||||||
updateEndpoint()
|
|
||||||
client.newCall(GET(fixUrl(trimmedUrl, common), newHeaders))
|
|
||||||
.execute()
|
|
||||||
.use { it.body.string() }
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
val masterUrl = json.stream_data.file.trim('"')
|
|
||||||
val subtitleList = json.stream_data.subs
|
|
||||||
?.map { Track(it.file, it.label) }
|
|
||||||
?: emptyList()
|
|
||||||
|
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, newHeaders))
|
|
||||||
.execute()
|
|
||||||
.use { it.body.string() }
|
|
||||||
|
|
||||||
val audioRegex = Regex("""#EXT-X-MEDIA:TYPE=AUDIO.*?NAME="(.*?)".*?URI="(.*?)"""")
|
|
||||||
val audioList: List<Track> = audioRegex.findAll(masterPlaylist)
|
|
||||||
.map {
|
|
||||||
Track(
|
|
||||||
it.groupValues[2], // Url
|
|
||||||
it.groupValues[1], // Name
|
|
||||||
)
|
|
||||||
}.toList()
|
|
||||||
|
|
||||||
val separator = "#EXT-X-STREAM-INF"
|
|
||||||
masterPlaylist.substringAfter(separator).split(separator).map {
|
|
||||||
val resolution = it.substringAfter("RESOLUTION=")
|
|
||||||
.substringBefore("\n")
|
|
||||||
.substringAfter("x")
|
|
||||||
.substringBefore(",") + "p"
|
|
||||||
val quality = ("StreamSB:" + resolution).let {
|
|
||||||
buildString {
|
|
||||||
if (prefix.isNotBlank()) append("$prefix ")
|
|
||||||
append(it)
|
|
||||||
if (prefix.isNotBlank()) append(" $suffix")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val videoUrl = it.substringAfter("\n").substringBefore("\n")
|
|
||||||
Video(videoUrl, quality, videoUrl, headers = newHeaders, subtitleTracks = subtitleList + externalSubs, audioTracks = audioList)
|
|
||||||
}
|
|
||||||
}.getOrNull() ?: emptyList<Video>()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun videosFromDecryptedUrl(realUrl: String, headers: Headers, prefix: String = "", suffix: String = ""): List<Video> {
|
|
||||||
return videosFromUrl(realUrl, headers, prefix, suffix, manualData = true)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.lib.streamsbextractor
|
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
data class Response(
|
|
||||||
val stream_data: ResponseObject,
|
|
||||||
) {
|
|
||||||
@Serializable
|
|
||||||
data class ResponseObject(
|
|
||||||
val file: String,
|
|
||||||
val subs: List<Subtitle>? = null,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
data class Subtitle(
|
|
||||||
val label: String,
|
|
||||||
val file: String,
|
|
||||||
)
|
|
@ -1,6 +1,5 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(":lib-mp4upload-extractor"))
|
implementation(project(":lib-mp4upload-extractor"))
|
||||||
implementation(project(":lib-streamsb-extractor"))
|
|
||||||
implementation(project(":lib-gdriveplayer-extractor"))
|
implementation(project(":lib-gdriveplayer-extractor"))
|
||||||
implementation(project(":lib-streamtape-extractor"))
|
implementation(project(":lib-streamtape-extractor"))
|
||||||
implementation(project(":lib-yourupload-extractor"))
|
implementation(project(":lib-yourupload-extractor"))
|
||||||
|
@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||||
@ -101,7 +100,6 @@ class AnimeIndo : AnimeStream(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ============================ Video Links =============================
|
// ============================ Video Links =============================
|
||||||
private val streamSbExtractor by lazy { StreamSBExtractor(client) }
|
|
||||||
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
||||||
private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) }
|
private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) }
|
||||||
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
||||||
@ -111,7 +109,6 @@ class AnimeIndo : AnimeStream(
|
|||||||
override fun getVideoList(url: String, name: String): List<Video> {
|
override fun getVideoList(url: String, name: String): List<Video> {
|
||||||
return with(name) {
|
return with(name) {
|
||||||
when {
|
when {
|
||||||
contains("streamsb") -> streamSbExtractor.videosFromUrl(url, headers)
|
|
||||||
contains("streamtape") -> streamTapeExtractor.videoFromUrl(url)?.let(::listOf).orEmpty()
|
contains("streamtape") -> streamTapeExtractor.videoFromUrl(url)?.let(::listOf).orEmpty()
|
||||||
contains("mp4") -> mp4uploadExtractor.videosFromUrl(url, headers)
|
contains("mp4") -> mp4uploadExtractor.videosFromUrl(url, headers)
|
||||||
contains("yourupload") -> yourUploadExtractor.videoFromUrl(url, headers)
|
contains("yourupload") -> yourUploadExtractor.videoFromUrl(url, headers)
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ import eu.kanade.tachiyomi.animeextension.en.animekhor.extractors.StreamHideExtr
|
|||||||
import eu.kanade.tachiyomi.animeextension.en.animekhor.extractors.StreamWishExtractor
|
import eu.kanade.tachiyomi.animeextension.en.animekhor.extractors.StreamWishExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||||
|
|
||||||
class AnimeKhor : AnimeStream(
|
class AnimeKhor : AnimeStream(
|
||||||
@ -15,16 +14,6 @@ class AnimeKhor : AnimeStream(
|
|||||||
// ============================ Video Links =============================
|
// ============================ Video Links =============================
|
||||||
|
|
||||||
override fun getVideoList(url: String, name: String): List<Video> {
|
override fun getVideoList(url: String, name: String): List<Video> {
|
||||||
val streamSbDomains = listOf(
|
|
||||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
|
||||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
|
||||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
|
||||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
|
||||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
|
||||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
|
||||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
|
||||||
"streamovies.xyz", "sblona.com",
|
|
||||||
)
|
|
||||||
val prefix = "$name - "
|
val prefix = "$name - "
|
||||||
return when {
|
return when {
|
||||||
url.contains("ahvsh.com") || name.equals("streamhide", true) -> {
|
url.contains("ahvsh.com") || name.equals("streamhide", true) -> {
|
||||||
@ -43,9 +32,6 @@ class AnimeKhor : AnimeStream(
|
|||||||
// url.contains("animeabc.xyz") -> {
|
// url.contains("animeabc.xyz") -> {
|
||||||
// AnimeABCExtractor(client, headers).videosFromUrl(url, prefix = prefix)
|
// AnimeABCExtractor(client, headers).videosFromUrl(url, prefix = prefix)
|
||||||
// }
|
// }
|
||||||
streamSbDomains.any { it in url } || name.equals("streamsb", true) -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
|
||||||
}
|
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-filemoon-extractor'))
|
implementation(project(':lib-filemoon-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.animeextension.en.animenosub.extractors.VtubeExtracto
|
|||||||
import eu.kanade.tachiyomi.animeextension.en.animenosub.extractors.WolfstreamExtractor
|
import eu.kanade.tachiyomi.animeextension.en.animenosub.extractors.WolfstreamExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
|
|
||||||
@ -27,21 +26,8 @@ class Animenosub : AnimeStream(
|
|||||||
// ============================ Video Links =============================
|
// ============================ Video Links =============================
|
||||||
|
|
||||||
override fun getVideoList(url: String, name: String): List<Video> {
|
override fun getVideoList(url: String, name: String): List<Video> {
|
||||||
val streamSbDomains = listOf(
|
|
||||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
|
||||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
|
||||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
|
||||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
|
||||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
|
||||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
|
||||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
|
||||||
"streamovies.xyz", "lvturbo.com", "sbrapid.com",
|
|
||||||
)
|
|
||||||
val prefix = "$name - "
|
val prefix = "$name - "
|
||||||
return when {
|
return when {
|
||||||
streamSbDomains.any { it in url } -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
|
||||||
}
|
|
||||||
url.contains("streamwish") -> {
|
url.contains("streamwish") -> {
|
||||||
StreamWishExtractor(client, headers).videosFromUrl(url, prefix)
|
StreamWishExtractor(client, headers).videosFromUrl(url, prefix)
|
||||||
}
|
}
|
||||||
@ -124,9 +110,8 @@ class Animenosub : AnimeStream(
|
|||||||
|
|
||||||
private const val PREF_SERVER_KEY = "preferred_server"
|
private const val PREF_SERVER_KEY = "preferred_server"
|
||||||
private const val PREF_SERVER_TITLE = "Preferred Video Server"
|
private const val PREF_SERVER_TITLE = "Preferred Video Server"
|
||||||
private const val PREF_SERVER_DEFAULT = "StreamSB"
|
private const val PREF_SERVER_DEFAULT = "StreamWish"
|
||||||
private val PREF_SERVER_VALUES = arrayOf(
|
private val PREF_SERVER_VALUES = arrayOf(
|
||||||
"StreamSB",
|
|
||||||
"StreamWish",
|
"StreamWish",
|
||||||
"VidMoly",
|
"VidMoly",
|
||||||
"Vtube",
|
"Vtube",
|
||||||
|
@ -2,5 +2,4 @@ dependencies {
|
|||||||
implementation(project(':lib-mp4upload-extractor'))
|
implementation(project(':lib-mp4upload-extractor'))
|
||||||
implementation(project(':lib-gdriveplayer-extractor'))
|
implementation(project(':lib-gdriveplayer-extractor'))
|
||||||
implementation(project(':lib-vidbom-extractor'))
|
implementation(project(':lib-vidbom-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
@ -47,15 +46,6 @@ class AnimeTitans : AnimeStream(
|
|||||||
override val videoSortPrefDefault = prefQualityDefault
|
override val videoSortPrefDefault = prefQualityDefault
|
||||||
|
|
||||||
override fun getVideoList(url: String, name: String): List<Video> {
|
override fun getVideoList(url: String, name: String): List<Video> {
|
||||||
val streamSbDomains = listOf(
|
|
||||||
"sbembed.com", "sbembed1.com", "sbplay.org", "sbvideo.net",
|
|
||||||
"streamsb.net", "sbplay.one", "cloudemb.com", "playersb.com",
|
|
||||||
"tubesb.com", "sbplay1.com", "embedsb.com", "watchsb.com",
|
|
||||||
"sbplay2.com", "japopav.tv", "viewsb.com", "sbfast", "sbfull.com",
|
|
||||||
"javplaya.com", "ssbstream.net", "p1ayerjavseen.com", "sbthe.com",
|
|
||||||
"vidmovie.xyz", "sbspeed.com", "streamsss.net", "sblanh.com",
|
|
||||||
)
|
|
||||||
|
|
||||||
val vidbomDomains = listOf(
|
val vidbomDomains = listOf(
|
||||||
"vidbom.com", "vidbem.com", "vidbm.com", "vedpom.com",
|
"vidbom.com", "vidbem.com", "vidbm.com", "vedpom.com",
|
||||||
"vedbom.com", "vedbom.org", "vadbom.com", "vidbam.org",
|
"vedbom.com", "vedbom.org", "vadbom.com", "vidbam.org",
|
||||||
@ -67,8 +57,6 @@ class AnimeTitans : AnimeStream(
|
|||||||
return when {
|
return when {
|
||||||
baseUrl in url ->
|
baseUrl in url ->
|
||||||
AnimeTitansExtractor(client).videosFromUrl(url, headers, baseUrl)
|
AnimeTitansExtractor(client).videosFromUrl(url, headers, baseUrl)
|
||||||
streamSbDomains.any(url::contains) ->
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
vidbomDomains.any(url::contains) ->
|
vidbomDomains.any(url::contains) ->
|
||||||
VidBomExtractor(client).videosFromUrl(url)
|
VidBomExtractor(client).videosFromUrl(url)
|
||||||
"vidyard" in url ->
|
"vidyard" in url ->
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-gdriveplayer-extractor'))
|
implementation(project(':lib-gdriveplayer-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@ import eu.kanade.tachiyomi.animeextension.all.animexin.extractors.YouTubeExtract
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||||
|
|
||||||
class AnimeXin : AnimeStream(
|
class AnimeXin : AnimeStream(
|
||||||
@ -21,24 +20,12 @@ class AnimeXin : AnimeStream(
|
|||||||
|
|
||||||
// ============================ Video Links =============================
|
// ============================ Video Links =============================
|
||||||
override fun getVideoList(url: String, name: String): List<Video> {
|
override fun getVideoList(url: String, name: String): List<Video> {
|
||||||
val streamSbDomains = listOf(
|
|
||||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
|
||||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
|
||||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
|
||||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
|
||||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
|
||||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
|
||||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
|
||||||
"streamovies.xyz",
|
|
||||||
)
|
|
||||||
val prefix = "$name - "
|
val prefix = "$name - "
|
||||||
return when {
|
return when {
|
||||||
url.contains("ok.ru") -> {
|
url.contains("ok.ru") -> {
|
||||||
OkruExtractor(client).videosFromUrl(url, prefix = prefix)
|
OkruExtractor(client).videosFromUrl(url, prefix = prefix)
|
||||||
}
|
}
|
||||||
streamSbDomains.any { it in url } -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
|
||||||
}
|
|
||||||
url.contains("dailymotion") -> {
|
url.contains("dailymotion") -> {
|
||||||
DailymotionExtractor(client).videosFromUrl(url, prefix = prefix)
|
DailymotionExtractor(client).videosFromUrl(url, prefix = prefix)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-mixdrop-extractor'))
|
implementation(project(':lib-mixdrop-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -117,8 +116,6 @@ class AnimeOnlineNinja : DooPlay(
|
|||||||
"dood" in url ->
|
"dood" in url ->
|
||||||
DoodExtractor(client).videoFromUrl(url, "$lang DoodStream", false)
|
DoodExtractor(client).videoFromUrl(url, "$lang DoodStream", false)
|
||||||
?.let(::listOf)
|
?.let(::listOf)
|
||||||
"sb" in url ->
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers, lang)
|
|
||||||
"streamtape" in url ->
|
"streamtape" in url ->
|
||||||
StreamTapeExtractor(client).videoFromUrl(url, "$lang StreamTape")
|
StreamTapeExtractor(client).videoFromUrl(url, "$lang StreamTape")
|
||||||
?.let(::listOf)
|
?.let(::listOf)
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
dependencies {
|
|
||||||
implementation(project(":lib-streamsb-extractor"))
|
|
||||||
}
|
|
@ -4,7 +4,6 @@ import eu.kanade.tachiyomi.animeextension.pt.animesgratis.extractors.AnimesGrati
|
|||||||
import eu.kanade.tachiyomi.animeextension.pt.animesgratis.extractors.BloggerExtractor
|
import eu.kanade.tachiyomi.animeextension.pt.animesgratis.extractors.BloggerExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.pt.animesgratis.extractors.RuplayExtractor
|
import eu.kanade.tachiyomi.animeextension.pt.animesgratis.extractors.RuplayExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -48,8 +47,6 @@ class AnimesGratis : DooPlay(
|
|||||||
val name = player.selectFirst("span.title")!!.text().lowercase()
|
val name = player.selectFirst("span.title")!!.text().lowercase()
|
||||||
val url = getPlayerUrl(player)
|
val url = getPlayerUrl(player)
|
||||||
return when {
|
return when {
|
||||||
"streamsb" in name ->
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
"ruplay" in name ->
|
"ruplay" in name ->
|
||||||
RuplayExtractor(client).videosFromUrl(url)
|
RuplayExtractor(client).videosFromUrl(url)
|
||||||
"/player2/" in url ->
|
"/player2/" in url ->
|
||||||
|
@ -2,6 +2,5 @@ dependencies {
|
|||||||
implementation(project(':lib-filemoon-extractor'))
|
implementation(project(':lib-filemoon-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-streamlare-extractor'))
|
implementation(project(':lib-streamlare-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation("dev.datlag.jsunpacker:jsunpacker:1.0.1")
|
implementation("dev.datlag.jsunpacker:jsunpacker:1.0.1")
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -73,9 +72,7 @@ class Cinemathek : DooPlay(
|
|||||||
url.contains("https://streamlare.com") && hosterSelection.contains("slare") -> {
|
url.contains("https://streamlare.com") && hosterSelection.contains("slare") -> {
|
||||||
StreamlareExtractor(client).videosFromUrl(url)
|
StreamlareExtractor(client).videosFromUrl(url)
|
||||||
}
|
}
|
||||||
url.contains("https://streamsb") && hosterSelection.contains("streamsb") -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers = headers)
|
|
||||||
}
|
|
||||||
url.contains("https://filemoon") && hosterSelection.contains("fmoon") -> {
|
url.contains("https://filemoon") && hosterSelection.contains("fmoon") -> {
|
||||||
FilemoonExtractor(client).videosFromUrl(url)
|
FilemoonExtractor(client).videosFromUrl(url)
|
||||||
}
|
}
|
||||||
@ -158,13 +155,13 @@ class Cinemathek : DooPlay(
|
|||||||
private const val PREF_HOSTER_KEY = "preferred_hoster"
|
private const val PREF_HOSTER_KEY = "preferred_hoster"
|
||||||
private const val PREF_HOSTER_TITLE = "Standard-Hoster"
|
private const val PREF_HOSTER_TITLE = "Standard-Hoster"
|
||||||
private const val PREF_HOSTER_DEFAULT = "https://viewsb.com"
|
private const val PREF_HOSTER_DEFAULT = "https://viewsb.com"
|
||||||
private val PREF_HOSTER_ENTRIES = arrayOf("Streamlare", "StreamSB", "Filemoon", "DoodStream", "StreamHide")
|
private val PREF_HOSTER_ENTRIES = arrayOf("Streamlare", "Filemoon", "DoodStream", "StreamHide")
|
||||||
private val PREF_HOSTER_VALUES = arrayOf("https://streamlare", "https://viewsb.com", "https://filemoon", "https://dooood", "https://streamhide")
|
private val PREF_HOSTER_VALUES = arrayOf("https://streamlare", "https://viewsb.com", "https://filemoon", "https://dooood", "https://streamhide")
|
||||||
|
|
||||||
private const val PREF_HOSTER_SELECTION_KEY = "hoster_selection"
|
private const val PREF_HOSTER_SELECTION_KEY = "hoster_selection"
|
||||||
private const val PREF_HOSTER_SELECTION_TITLE = "Hoster auswählen"
|
private const val PREF_HOSTER_SELECTION_TITLE = "Hoster auswählen"
|
||||||
private val PREF_HOSTER_SELECTION_ENTRIES = PREF_HOSTER_ENTRIES
|
private val PREF_HOSTER_SELECTION_ENTRIES = PREF_HOSTER_ENTRIES
|
||||||
private val PREF_HOSTER_SELECTION_VALUES = arrayOf("slare", "streamsb", "fmoon", "dood", "shide")
|
private val PREF_HOSTER_SELECTION_VALUES = arrayOf("slare", "fmoon", "dood", "shide")
|
||||||
private val PREF_HOSTER_SELECTION_DEFAULT = PREF_HOSTER_SELECTION_VALUES.toSet()
|
private val PREF_HOSTER_SELECTION_DEFAULT = PREF_HOSTER_SELECTION_VALUES.toSet()
|
||||||
|
|
||||||
private const val PREF_QUALITY_KEY = "preferred_quality"
|
private const val PREF_QUALITY_KEY = "preferred_quality"
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
dependencies {
|
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
}
|
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
|||||||
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -244,18 +243,6 @@ class DonghuaX : DooPlay(
|
|||||||
DailymotionExtractor(client).videosFromUrl("https://www.dailymotion.com/embed/video/$it", "Dailymotion - ")
|
DailymotionExtractor(client).videosFromUrl("https://www.dailymotion.com/embed/video/$it", "Dailymotion - ")
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
}
|
}
|
||||||
url.contains("sbembed.com") || url.contains("sbembed1.com") || url.contains("sbplay.org") ||
|
|
||||||
url.contains("sbvideo.net") || url.contains("streamsb.net") || url.contains("sbplay.one") ||
|
|
||||||
url.contains("cloudemb.com") || url.contains("playersb.com") || url.contains("tubesb.com") ||
|
|
||||||
url.contains("sbplay1.com") || url.contains("embedsb.com") || url.contains("watchsb.com") ||
|
|
||||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
|
||||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("javplaya.com") ||
|
|
||||||
url.contains("ssbstream.net") || url.contains("p1ayerjavseen.com") || url.contains("sbthe.com") ||
|
|
||||||
url.contains("vidmovie.xyz") || url.contains("sbspeed.com") || url.contains("streamsss.net") ||
|
|
||||||
url.contains("sblanh.com") || url.contains("sbbrisk.com") || url.contains("lvturbo.com") ||
|
|
||||||
url.contains("sbrapid.com") -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
}
|
|
||||||
url.contains("csst.online") -> {
|
url.contains("csst.online") -> {
|
||||||
val urlRegex = Regex("""\[(.*?)\](https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*))""")
|
val urlRegex = Regex("""\[(.*?)\](https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*))""")
|
||||||
val dataScript = client.newCall(GET(url)).execute()
|
val dataScript = client.newCall(GET(url)).execute()
|
||||||
@ -366,7 +353,7 @@ class DonghuaX : DooPlay(
|
|||||||
private const val PREF_SERVER_KEY = "preferred_server"
|
private const val PREF_SERVER_KEY = "preferred_server"
|
||||||
private const val PREF_SERVER_TITLE = "Preferred server"
|
private const val PREF_SERVER_TITLE = "Preferred server"
|
||||||
private const val PREF_SERVER_DEFAULT = "AllVideo"
|
private const val PREF_SERVER_DEFAULT = "AllVideo"
|
||||||
private val PREF_SERVER_ENTRIES = arrayOf("AllVideo", "Dailymotion", "StreamSB", "Internal Player", "Internal Video", "Blogger")
|
private val PREF_SERVER_ENTRIES = arrayOf("AllVideo", "Dailymotion", "Internal Player", "Internal Video", "Blogger")
|
||||||
private val PREF_SERVER_VALUES = PREF_SERVER_ENTRIES
|
private val PREF_SERVER_VALUES = PREF_SERVER_ENTRIES
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-voe-extractor'))
|
implementation(project(':lib-voe-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import androidx.preference.MultiSelectListPreference
|
|||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -23,7 +22,7 @@ class Kinoking : DooPlay(
|
|||||||
private const val PREF_HOSTER_KEY = "preferred_hoster"
|
private const val PREF_HOSTER_KEY = "preferred_hoster"
|
||||||
private const val PREF_HOSTER_TITLE = "Standard-Hoster"
|
private const val PREF_HOSTER_TITLE = "Standard-Hoster"
|
||||||
private const val PREF_HOSTER_DEFAULT = "https://dood"
|
private const val PREF_HOSTER_DEFAULT = "https://dood"
|
||||||
private val PREF_HOSTER_ENTRIES = arrayOf("Doodstream", "StreamSB", "Voe")
|
private val PREF_HOSTER_ENTRIES = arrayOf("Doodstream", "Voe")
|
||||||
private val PREF_HOSTER_VALUES = arrayOf("https://dood", "https://watchsb.com", "https://voe.sx")
|
private val PREF_HOSTER_VALUES = arrayOf("https://dood", "https://watchsb.com", "https://voe.sx")
|
||||||
|
|
||||||
private const val PREF_HOSTER_SELECTION_KEY = "hoster_selection"
|
private const val PREF_HOSTER_SELECTION_KEY = "hoster_selection"
|
||||||
@ -86,15 +85,6 @@ class Kinoking : DooPlay(
|
|||||||
|
|
||||||
private fun getPlayerVideos(link: String, element: Element, hosterSelection: Set<String>): List<Video>? {
|
private fun getPlayerVideos(link: String, element: Element, hosterSelection: Set<String>): List<Video>? {
|
||||||
return when {
|
return when {
|
||||||
link.contains("https://watchsb") || link.contains("https://viewsb") && hosterSelection.contains("watchsb") -> {
|
|
||||||
if (element.select("span.flag img").attr("data-src").contains("/en.")) {
|
|
||||||
val lang = "Englisch"
|
|
||||||
StreamSBExtractor(client).videosFromUrl(link, headers, suffix = lang)
|
|
||||||
} else {
|
|
||||||
val lang = "Deutsch"
|
|
||||||
StreamSBExtractor(client).videosFromUrl(link, headers, lang)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
link.contains("https://dood.") || link.contains("https://doodstream.") && hosterSelection.contains("dood") -> {
|
link.contains("https://dood.") || link.contains("https://doodstream.") && hosterSelection.contains("dood") -> {
|
||||||
val quality = "Doodstream"
|
val quality = "Doodstream"
|
||||||
val redirect = !link.contains("https://doodstream")
|
val redirect = !link.contains("https://doodstream")
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamlare-extractor'))
|
implementation(project(':lib-streamlare-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-voe-extractor'))
|
implementation(project(':lib-voe-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-mixdrop-extractor'))
|
implementation(project(':lib-mixdrop-extractor'))
|
||||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -83,22 +82,7 @@ class Multimovies : DooPlay(
|
|||||||
private fun getPlayerVideos(player: Element): List<Video> {
|
private fun getPlayerVideos(player: Element): List<Video> {
|
||||||
if (player.attr("data-nume") == "trailer") return emptyList()
|
if (player.attr("data-nume") == "trailer") return emptyList()
|
||||||
val url = getPlayerUrl(player)
|
val url = getPlayerUrl(player)
|
||||||
val streamSbServers = listOf(
|
|
||||||
"sbembed.com", "sbembed1.com", "sbplay.org",
|
|
||||||
"sbvideo.net", "streamsb.net", "sbplay.one",
|
|
||||||
"cloudemb.com", "playersb.com", "tubesb.com",
|
|
||||||
"sbplay1.com", "embedsb.com", "watchsb.com",
|
|
||||||
"sbplay2.com", "japopav.tv", "viewsb.com",
|
|
||||||
"sbfast", "sbfull.com", "javplaya.com",
|
|
||||||
"ssbstream.net", "p1ayerjavseen.com", "sbthe.com",
|
|
||||||
"sbchill.com", "sblongvu.com", "sbanh.com",
|
|
||||||
"sblanh.com", "sbhight.com", "sbbrisk.com",
|
|
||||||
"sbspeed.com", "multimovies.website",
|
|
||||||
)
|
|
||||||
return when {
|
return when {
|
||||||
streamSbServers.any { it in url } ->
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers = headers, prefix = "[multimovies]")
|
|
||||||
|
|
||||||
url.contains(baseUrl.toHttpUrl().host, true) ->
|
url.contains(baseUrl.toHttpUrl().host, true) ->
|
||||||
MultimoviesCloudExtractor(client).videosFromUrl(url)
|
MultimoviesCloudExtractor(client).videosFromUrl(url)
|
||||||
url.contains("autoembed.to") || url.contains("2embed.to") -> {
|
url.contains("autoembed.to") || url.contains("2embed.to") -> {
|
||||||
|
@ -685,7 +685,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -758,9 +757,6 @@ class AutoEmbedExtractor(private val client: OkHttpClient) {
|
|||||||
val videoUrl = server.url
|
val videoUrl = server.url
|
||||||
|
|
||||||
when {
|
when {
|
||||||
videoUrl.contains("streamsb") -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(videoUrl, headers = headers, prefix = prefix)
|
|
||||||
}
|
|
||||||
videoUrl.contains("streamlare") -> {
|
videoUrl.contains("streamlare") -> {
|
||||||
StreamlareExtractor(client).videosFromUrl(videoUrl, prefix = prefix)
|
StreamlareExtractor(client).videosFromUrl(videoUrl, prefix = prefix)
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-gdriveplayer-extractor'))
|
implementation(project(':lib-gdriveplayer-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ import eu.kanade.tachiyomi.animeextension.pt.pifansubs.extractors.AdoroDoramasEx
|
|||||||
import eu.kanade.tachiyomi.animeextension.pt.pifansubs.extractors.JMVStreamExtractor
|
import eu.kanade.tachiyomi.animeextension.pt.pifansubs.extractors.JMVStreamExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -45,14 +44,11 @@ class PiFansubs : DooPlay(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getPlayerVideos(url: String): List<Video> {
|
private fun getPlayerVideos(url: String): List<Video> {
|
||||||
val streamsbDomains = listOf("sbspeed", "sbanh", "streamsb", "sbfull", "sbbrisk", "lvturbo")
|
|
||||||
return when {
|
return when {
|
||||||
"player.jmvstream" in url ->
|
"player.jmvstream" in url ->
|
||||||
JMVStreamExtractor(client).videosFromUrl(url)
|
JMVStreamExtractor(client).videosFromUrl(url)
|
||||||
"gdriveplayer." in url ->
|
"gdriveplayer." in url ->
|
||||||
GdrivePlayerExtractor(client).videosFromUrl(url, "GdrivePlayer", headers)
|
GdrivePlayerExtractor(client).videosFromUrl(url, "GdrivePlayer", headers)
|
||||||
streamsbDomains.any { it in url } ->
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
"https://adorodoramas.com" in url ->
|
"https://adorodoramas.com" in url ->
|
||||||
AdoroDoramasExtractor(client).videosFromUrl(url)
|
AdoroDoramasExtractor(client).videosFromUrl(url)
|
||||||
"/jwplayer/?source" in url -> {
|
"/jwplayer/?source" in url -> {
|
||||||
|
@ -11,11 +11,11 @@ class AnimeStreamGenerator : ThemeSourceGenerator {
|
|||||||
override val baseVersionCode = 2
|
override val baseVersionCode = 2
|
||||||
|
|
||||||
override val sources = listOf(
|
override val sources = listOf(
|
||||||
SingleLang("AnimeIndo", "https://animeindo.quest", "id", isNsfw = false, overrideVersionCode = 1),
|
SingleLang("AnimeIndo", "https://animeindo.quest", "id", isNsfw = false, overrideVersionCode = 2),
|
||||||
SingleLang("AnimeKhor", "https://animekhor.xyz", "en", isNsfw = false),
|
SingleLang("AnimeKhor", "https://animekhor.xyz", "en", isNsfw = false, overrideVersionCode = 1),
|
||||||
SingleLang("Animenosub", "https://animenosub.com", "en", isNsfw = true),
|
SingleLang("Animenosub", "https://animenosub.com", "en", isNsfw = true, overrideVersionCode = 1),
|
||||||
SingleLang("AnimeTitans", "https://animetitans.com", "ar", isNsfw = false, overrideVersionCode = 11),
|
SingleLang("AnimeTitans", "https://animetitans.com", "ar", isNsfw = false, overrideVersionCode = 12),
|
||||||
SingleLang("AnimeXin", "https://animexin.vip", "all", isNsfw = false, overrideVersionCode = 4),
|
SingleLang("AnimeXin", "https://animexin.vip", "all", isNsfw = false, overrideVersionCode = 5),
|
||||||
SingleLang("desu-online", "https://desu-online.pl", "pl", className = "DesuOnline", isNsfw = false),
|
SingleLang("desu-online", "https://desu-online.pl", "pl", className = "DesuOnline", isNsfw = false),
|
||||||
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 = 2),
|
SingleLang("LMAnime", "https://lmanime.com", "all", isNsfw = false, overrideVersionCode = 2),
|
||||||
|
@ -12,21 +12,21 @@ class DooPlayGenerator : ThemeSourceGenerator {
|
|||||||
|
|
||||||
override val sources = listOf(
|
override val sources = listOf(
|
||||||
SingleLang("AnimeOnline360", "https://animeonline360.me", "en", isNsfw = false),
|
SingleLang("AnimeOnline360", "https://animeonline360.me", "en", isNsfw = false),
|
||||||
SingleLang("AnimeOnline.Ninja", "https://www1.animeonline.ninja", "es", className = "AnimeOnlineNinja", isNsfw = false, overrideVersionCode = 28),
|
SingleLang("AnimeOnline.Ninja", "https://www1.animeonline.ninja", "es", className = "AnimeOnlineNinja", isNsfw = false, overrideVersionCode = 29),
|
||||||
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true, overrideVersionCode = 1),
|
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true, overrideVersionCode = 1),
|
||||||
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true),
|
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true),
|
||||||
SingleLang("AnimeSync", "https://animesync.org", "pt-BR", isNsfw = true),
|
SingleLang("AnimeSync", "https://animesync.org", "pt-BR", isNsfw = true),
|
||||||
SingleLang("AnimesFox BR", "https://animesfox.net", "pt-BR", isNsfw = false, overrideVersionCode = 2),
|
SingleLang("AnimesFox BR", "https://animesfox.net", "pt-BR", isNsfw = false, overrideVersionCode = 2),
|
||||||
SingleLang("Animes Grátis", "https://animesgratis.org", "pt-BR", className = "AnimesGratis", isNsfw = false, overrideVersionCode = 1),
|
SingleLang("Animes Grátis", "https://animesgratis.org", "pt-BR", className = "AnimesGratis", isNsfw = false, overrideVersionCode = 2),
|
||||||
SingleLang("Animes House", "https://animeshouse.net", "pt-BR", isNsfw = false, overrideVersionCode = 5),
|
SingleLang("Animes House", "https://animeshouse.net", "pt-BR", isNsfw = false, overrideVersionCode = 5),
|
||||||
SingleLang("Cinemathek", "https://cinemathek.net", "de", isNsfw = true, overrideVersionCode = 13),
|
SingleLang("Cinemathek", "https://cinemathek.net", "de", isNsfw = true, overrideVersionCode = 14),
|
||||||
SingleLang("DonghuaX", "https://donghuax.com", "pt-BR", isNsfw = false),
|
SingleLang("DonghuaX", "https://donghuax.com", "pt-BR", isNsfw = false, overrideVersionCode = 1),
|
||||||
SingleLang("GoAnimes", "https://goanimes.net", "pt-BR", isNsfw = true, overrideVersionCode = 2),
|
SingleLang("GoAnimes", "https://goanimes.net", "pt-BR", isNsfw = true, overrideVersionCode = 2),
|
||||||
SingleLang("JetAnime", "https://ssl.jetanimes.com", "fr", isNsfw = false),
|
SingleLang("JetAnime", "https://ssl.jetanimes.com", "fr", isNsfw = false),
|
||||||
SingleLang("Kinoking", "https://kinoking.cc", "de", isNsfw = false, overrideVersionCode = 16),
|
SingleLang("Kinoking", "https://kinoking.cc", "de", isNsfw = false, overrideVersionCode = 17),
|
||||||
SingleLang("Multimovies", "https://multimovies.shop", "en", isNsfw = false, overrideVersionCode = 8),
|
SingleLang("Multimovies", "https://multimovies.shop", "en", isNsfw = false, overrideVersionCode = 9),
|
||||||
SingleLang("pactedanime", "https://pactedanime.com", "en", isNsfw = false, className = "PactedAnime", overrideVersionCode = 4),
|
SingleLang("pactedanime", "https://pactedanime.com", "en", isNsfw = false, className = "PactedAnime", overrideVersionCode = 4),
|
||||||
SingleLang("Pi Fansubs", "https://pifansubs.org", "pt-BR", isNsfw = true, overrideVersionCode = 16),
|
SingleLang("Pi Fansubs", "https://pifansubs.org", "pt-BR", isNsfw = true, overrideVersionCode = 17),
|
||||||
SingleLang("Pobreflix", "https://pobreflix.biz", "pt-BR", isNsfw = true),
|
SingleLang("Pobreflix", "https://pobreflix.biz", "pt-BR", isNsfw = true),
|
||||||
SingleLang("UniqueStream", "https://uniquestream.net", "en", isNsfw = false, overrideVersionCode = 2),
|
SingleLang("UniqueStream", "https://uniquestream.net", "en", isNsfw = false, overrideVersionCode = 2),
|
||||||
)
|
)
|
||||||
|
@ -5,13 +5,8 @@ ext {
|
|||||||
extName = 'AnimeWorld India'
|
extName = 'AnimeWorld India'
|
||||||
pkgNameSuffix = 'all.animeworldindia'
|
pkgNameSuffix = 'all.animeworldindia'
|
||||||
extClass = '.AnimeWorldIndiaFactory'
|
extClass = '.AnimeWorldIndiaFactory'
|
||||||
extVersionCode = 2
|
extVersionCode = 3
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -10,7 +10,6 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
@ -229,20 +228,6 @@ open class AnimeWorldIndia(
|
|||||||
videoList.addAll(videos)
|
videoList.addAll(videos)
|
||||||
}
|
}
|
||||||
|
|
||||||
// StreamSB
|
|
||||||
|
|
||||||
filterLanguages.filter {
|
|
||||||
it.jsonObject["server"].toString()
|
|
||||||
.drop(1).dropLast(1)
|
|
||||||
.compareTo("Streamsb") == 0
|
|
||||||
}.forEach {
|
|
||||||
val url = "https://cloudemb.com/e/${it.jsonObject["url"].toString()
|
|
||||||
.drop(1).dropLast(1)
|
|
||||||
.substringAfter("id=")}.html"
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
|
|
||||||
return videoList
|
return videoList
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,8 +264,8 @@ open class AnimeWorldIndia(
|
|||||||
ListPreference(screen.context).apply {
|
ListPreference(screen.context).apply {
|
||||||
key = "preferred_server"
|
key = "preferred_server"
|
||||||
title = "Preferred server"
|
title = "Preferred server"
|
||||||
entries = arrayOf("MyStream", "StreamSB")
|
entries = arrayOf("MyStream")
|
||||||
entryValues = arrayOf("MyStream", "StreamSB")
|
entryValues = arrayOf("MyStream")
|
||||||
setDefaultValue("MyStream")
|
setDefaultValue("MyStream")
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
|
|
||||||
|
@ -7,12 +7,11 @@ ext {
|
|||||||
extName = 'Jav Guru'
|
extName = 'Jav Guru'
|
||||||
pkgNameSuffix = 'all.javguru'
|
pkgNameSuffix = 'all.javguru'
|
||||||
extClass = '.JavGuru'
|
extClass = '.JavGuru'
|
||||||
extVersionCode = 3
|
extVersionCode = 4
|
||||||
containsNsfw = true
|
containsNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-mixdrop-extractor'))
|
implementation(project(':lib-mixdrop-extractor'))
|
||||||
|
@ -11,7 +11,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.asObservable
|
import eu.kanade.tachiyomi.network.asObservable
|
||||||
@ -268,7 +267,6 @@ class JavGuru : AnimeHttpSource() {
|
|||||||
return redirectUrl
|
return redirectUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
private val streamSbExtractor by lazy { StreamSBExtractor(client) }
|
|
||||||
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
||||||
private val doodExtractor by lazy { DoodExtractor(client) }
|
private val doodExtractor by lazy { DoodExtractor(client) }
|
||||||
private val mixDropExtractor by lazy { MixDropExtractor(client) }
|
private val mixDropExtractor by lazy { MixDropExtractor(client) }
|
||||||
@ -299,10 +297,6 @@ class JavGuru : AnimeHttpSource() {
|
|||||||
emTurboExtractor.getVideos(hosterUrl)
|
emTurboExtractor.getVideos(hosterUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
STREAM_SB_DOMAINS.any { it in hosterUrl } -> {
|
|
||||||
streamSbExtractor.videosFromUrl(hosterUrl, headers)
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
@ -349,16 +343,6 @@ class JavGuru : AnimeHttpSource() {
|
|||||||
private val IFRAME_OLID_REGEX = Regex("""var OLID = '([^']+)'""")
|
private val IFRAME_OLID_REGEX = Regex("""var OLID = '([^']+)'""")
|
||||||
private val IFRAME_OLID_URL = Regex("""src="([^"]+)"""")
|
private val IFRAME_OLID_URL = Regex("""src="([^"]+)"""")
|
||||||
|
|
||||||
private val STREAM_SB_DOMAINS = listOf(
|
|
||||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
|
||||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
|
||||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
|
||||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
|
||||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
|
||||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
|
||||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
|
||||||
"streamovies.xyz", "sblona.com", "likessb.com",
|
|
||||||
)
|
|
||||||
private val MIXDROP_DOMAINS = listOf(
|
private val MIXDROP_DOMAINS = listOf(
|
||||||
"mixdrop",
|
"mixdrop",
|
||||||
"mixdroop",
|
"mixdroop",
|
||||||
|
@ -5,13 +5,12 @@ ext {
|
|||||||
extName = 'Anime4up'
|
extName = 'Anime4up'
|
||||||
pkgNameSuffix = 'ar.anime4up'
|
pkgNameSuffix = 'ar.anime4up'
|
||||||
extClass = '.Anime4Up'
|
extClass = '.Anime4Up'
|
||||||
extVersionCode = 48
|
extVersionCode = 49
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-gdriveplayer-extractor'))
|
implementation(project(':lib-gdriveplayer-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-voe-extractor'))
|
implementation(project(':lib-voe-extractor'))
|
||||||
implementation(project(':lib-vidbom-extractor'))
|
implementation(project(':lib-vidbom-extractor'))
|
||||||
|
@ -19,7 +19,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
|||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -172,9 +171,6 @@ class Anime4Up : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val finalUrl = STREAMWISH_REGEX.find(url)!!.groupValues[0]
|
val finalUrl = STREAMWISH_REGEX.find(url)!!.groupValues[0]
|
||||||
StreamWishExtractor(client).videosFromUrl("https://www.$finalUrl", headers)
|
StreamWishExtractor(client).videosFromUrl("https://www.$finalUrl", headers)
|
||||||
}
|
}
|
||||||
STREAMSB_REGEX.containsMatchIn(url) -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
}
|
|
||||||
else -> null
|
else -> null
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
}
|
}
|
||||||
@ -392,7 +388,6 @@ class Anime4Up : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
)
|
)
|
||||||
companion object {
|
companion object {
|
||||||
private val VIDBOM_REGEX = Regex("(?:v[aie]d[bp][aoe]?m|myvii?d|segavid|v[aei]{1,2}dshar[er]?)\\.(?:com|net|org|xyz)(?::\\d+)?/(?:embed[/-])?([A-Za-z0-9]+)")
|
private val VIDBOM_REGEX = Regex("(?:v[aie]d[bp][aoe]?m|myvii?d|segavid|v[aei]{1,2}dshar[er]?)\\.(?:com|net|org|xyz)(?::\\d+)?/(?:embed[/-])?([A-Za-z0-9]+)")
|
||||||
private val STREAMSB_REGEX = Regex("(?:view|watch|embed(?:tv)?|tube|player|cloudemb|japopav|javplaya|p1ayerjavseen|gomovizplay|stream(?:ovies)?|vidmovie|javside|aintahalu|finaltayibin|yahlusubh|taeyabathuna|)?s{0,2}b?(?:embed\\d?|play\\d?|video|fast|full|streams{0,3}|the|speed|l?anh|tvmshow|longvu|arslanrocky|chill|rity|hight|brisk|face|lvturbo|net|one|asian|ani|rapid|sonic|lona)?\\.(?:com|net|org|one|tv|xyz|fun|pro|sbs)")
|
|
||||||
private val DOOD_REGEX = Regex("(do*d(?:stream)?\\.(?:com?|watch|to|s[ho]|cx|la|w[sf]|pm|re|yt|stream))/[de]/([0-9a-zA-Z]+)")
|
private val DOOD_REGEX = Regex("(do*d(?:stream)?\\.(?:com?|watch|to|s[ho]|cx|la|w[sf]|pm|re|yt|stream))/[de]/([0-9a-zA-Z]+)")
|
||||||
private val STREAMWISH_REGEX = Regex("((?:streamwish|anime7u|animezd|ajmidyad|khadhnayad|yadmalik|hayaatieadhab)\\.(?:com|to|sbs))/(?:e/|v/|f/)?([0-9a-zA-Z]+)")
|
private val STREAMWISH_REGEX = Regex("((?:streamwish|anime7u|animezd|ajmidyad|khadhnayad|yadmalik|hayaatieadhab)\\.(?:com|to|sbs))/(?:e/|v/|f/)?([0-9a-zA-Z]+)")
|
||||||
}
|
}
|
||||||
|
@ -7,14 +7,13 @@ ext {
|
|||||||
extName = 'AnimeLek'
|
extName = 'AnimeLek'
|
||||||
pkgNameSuffix = 'ar.animelek'
|
pkgNameSuffix = 'ar.animelek'
|
||||||
extClass = '.AnimeLek'
|
extClass = '.AnimeLek'
|
||||||
extVersionCode = 24
|
extVersionCode = 25
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-vidbom-extractor'))
|
implementation(project(':lib-vidbom-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -85,15 +84,6 @@ class AnimeLek : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun videoListSelector() = "ul#episode-servers li.watch a"
|
override fun videoListSelector() = "ul#episode-servers li.watch a"
|
||||||
|
|
||||||
private fun videosFromElement(document: Document): List<Video> {
|
private fun videosFromElement(document: Document): List<Video> {
|
||||||
val streamSBServers = listOf(
|
|
||||||
"sbembed", "sbplay", "sbvideo.net",
|
|
||||||
"streamsb.net", "cloudemb.com", "playersb.com",
|
|
||||||
"tubesb.com", "embedsb.com", "watchsb.com",
|
|
||||||
"japopav.tv", "viewsb.com", "sbfast",
|
|
||||||
"sbfull.com", "javplaya.com", "ssbstream.net",
|
|
||||||
"p1ayerjavseen.com", "sbthe.com",
|
|
||||||
)
|
|
||||||
|
|
||||||
val vidbomServers = listOf("vidbam", "vadbam", "vidbom", "vidbm")
|
val vidbomServers = listOf("vidbam", "vadbam", "vidbom", "vidbm")
|
||||||
|
|
||||||
return document.select(videoListSelector()).mapNotNull { element ->
|
return document.select(videoListSelector()).mapNotNull { element ->
|
||||||
@ -101,9 +91,6 @@ class AnimeLek : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val qualityy = element.text()
|
val qualityy = element.text()
|
||||||
|
|
||||||
when {
|
when {
|
||||||
streamSBServers.any(url::contains) -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
}
|
|
||||||
vidbomServers.any(url::contains) -> {
|
vidbomServers.any(url::contains) -> {
|
||||||
VidBomExtractor(client).videosFromUrl(url)
|
VidBomExtractor(client).videosFromUrl(url)
|
||||||
}
|
}
|
||||||
|
@ -5,14 +5,13 @@ ext {
|
|||||||
extName = 'Animerco'
|
extName = 'Animerco'
|
||||||
pkgNameSuffix = 'ar.animerco'
|
pkgNameSuffix = 'ar.animerco'
|
||||||
extClass = '.Animerco'
|
extClass = '.Animerco'
|
||||||
extVersionCode = 29
|
extVersionCode = 30
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-gdriveplayer-extractor'))
|
implementation(project(':lib-gdriveplayer-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -162,24 +161,6 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val embedUrl = embedUrlT.replace("\\/", "/")
|
val embedUrl = embedUrlT.replace("\\/", "/")
|
||||||
|
|
||||||
when {
|
when {
|
||||||
embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
|
||||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
|
||||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
|
||||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
|
||||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
|
||||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
|
||||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
|
||||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
|
||||||
embedUrl.contains("sblanh.com") || embedUrl.contains("tvmshow.com") || embedUrl.contains("sbanh.com") ||
|
|
||||||
embedUrl.contains("streamovies.xyz")
|
|
||||||
-> {
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(embedUrl, headers)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
/*embedUrl.contains("ok.ru") -> {
|
|
||||||
val videos = OkruExtractor(client).videosFromUrl(embedUrl)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}*/
|
|
||||||
embedUrl.contains("dood") -> {
|
embedUrl.contains("dood") -> {
|
||||||
val video = DoodExtractor(client).videoFromUrl(embedUrl)
|
val video = DoodExtractor(client).videoFromUrl(embedUrl)
|
||||||
if (video != null) {
|
if (video != null) {
|
||||||
|
@ -5,12 +5,11 @@ ext {
|
|||||||
extName = 'Egy Dead'
|
extName = 'Egy Dead'
|
||||||
pkgNameSuffix = 'ar.egydead'
|
pkgNameSuffix = 'ar.egydead'
|
||||||
extClass = '.EgyDead'
|
extClass = '.EgyDead'
|
||||||
extVersionCode = 4
|
extVersionCode = 5
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-mixdrop-extractor'))
|
implementation(project(':lib-mixdrop-extractor'))
|
||||||
implementation('dev.datlag.jsunpacker:jsunpacker:1.0.1')
|
implementation('dev.datlag.jsunpacker:jsunpacker:1.0.1')
|
||||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -162,7 +161,7 @@ class EgyDead : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val request = client.newCall(GET(url, headers)).execute().asJsoup()
|
val request = client.newCall(GET(url, headers)).execute().asJsoup()
|
||||||
val data = JsUnpacker.unpackAndCombine(request.selectFirst("script:containsData(sources)")!!.data())!!
|
val data = JsUnpacker.unpackAndCombine(request.selectFirst("script:containsData(sources)")!!.data())!!
|
||||||
val m3u8 = SOURCE_URL_REGEX.find(data)!!.groupValues[1]
|
val m3u8 = SOURCE_URL_REGEX.find(data)!!.groupValues[1]
|
||||||
if(QUALITIES_REGEX.containsMatchIn(m3u8)){
|
if (QUALITIES_REGEX.containsMatchIn(m3u8)) {
|
||||||
val streamLink = QUALITIES_REGEX.find(m3u8)!!
|
val streamLink = QUALITIES_REGEX.find(m3u8)!!
|
||||||
val streamQuality = streamLink.groupValues[2].split(",").reversed()
|
val streamQuality = streamLink.groupValues[2].split(",").reversed()
|
||||||
val qualities = data.substringAfter("qualityLabels").substringBefore("}")
|
val qualities = data.substringAfter("qualityLabels").substringBefore("}")
|
||||||
@ -177,7 +176,6 @@ class EgyDead : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val qRegex = Regex("\".*?\"\\s*:\\s*\"(.*?)\"").find(qualities)!!
|
val qRegex = Regex("\".*?\"\\s*:\\s*\"(.*?)\"").find(qualities)!!
|
||||||
Video(m3u8, qRegex.groupValues[1], m3u8).let(::listOf)
|
Video(m3u8, qRegex.groupValues[1], m3u8).let(::listOf)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
url.contains("fanakishtuna") -> {
|
url.contains("fanakishtuna") -> {
|
||||||
val request = client.newCall(GET(url, headers)).execute().asJsoup()
|
val request = client.newCall(GET(url, headers)).execute().asJsoup()
|
||||||
@ -192,9 +190,7 @@ class EgyDead : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val streamLink = data.substringAfter("sources: [\"").substringBefore("\"]")
|
val streamLink = data.substringAfter("sources: [\"").substringBefore("\"]")
|
||||||
listOf(Video(streamLink, "Uqload: Mirror", streamLink))
|
listOf(Video(streamLink, "Uqload: Mirror", streamLink))
|
||||||
}
|
}
|
||||||
STREAMSB_REGEX.containsMatchIn(url) -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
}
|
|
||||||
else -> null
|
else -> null
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
}
|
}
|
||||||
@ -365,9 +361,9 @@ class EgyDead : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
screen.addPreference(defaultDomain)
|
screen.addPreference(defaultDomain)
|
||||||
screen.addPreference(videoQualityPref)
|
screen.addPreference(videoQualityPref)
|
||||||
}
|
}
|
||||||
//like|kharabnahk
|
|
||||||
|
// like|kharabnahk
|
||||||
companion object {
|
companion object {
|
||||||
private val STREAMSB_REGEX = Regex("(?:view|watch|embed(?:tv)?|tube|player|cloudemb|japopav|javplaya|p1ayerjavseen|gomovizplay|stream(?:ovies)?|vidmovie|javside|aintahalu|finaltayibin|yahlusubh|taeyabathuna|like|kharabnahk)?s{0,2}b?(?:embed\\d?|play\\d?|video|fast|full|streams{0,3}|the|speed|l?anh|tvmshow|longvu|arslanrocky|chill|rity|hight|brisk|face|lvturbo|net|one|asian|ani|rapid|sonic|lona)?\\.(?:com|net|org|one|tv|xyz|fun|pro|sbs)")
|
|
||||||
private val DOOD_REGEX = Regex("(do*d(?:stream)?\\.(?:com?|watch|to|s[ho]|cx|la|w[sf]|pm|re|yt|stream))/[de]/([0-9a-zA-Z]+)")
|
private val DOOD_REGEX = Regex("(do*d(?:stream)?\\.(?:com?|watch|to|s[ho]|cx|la|w[sf]|pm|re|yt|stream))/[de]/([0-9a-zA-Z]+)")
|
||||||
private val STREAMWISH_REGEX = Regex("ajmidyad|alhayabambi|atabknh[ks]|file")
|
private val STREAMWISH_REGEX = Regex("ajmidyad|alhayabambi|atabknh[ks]|file")
|
||||||
private val SOURCE_URL_REGEX = Regex("sources:\\s*\\[\\{\\s*\\t*file:\\s*[\"']([^\"']+)")
|
private val SOURCE_URL_REGEX = Regex("sources:\\s*\\[\\{\\s*\\t*file:\\s*[\"']([^\"']+)")
|
||||||
|
@ -127,20 +127,19 @@ class MyCima : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
return document.select("ul.WatchServersList li btn").parallelMap {
|
return document.select("ul.WatchServersList li btn").parallelMap {
|
||||||
val frameURL = it.attr("data-url")
|
val frameURL = it.attr("data-url")
|
||||||
runCatching {
|
runCatching {
|
||||||
if(it.parent()?.hasClass("MyCimaServer") == true)
|
if (it.parent()?.hasClass("MyCimaServer") == true) {
|
||||||
{
|
|
||||||
val referer = response.request.url.encodedPath
|
val referer = response.request.url.encodedPath
|
||||||
val newHeader = headers.newBuilder().add("referer", baseUrl + referer).build()
|
val newHeader = headers.newBuilder().add("referer", baseUrl + referer).build()
|
||||||
val iframeResponse = client.newCall(GET(frameURL, newHeader)).execute().asJsoup()
|
val iframeResponse = client.newCall(GET(frameURL, newHeader)).execute().asJsoup()
|
||||||
videosFromElement(iframeResponse.selectFirst(videoListSelector())!!)
|
videosFromElement(iframeResponse.selectFirst(videoListSelector())!!)
|
||||||
} else {
|
} else {
|
||||||
extractVideos(frameURL)
|
extractVideos(frameURL)
|
||||||
}
|
}
|
||||||
}.getOrElse { emptyList() }
|
}.getOrElse { emptyList() }
|
||||||
}.flatten()
|
}.flatten()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun extractVideos(url: String): List<Video>{
|
private fun extractVideos(url: String): List<Video> {
|
||||||
return when {
|
return when {
|
||||||
GOVAD_REGEX.containsMatchIn(url) -> {
|
GOVAD_REGEX.containsMatchIn(url) -> {
|
||||||
val finalUrl = GOVAD_REGEX.find(url)!!.groupValues[0]
|
val finalUrl = GOVAD_REGEX.find(url)!!.groupValues[0]
|
||||||
@ -207,7 +206,7 @@ class MyCima : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
when (filter) {
|
when (filter) {
|
||||||
is SearchCategoryList -> {
|
is SearchCategoryList -> {
|
||||||
val catQ = getSearchCategoryList()[filter.state].query
|
val catQ = getSearchCategoryList()[filter.state].query
|
||||||
val catUrl = "$baseUrl/search/$query/" + if(catQ == "page/" && page == 1) "" else "$catQ$page"
|
val catUrl = "$baseUrl/search/$query/" + if (catQ == "page/" && page == 1) "" else "$catQ$page"
|
||||||
return GET(catUrl, headers)
|
return GET(catUrl, headers)
|
||||||
}
|
}
|
||||||
else -> {}
|
else -> {}
|
||||||
@ -351,7 +350,7 @@ class MyCima : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
key = PREF_QUALITY_KEY
|
key = PREF_QUALITY_KEY
|
||||||
title = PREF_QUALITY_TITLE
|
title = PREF_QUALITY_TITLE
|
||||||
entries = PREF_QUALITY_ENTRIES
|
entries = PREF_QUALITY_ENTRIES
|
||||||
entryValues = PREF_QUALITY_ENTRIES.map { it.replace("p","") }.toTypedArray()
|
entryValues = PREF_QUALITY_ENTRIES.map { it.replace("p", "") }.toTypedArray()
|
||||||
setDefaultValue(PREF_QUALITY_DEFAULT)
|
setDefaultValue(PREF_QUALITY_DEFAULT)
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
setOnPreferenceChangeListener { _, newValue ->
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
|
@ -5,7 +5,7 @@ import eu.kanade.tachiyomi.network.GET
|
|||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
|
||||||
class GoVadExtractor(private val client:OkHttpClient) {
|
class GoVadExtractor(private val client: OkHttpClient) {
|
||||||
fun videosFromUrl(url: String, host: String): List<Video> {
|
fun videosFromUrl(url: String, host: String): List<Video> {
|
||||||
val doc = client.newCall(GET(url)).execute().asJsoup()
|
val doc = client.newCall(GET(url)).execute().asJsoup()
|
||||||
val script = doc.selectFirst("script:containsData(sources)")!!
|
val script = doc.selectFirst("script:containsData(sources)")!!
|
||||||
|
@ -10,7 +10,7 @@ class UQLoadExtractor(private val client: OkHttpClient) {
|
|||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||||
val check = document.selectFirst("script:containsData(sources)")!!.data()
|
val check = document.selectFirst("script:containsData(sources)")!!.data()
|
||||||
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
||||||
return when{
|
return when {
|
||||||
"soruces" in check -> Video(videoUrl, "UQLoad Mirror", videoUrl).let(::listOf)
|
"soruces" in check -> Video(videoUrl, "UQLoad Mirror", videoUrl).let(::listOf)
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
|
@ -7,13 +7,12 @@ ext {
|
|||||||
extName = 'Okanime'
|
extName = 'Okanime'
|
||||||
pkgNameSuffix = 'ar.okanime'
|
pkgNameSuffix = 'ar.okanime'
|
||||||
extClass = '.Okanime'
|
extClass = '.Okanime'
|
||||||
extVersionCode = 1
|
extVersionCode = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(":lib-dood-extractor"))
|
implementation(project(":lib-dood-extractor"))
|
||||||
implementation(project(":lib-voe-extractor"))
|
implementation(project(":lib-voe-extractor"))
|
||||||
implementation(project(":lib-streamsb-extractor"))
|
|
||||||
implementation(project(":lib-okru-extractor"))
|
implementation(project(":lib-okru-extractor"))
|
||||||
implementation(project(":lib-vidbom-extractor"))
|
implementation(project(":lib-vidbom-extractor"))
|
||||||
implementation(project(":lib-mp4upload-extractor"))
|
implementation(project(":lib-mp4upload-extractor"))
|
||||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
|||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -161,7 +160,6 @@ class Okanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
||||||
private val okruExtractor by lazy { OkruExtractor(client) }
|
private val okruExtractor by lazy { OkruExtractor(client) }
|
||||||
private val voeExtractor by lazy { VoeExtractor(client) }
|
private val voeExtractor by lazy { VoeExtractor(client) }
|
||||||
private val streamSbExtractor by lazy { StreamSBExtractor(client) }
|
|
||||||
private val vidBomExtractor by lazy { VidBomExtractor(client) }
|
private val vidBomExtractor by lazy { VidBomExtractor(client) }
|
||||||
|
|
||||||
private fun extractVideosFromUrl(url: String, quality: String, selection: Set<String>): List<Video> {
|
private fun extractVideosFromUrl(url: String, quality: String, selection: Set<String>): List<Video> {
|
||||||
@ -181,9 +179,6 @@ class Okanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
voeExtractor.videoFromUrl(url, "VoeSX ($quality)")
|
voeExtractor.videoFromUrl(url, "VoeSX ($quality)")
|
||||||
?.let(::listOf)
|
?.let(::listOf)
|
||||||
}
|
}
|
||||||
STREAM_SB_DOMAINS.any(url::contains) && selection.contains("StreamSB") -> {
|
|
||||||
streamSbExtractor.videosFromUrl(url, headers)
|
|
||||||
}
|
|
||||||
VID_BOM_DOMAINS.any(url::contains) && selection.contains("VidBom") -> {
|
VID_BOM_DOMAINS.any(url::contains) && selection.contains("VidBom") -> {
|
||||||
vidBomExtractor.videosFromUrl(url)
|
vidBomExtractor.videosFromUrl(url)
|
||||||
}
|
}
|
||||||
@ -251,17 +246,6 @@ class Okanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
companion object {
|
companion object {
|
||||||
const val PREFIX_SEARCH = "id:"
|
const val PREFIX_SEARCH = "id:"
|
||||||
|
|
||||||
private val STREAM_SB_DOMAINS = listOf(
|
|
||||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
|
||||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
|
||||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
|
||||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
|
||||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
|
||||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
|
||||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
|
||||||
"streamovies.xyz", "sblona.com", "likessb.com",
|
|
||||||
)
|
|
||||||
|
|
||||||
private val VID_BOM_DOMAINS = listOf("vidbam", "vadbam", "vidbom", "vidbm")
|
private val VID_BOM_DOMAINS = listOf("vidbam", "vadbam", "vidbom", "vidbm")
|
||||||
|
|
||||||
private const val PREF_QUALITY_KEY = "preferred_quality"
|
private const val PREF_QUALITY_KEY = "preferred_quality"
|
||||||
@ -271,7 +255,7 @@ class Okanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
private const val PREF_HOSTER_SELECTION_KEY = "pref_hoster_selection"
|
private const val PREF_HOSTER_SELECTION_KEY = "pref_hoster_selection"
|
||||||
private const val PREF_HOSTER_SELECTION_TITLE = "Enable/Disable hosts"
|
private const val PREF_HOSTER_SELECTION_TITLE = "Enable/Disable hosts"
|
||||||
private val PREF_HOSTER_SELECTION_ENTRIES = arrayOf("Dood", "StreamSB", "Voe", "Mp4upload", "VidBom", "Okru")
|
private val PREF_HOSTER_SELECTION_ENTRIES = arrayOf("Dood", "Voe", "Mp4upload", "VidBom", "Okru")
|
||||||
private val PREF_HOSTER_SELECTION_DEFAULT by lazy { PREF_HOSTER_SELECTION_ENTRIES.toSet() }
|
private val PREF_HOSTER_SELECTION_DEFAULT by lazy { PREF_HOSTER_SELECTION_ENTRIES.toSet() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,12 +7,11 @@ ext {
|
|||||||
extName = 'WIT ANIME'
|
extName = 'WIT ANIME'
|
||||||
pkgNameSuffix = 'ar.witanime'
|
pkgNameSuffix = 'ar.witanime'
|
||||||
extClass = '.WitAnime'
|
extClass = '.WitAnime'
|
||||||
extVersionCode = 40
|
extVersionCode = 41
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@ -106,9 +105,7 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
url.contains("dropbox") -> {
|
url.contains("dropbox") -> {
|
||||||
listOf(Video(url, "Dropbox mirror", url))
|
listOf(Video(url, "Dropbox mirror", url))
|
||||||
}
|
}
|
||||||
url.contains("sbanh") -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
}
|
|
||||||
url.contains("dailymotion") -> {
|
url.contains("dailymotion") -> {
|
||||||
DailymotionExtractor(client).videosFromUrl(url, headers)
|
DailymotionExtractor(client).videosFromUrl(url, headers)
|
||||||
}
|
}
|
||||||
|
@ -8,14 +8,13 @@ ext {
|
|||||||
extName = 'Aniking'
|
extName = 'Aniking'
|
||||||
pkgNameSuffix = 'de.aniking'
|
pkgNameSuffix = 'de.aniking'
|
||||||
extClass = '.Aniking'
|
extClass = '.Aniking'
|
||||||
extVersionCode = 14
|
extVersionCode = 15
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -137,10 +136,6 @@ class Aniking : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
?.let(::listOf)
|
?.let(::listOf)
|
||||||
}
|
}
|
||||||
|
|
||||||
("https://viewsb.com" in url || "https://watchsb.com" in url) && "streamsb" in hosterSelection -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}.getOrNull() ?: emptyList()
|
}.getOrNull() ?: emptyList()
|
||||||
@ -231,13 +226,13 @@ class Aniking : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
private const val PREF_HOSTER_KEY = "preferred_hoster"
|
private const val PREF_HOSTER_KEY = "preferred_hoster"
|
||||||
private const val PREF_HOSTER_TITLE = "Standard-Hoster"
|
private const val PREF_HOSTER_TITLE = "Standard-Hoster"
|
||||||
private const val PREF_HOSTER_DEFAULT = "https://streamtape.com"
|
private const val PREF_HOSTER_DEFAULT = "https://streamtape.com"
|
||||||
private val PREF_HOSTER_ENTRIES = arrayOf("Streamtape", "Doodstream", "StreamZ", "StreamSB")
|
private val PREF_HOSTER_ENTRIES = arrayOf("Streamtape", "Doodstream", "StreamZ")
|
||||||
private val PREF_HOSTER_VALUES = arrayOf("https://streamz.ws", "https://dood", "https://voe.sx", "https://viewsb.com")
|
private val PREF_HOSTER_VALUES = arrayOf("https://streamz.ws", "https://dood", "https://voe.sx")
|
||||||
|
|
||||||
private const val PREF_SELECTION_KEY = "hoster_selection"
|
private const val PREF_SELECTION_KEY = "hoster_selection"
|
||||||
private const val PREF_SELECTION_TITLE = "Hoster auswählen"
|
private const val PREF_SELECTION_TITLE = "Hoster auswählen"
|
||||||
private val PREF_SELECTION_ENTRIES = PREF_HOSTER_ENTRIES
|
private val PREF_SELECTION_ENTRIES = PREF_HOSTER_ENTRIES
|
||||||
private val PREF_SELECTION_VALUES = arrayOf("stape", "dood", "streamz", "streamsb")
|
private val PREF_SELECTION_VALUES = arrayOf("stape", "dood", "streamz")
|
||||||
private val PREF_SELECTION_DEFAULT = PREF_SELECTION_VALUES.toSet()
|
private val PREF_SELECTION_DEFAULT = PREF_SELECTION_VALUES.toSet()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,12 +6,8 @@ ext {
|
|||||||
extName = 'Anime-Base'
|
extName = 'Anime-Base'
|
||||||
pkgNameSuffix = 'de.animebase'
|
pkgNameSuffix = 'de.animebase'
|
||||||
extClass = '.AnimeBase'
|
extClass = '.AnimeBase'
|
||||||
extVersionCode = 11
|
extVersionCode = 12
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -10,7 +10,6 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -118,110 +117,8 @@ class AnimeBase : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
// Video Extractor
|
// Video Extractor
|
||||||
|
|
||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response) =
|
||||||
return videosFromElement(response)
|
throw Exception("This source only uses StreamSB as video hoster, and StreamSB is down.")
|
||||||
}
|
|
||||||
|
|
||||||
private fun videosFromElement(response: Response): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
val epurl = response.request.url.toString()
|
|
||||||
val epid = epurl.substringAfter("episode/").substringBefore("/")
|
|
||||||
val epnum = epurl.substringAfter("$epid/").substringBefore("/")
|
|
||||||
if (epurl.substringAfter("$epnum/").substringBefore("/").contains("0")) {
|
|
||||||
val host = epurl.substringAfter("$epnum/0/").substringBefore("/")
|
|
||||||
try {
|
|
||||||
if (!epurl.substringAfter("$host/").contains("2")) {
|
|
||||||
try {
|
|
||||||
val subdoc = client.newCall(GET("$baseUrl/episode/$epid/$epnum/0/$host/0")).execute().asJsoup()
|
|
||||||
val sublink = subdoc.toString()
|
|
||||||
.substringAfter("url=").substringBefore("\"")
|
|
||||||
val domain = sublink.substringAfter("https://").substringBefore("/")
|
|
||||||
val id = sublink.substringAfter("https://$domain/").substringBefore(".html")
|
|
||||||
val url = "https://$domain/e/$id.html"
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, suffix = "SUB")
|
|
||||||
videoList.addAll(videos)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/$epnum/1/$host/0")).execute().asJsoup()
|
|
||||||
val dublink = dubdoc.toString()
|
|
||||||
.substringAfter("url=").substringBefore("\"")
|
|
||||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
|
||||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
|
||||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
|
||||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
|
||||||
videoList.addAll(dubvideos)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
val subdoc = client.newCall(GET("$baseUrl/episode/$epid/$epnum/0/$host/2")).execute().asJsoup()
|
|
||||||
val sublink = subdoc.toString()
|
|
||||||
.substringAfter("url=").substringBefore("\"")
|
|
||||||
val domain = sublink.substringAfter("https://").substringBefore("/")
|
|
||||||
val id = sublink.substringAfter("https://$domain/").substringBefore(".html")
|
|
||||||
val url = "https://$domain/e/$id.html"
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, suffix = "SUB")
|
|
||||||
videoList.addAll(videos)
|
|
||||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/${epnum.toInt() - 1}/1/$host/2")).execute().asJsoup()
|
|
||||||
val dublink = dubdoc.toString()
|
|
||||||
.substringAfter("url=").substringBefore("\"")
|
|
||||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
|
||||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
|
||||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
|
||||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
|
||||||
videoList.addAll(dubvideos)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (epurl.substringAfter("$host/").contains("1")) {
|
|
||||||
try {
|
|
||||||
val subdoc = client.newCall(GET("$baseUrl/episode/$epid/$epnum/0/$host/1")).execute().asJsoup()
|
|
||||||
val sublink = subdoc.toString()
|
|
||||||
.substringAfter("url=").substringBefore("\"")
|
|
||||||
val domain = sublink.substringAfter("https://").substringBefore("/")
|
|
||||||
val id = sublink.substringAfter("https://$domain/").substringBefore(".html")
|
|
||||||
val url = "https://$domain/e/$id.html"
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, suffix = "SUB")
|
|
||||||
videoList.addAll(videos)
|
|
||||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/${epnum.toInt() - 1}/1/$host/1")).execute().asJsoup()
|
|
||||||
val dublink = dubdoc.toString()
|
|
||||||
.substringAfter("url=").substringBefore("\"")
|
|
||||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
|
||||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
|
||||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
|
||||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
|
||||||
videoList.addAll(dubvideos)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
throw Exception("To many Requests")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
val host = epurl.substringAfter("$epnum/1/").substringBefore("/")
|
|
||||||
if (epurl.substringAfter("$host/").contains("2")) {
|
|
||||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/${epnum.toInt() - 1}/1/$host/2")).execute().asJsoup()
|
|
||||||
val dublink = dubdoc.toString()
|
|
||||||
.substringAfter("url=").substringBefore("\"")
|
|
||||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
|
||||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
|
||||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
|
||||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
|
||||||
videoList.addAll(dubvideos)
|
|
||||||
} else {
|
|
||||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/${epnum.toInt() - 1}/1/$host/1")).execute().asJsoup()
|
|
||||||
val dublink = dubdoc.toString()
|
|
||||||
.substringAfter("url=").substringBefore("\"")
|
|
||||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
|
||||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
|
||||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
|
||||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
|
||||||
videoList.addAll(dubvideos)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return videoList.reversed()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun List<Video>.sort(): List<Video> {
|
override fun List<Video>.sort(): List<Video> {
|
||||||
val hoster = preferences.getString("preferred_sub", null)
|
val hoster = preferences.getString("preferred_sub", null)
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.de.animestream
|
package eu.kanade.tachiyomi.animeextension.de.animestream
|
||||||
|
|
||||||
import android.app.Application
|
|
||||||
import eu.kanade.tachiyomi.animeextension.de.animestream.extractors.MetaExtractor
|
import eu.kanade.tachiyomi.animeextension.de.animestream.extractors.MetaExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||||
@ -14,7 +13,6 @@ import okhttp3.Request
|
|||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
import uy.kohesive.injekt.Injekt
|
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import kotlin.Exception
|
import kotlin.Exception
|
||||||
|
|
||||||
@ -91,7 +89,7 @@ class AnimeStream : ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
return videoList.reversed()
|
return videoList.reversed()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun videoListSelector() = throw Exception("not used")
|
override fun videoListSelector() = throw Exception("not used")
|
||||||
|
|
||||||
override fun videoFromElement(element: Element) = throw Exception("not used")
|
override fun videoFromElement(element: Element) = throw Exception("not used")
|
||||||
|
@ -30,7 +30,7 @@ class SerienstreamInterceptor(private val client: OkHttpClient, private val pref
|
|||||||
}
|
}
|
||||||
|
|
||||||
val newCookie = getNewCookie(originalRequest.url)
|
val newCookie = getNewCookie(originalRequest.url)
|
||||||
//?: throw Exception("Bitte im Browser oder in den Erweiterungs-Einstellungen einloggen.")
|
// ?: throw Exception("Bitte im Browser oder in den Erweiterungs-Einstellungen einloggen.")
|
||||||
val newCookieHeader = buildString {
|
val newCookieHeader = buildString {
|
||||||
(oldCookie + newCookie).forEachIndexed { index, cookie ->
|
(oldCookie + newCookie).forEachIndexed { index, cookie ->
|
||||||
if (index > 0) append("; ")
|
if (index > 0) append("; ")
|
||||||
|
@ -6,14 +6,13 @@ ext {
|
|||||||
extName = 'AllAnime'
|
extName = 'AllAnime'
|
||||||
pkgNameSuffix = 'en.allanime'
|
pkgNameSuffix = 'en.allanime'
|
||||||
extClass = '.AllAnime'
|
extClass = '.AllAnime'
|
||||||
extVersionCode = 25
|
extVersionCode = 26
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamlare-extractor'))
|
implementation(project(':lib-streamlare-extractor'))
|
||||||
implementation(project(':lib-mp4upload-extractor'))
|
implementation(project(':lib-mp4upload-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
|
@ -18,7 +18,6 @@ import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
|||||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||||
@ -304,7 +303,6 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
|
|
||||||
// list of alternative hosters
|
// list of alternative hosters
|
||||||
val mappings = listOf(
|
val mappings = listOf(
|
||||||
"streamsb" to listOf("streamsb"),
|
|
||||||
"vidstreaming" to listOf("vidstreaming", "https://gogo", "playgo1.cc", "playtaku"),
|
"vidstreaming" to listOf("vidstreaming", "https://gogo", "playgo1.cc", "playtaku"),
|
||||||
"doodstream" to listOf("dood"),
|
"doodstream" to listOf("dood"),
|
||||||
"okru" to listOf("ok.ru"),
|
"okru" to listOf("ok.ru"),
|
||||||
@ -380,14 +378,6 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
) to server.priority,
|
) to server.priority,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
sName == "streamsb" -> {
|
|
||||||
val extractor = StreamSBExtractor(client)
|
|
||||||
runCatching {
|
|
||||||
extractor.videosFromUrl(server.sourceUrl, headers)
|
|
||||||
}.getOrNull()?.map {
|
|
||||||
Pair(it, server.priority)
|
|
||||||
} ?: emptyList()
|
|
||||||
}
|
|
||||||
sName == "vidstreaming" -> {
|
sName == "vidstreaming" -> {
|
||||||
val extractor = VidstreamingExtractor(client, json)
|
val extractor = VidstreamingExtractor(client, json)
|
||||||
runCatching {
|
runCatching {
|
||||||
@ -538,7 +528,6 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
"okru",
|
"okru",
|
||||||
"mp4upload",
|
"mp4upload",
|
||||||
"streamlare",
|
"streamlare",
|
||||||
"streamsb",
|
|
||||||
"doodstream",
|
"doodstream",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -5,12 +5,11 @@ ext {
|
|||||||
extName = 'Animension'
|
extName = 'Animension'
|
||||||
pkgNameSuffix = 'en.animension'
|
pkgNameSuffix = 'en.animension'
|
||||||
extClass = '.Animension'
|
extClass = '.Animension'
|
||||||
extVersionCode = 19
|
extVersionCode = 20
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
@ -99,14 +98,6 @@ class Animension() : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
for (key in videos.keys.toList()) {
|
for (key in videos.keys.toList()) {
|
||||||
val url = videos[key]!!.jsonPrimitive.content
|
val url = videos[key]!!.jsonPrimitive.content
|
||||||
when {
|
when {
|
||||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
|
||||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("ssbstream.net") ||
|
|
||||||
url.contains("p1ayerjavseen.com") || url.contains("streamsss.net") || url.contains("sbplay2.xyz") ||
|
|
||||||
url.contains("sbasian.pro")
|
|
||||||
-> {
|
|
||||||
videoList.addAll(StreamSBExtractor(client).videosFromUrl(url, headers))
|
|
||||||
}
|
|
||||||
|
|
||||||
url.contains("dood") -> {
|
url.contains("dood") -> {
|
||||||
val video = DoodExtractor(client).videoFromUrl(url)
|
val video = DoodExtractor(client).videoFromUrl(url)
|
||||||
if (video != null) {
|
if (video != null) {
|
||||||
|
@ -5,13 +5,12 @@ ext {
|
|||||||
extName = 'AnimeOwl'
|
extName = 'AnimeOwl'
|
||||||
pkgNameSuffix = 'en.animeowl'
|
pkgNameSuffix = 'en.animeowl'
|
||||||
extClass = '.AnimeOwl'
|
extClass = '.AnimeOwl'
|
||||||
extVersionCode = 12
|
extVersionCode = 13
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -290,21 +289,6 @@ class AnimeOwl : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// StreamSB mirror:
|
|
||||||
document.select("div#list-server-more > ul > li.linkserver:contains(StreamSB)")
|
|
||||||
.firstOrNull()?.attr("data-video")
|
|
||||||
?.let { link ->
|
|
||||||
StreamSBExtractor(client).videosFromUrl(link, headers).map {
|
|
||||||
videoList.add(
|
|
||||||
Video(
|
|
||||||
it.url,
|
|
||||||
it.quality + " $lang",
|
|
||||||
it.videoUrl,
|
|
||||||
headers = it.headers,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return videoList
|
return videoList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,13 +5,12 @@ ext {
|
|||||||
extName = 'AsianLoad'
|
extName = 'AsianLoad'
|
||||||
pkgNameSuffix = 'en.asianload'
|
pkgNameSuffix = 'en.asianload'
|
||||||
extClass = '.AsianLoad'
|
extClass = '.AsianLoad'
|
||||||
extVersionCode = 31
|
extVersionCode = 32
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -104,14 +103,6 @@ class AsianLoad : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
val url = element.attr("data-video")
|
val url = element.attr("data-video")
|
||||||
when {
|
when {
|
||||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
|
||||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("ssbstream.net") ||
|
|
||||||
url.contains("p1ayerjavseen.com") || url.contains("streamsss.net") || url.contains("sbplay2.xyz") ||
|
|
||||||
url.contains("sbasian.pro")
|
|
||||||
-> {
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
url.contains("dood") -> {
|
url.contains("dood") -> {
|
||||||
val video = DoodExtractor(client).videoFromUrl(url)
|
val video = DoodExtractor(client).videoFromUrl(url)
|
||||||
if (video != null) {
|
if (video != null) {
|
||||||
|
@ -5,13 +5,12 @@ ext {
|
|||||||
extName = 'DramaCool'
|
extName = 'DramaCool'
|
||||||
pkgNameSuffix = 'en.dramacool'
|
pkgNameSuffix = 'en.dramacool'
|
||||||
extClass = '.DramaCool'
|
extClass = '.DramaCool'
|
||||||
extVersionCode = 39
|
extVersionCode = 40
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-playlist-utils'))
|
implementation(project(':lib-playlist-utils'))
|
||||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -154,15 +153,6 @@ class DramaCool : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
val url = element.attr("data-video")
|
val url = element.attr("data-video")
|
||||||
when {
|
when {
|
||||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
|
||||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("ssbstream.net") ||
|
|
||||||
url.contains("p1ayerjavseen.com") || url.contains("streamsss.net") || url.contains("sbplay2.xyz") ||
|
|
||||||
url.contains("sbasian.pro")
|
|
||||||
-> {
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
|
|
||||||
url.contains("dood") -> {
|
url.contains("dood") -> {
|
||||||
val video = DoodExtractor(client).videoFromUrl(url)
|
val video = DoodExtractor(client).videoFromUrl(url)
|
||||||
if (video != null) {
|
if (video != null) {
|
||||||
|
@ -5,13 +5,12 @@ ext {
|
|||||||
extName = 'GenoAnime'
|
extName = 'GenoAnime'
|
||||||
pkgNameSuffix = 'en.genoanime'
|
pkgNameSuffix = 'en.genoanime'
|
||||||
extClass = '.GenoAnime'
|
extClass = '.GenoAnime'
|
||||||
extVersionCode = 30
|
extVersionCode = 31
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -121,17 +120,6 @@ class GenoAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val location = element.ownerDocument()!!.location()
|
val location = element.ownerDocument()!!.location()
|
||||||
val videoHeaders = Headers.headersOf("Referer", location)
|
val videoHeaders = Headers.headersOf("Referer", location)
|
||||||
when {
|
when {
|
||||||
url.contains("sbembed.com") || url.contains("sbembed1.com") || url.contains("sbplay.org") ||
|
|
||||||
url.contains("sbvideo.net") || url.contains("streamsb.net") || url.contains("sbplay.one") ||
|
|
||||||
url.contains("cloudemb.com") || url.contains("playersb.com") || url.contains("tubesb.com") ||
|
|
||||||
url.contains("sbplay1.com") || url.contains("embedsb.com") || url.contains("watchsb.com") ||
|
|
||||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
|
||||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("javplaya.com") ||
|
|
||||||
url.contains("ssbstream.net") || url.contains("p1ayerjavseen.com") || url.contains("sbthe.com")
|
|
||||||
-> {
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
url.contains("dood") -> {
|
url.contains("dood") -> {
|
||||||
val video = DoodExtractor(client).videoFromUrl(url)
|
val video = DoodExtractor(client).videoFromUrl(url)
|
||||||
if (video != null) {
|
if (video != null) {
|
||||||
|
@ -1,11 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.en.kisskh
|
package eu.kanade.tachiyomi.animeextension.en.kisskh
|
||||||
|
|
||||||
import android.app.Application
|
|
||||||
import android.content.SharedPreferences
|
|
||||||
import androidx.preference.ListPreference
|
|
||||||
import androidx.preference.PreferenceScreen
|
|
||||||
import eu.kanade.tachiyomi.animeextension.en.kisskh.extractors.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
||||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||||
@ -27,10 +21,9 @@ import okhttp3.Headers
|
|||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import uy.kohesive.injekt.Injekt
|
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
class KissKH : ConfigurableAnimeSource, AnimeHttpSource() {
|
class KissKH : AnimeHttpSource() {
|
||||||
|
|
||||||
override val name = "KissKH"
|
override val name = "KissKH"
|
||||||
|
|
||||||
@ -42,10 +35,6 @@ class KissKH : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
|
|
||||||
override val client: OkHttpClient = network.client
|
override val client: OkHttpClient = network.client
|
||||||
|
|
||||||
private val preferences: SharedPreferences by lazy {
|
|
||||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
|
||||||
}
|
|
||||||
|
|
||||||
private val json = Json {
|
private val json = Json {
|
||||||
isLenient = true
|
isLenient = true
|
||||||
ignoreUnknownKeys = true
|
ignoreUnknownKeys = true
|
||||||
@ -138,31 +127,10 @@ class KissKH : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
val videoUrl = jObject["Video"]!!.jsonPrimitive.content
|
val videoUrl = jObject["Video"]!!.jsonPrimitive.content
|
||||||
videoList.add(Video(videoUrl, "FirstParty", videoUrl, subtitleTracks = subList, headers = Headers.headersOf("referer", "https://kisskh.me/", "origin", "https://kisskh.me")))
|
videoList.add(Video(videoUrl, "FirstParty", videoUrl, subtitleTracks = subList, headers = Headers.headersOf("referer", "https://kisskh.me/", "origin", "https://kisskh.me")))
|
||||||
val thridpartyurl = jObject["ThirdParty"]!!.jsonPrimitive.content
|
|
||||||
|
|
||||||
val video = StreamSBExtractor(client).videosFromUrl(thridpartyurl, headers, common = true)
|
|
||||||
videoList.addAll(video)
|
|
||||||
return videoList.reversed()
|
return videoList.reversed()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun List<Video>.sort(): List<Video> {
|
|
||||||
val hoster = preferences.getString("preferred_hoster", null)
|
|
||||||
if (hoster != null) {
|
|
||||||
val newList = mutableListOf<Video>()
|
|
||||||
var preferred = 0
|
|
||||||
for (video in this) {
|
|
||||||
if (video.quality.contains(hoster)) {
|
|
||||||
newList.add(preferred, video)
|
|
||||||
preferred++
|
|
||||||
} else {
|
|
||||||
newList.add(video)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newList
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
// Search
|
// Search
|
||||||
|
|
||||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request =
|
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request =
|
||||||
@ -240,25 +208,4 @@ class KissKH : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
return AnimesPage(animeList, hasNextPage)
|
return AnimesPage(animeList, hasNextPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preferences
|
|
||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
|
||||||
val hosterPref = ListPreference(screen.context).apply {
|
|
||||||
key = "preferred_hoster"
|
|
||||||
title = "Standard-Hoster"
|
|
||||||
entries = arrayOf("StreamSB", "FirstParty")
|
|
||||||
entryValues = arrayOf("https://streamsss.net", "FirstParty")
|
|
||||||
setDefaultValue("FirstParty")
|
|
||||||
summary = "%s"
|
|
||||||
|
|
||||||
setOnPreferenceChangeListener { _, newValue ->
|
|
||||||
val selected = newValue as String
|
|
||||||
val index = findIndexOfValue(selected)
|
|
||||||
val entry = entryValues[index] as String
|
|
||||||
preferences.edit().putString(key, entry).commit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
screen.addPreference(hosterPref)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,114 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.en.kisskh.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import kotlinx.serialization.decodeFromString
|
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
import kotlinx.serialization.json.JsonObject
|
|
||||||
import kotlinx.serialization.json.jsonObject
|
|
||||||
import okhttp3.Headers
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class StreamSBExtractor(private val client: OkHttpClient) {
|
|
||||||
|
|
||||||
protected fun bytesToHex(bytes: ByteArray): String {
|
|
||||||
val hexArray = "0123456789ABCDEF".toCharArray()
|
|
||||||
val hexChars = CharArray(bytes.size * 2)
|
|
||||||
for (j in bytes.indices) {
|
|
||||||
val v = bytes[j].toInt() and 0xFF
|
|
||||||
|
|
||||||
hexChars[j * 2] = hexArray[v ushr 4]
|
|
||||||
hexChars[j * 2 + 1] = hexArray[v and 0x0F]
|
|
||||||
}
|
|
||||||
return String(hexChars)
|
|
||||||
}
|
|
||||||
|
|
||||||
// animension, asianload and dramacool uses "common = false"
|
|
||||||
private fun fixUrl(url: String, common: Boolean): String {
|
|
||||||
val sbUrl = url.substringBefore("/e/")
|
|
||||||
val id = url.substringAfter("/e/")
|
|
||||||
.substringBefore("?")
|
|
||||||
.substringBefore(".html")
|
|
||||||
return if (common) {
|
|
||||||
val hexBytes = bytesToHex(id.toByteArray())
|
|
||||||
"$sbUrl/sources49/625a364258615242766475327c7c${hexBytes}7c7c4761574550654f7461566d347c7c73747265616d7362"
|
|
||||||
} else {
|
|
||||||
"$sbUrl/sources49/${bytesToHex("||$id||||streamsb".toByteArray())}/"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun videosFromUrl(url: String, headers: Headers, prefix: String = "", suffix: String = "", common: Boolean = true): List<Video> {
|
|
||||||
val newHeaders = headers.newBuilder()
|
|
||||||
.set("referer", url)
|
|
||||||
.set("watchsb", "sbstream")
|
|
||||||
.set("authority", "embedsb.com")
|
|
||||||
.build()
|
|
||||||
return try {
|
|
||||||
val master = fixUrl(url, common)
|
|
||||||
val json = Json.decodeFromString<JsonObject>(
|
|
||||||
client.newCall(GET(master, newHeaders))
|
|
||||||
.execute().body.string(),
|
|
||||||
)
|
|
||||||
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, newHeaders))
|
|
||||||
.execute()
|
|
||||||
.body.string()
|
|
||||||
val separator = "#EXT-X-STREAM-INF"
|
|
||||||
masterPlaylist.substringAfter(separator).split(separator).map {
|
|
||||||
val resolution = it.substringAfter("RESOLUTION=")
|
|
||||||
.substringBefore("\n")
|
|
||||||
.substringAfter("x")
|
|
||||||
.substringBefore(",") + "p"
|
|
||||||
val quality = ("StreamSB:" + resolution).let {
|
|
||||||
if (prefix.isNotBlank()) {
|
|
||||||
"$prefix $it"
|
|
||||||
} else {
|
|
||||||
it
|
|
||||||
}
|
|
||||||
}.let {
|
|
||||||
if (suffix.isNotBlank()) {
|
|
||||||
"$it $suffix"
|
|
||||||
} else {
|
|
||||||
it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val videoUrl = it.substringAfter("\n").substringBefore("\n")
|
|
||||||
Video(videoUrl, quality, videoUrl, headers = newHeaders)
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
emptyList<Video>()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun videosFromDecryptedUrl(realUrl: String, headers: Headers, prefix: String = "", suffix: String = ""): List<Video> {
|
|
||||||
return try {
|
|
||||||
val json = Json.decodeFromString<JsonObject>(client.newCall(GET(realUrl, headers)).execute().body.string())
|
|
||||||
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body.string()
|
|
||||||
val separator = "#EXT-X-STREAM-INF"
|
|
||||||
masterPlaylist.substringAfter(separator).split(separator).map {
|
|
||||||
val resolution = it.substringAfter("RESOLUTION=")
|
|
||||||
.substringBefore("\n")
|
|
||||||
.substringAfter("x")
|
|
||||||
.substringBefore(",") + "p"
|
|
||||||
val quality = ("StreamSB:$resolution").let {
|
|
||||||
if (prefix.isNotBlank()) {
|
|
||||||
"$prefix $it"
|
|
||||||
} else {
|
|
||||||
it
|
|
||||||
}
|
|
||||||
}.let {
|
|
||||||
if (suffix.isNotBlank()) {
|
|
||||||
"$it $suffix"
|
|
||||||
} else {
|
|
||||||
it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val videoUrl = it.substringAfter("\n").substringBefore("\n")
|
|
||||||
Video(videoUrl, quality, videoUrl, headers = headers)
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
emptyList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,13 +6,12 @@ ext {
|
|||||||
extName = 'Membed'
|
extName = 'Membed'
|
||||||
pkgNameSuffix = 'en.vidembed'
|
pkgNameSuffix = 'en.vidembed'
|
||||||
extClass = '.Membed'
|
extClass = '.Membed'
|
||||||
extVersionCode = 30
|
extVersionCode = 31
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-mixdrop-extractor'))
|
implementation(project(':lib-mixdrop-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@ -121,9 +120,6 @@ class Membed : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
serverName.contains("DoodStream") -> {
|
serverName.contains("DoodStream") -> {
|
||||||
DoodExtractor(client).videosFromUrl(url)
|
DoodExtractor(client).videosFromUrl(url)
|
||||||
}
|
}
|
||||||
serverName.contains("StreamSB") -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
}
|
|
||||||
serverName.contains("Mixdrop") -> {
|
serverName.contains("Mixdrop") -> {
|
||||||
MixDropExtractor(client).videoFromUrl(url)
|
MixDropExtractor(client).videoFromUrl(url)
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'Animefenix'
|
extName = 'Animefenix'
|
||||||
pkgNameSuffix = 'es.animefenix'
|
pkgNameSuffix = 'es.animefenix'
|
||||||
extClass = '.Animefenix'
|
extClass = '.Animefenix'
|
||||||
extVersionCode = 24
|
extVersionCode = 25
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13,7 +13,6 @@ dependencies {
|
|||||||
implementation(project(':lib-mp4upload-extractor'))
|
implementation(project(':lib-mp4upload-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -120,11 +119,6 @@ class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
videoList.add(video)
|
videoList.add(video)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
realUrl.contains("sbthe") -> {
|
|
||||||
videoList.addAll(
|
|
||||||
StreamSBExtractor(client).videosFromUrl(realUrl, headers),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
realUrl.contains("mp4upload") -> {
|
realUrl.contains("mp4upload") -> {
|
||||||
val videos = Mp4uploadExtractor(client).videosFromUrl(realUrl, headers)
|
val videos = Mp4uploadExtractor(client).videosFromUrl(realUrl, headers)
|
||||||
videoList.addAll(videos)
|
videoList.addAll(videos)
|
||||||
@ -333,12 +327,10 @@ class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
title = "Preferred quality"
|
title = "Preferred quality"
|
||||||
entries = arrayOf(
|
entries = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
"Amazon", "AmazonES", "StreamTape", "Fireload", "Mp4upload",
|
"Amazon", "AmazonES", "StreamTape", "Fireload", "Mp4upload",
|
||||||
)
|
)
|
||||||
entryValues = arrayOf(
|
entryValues = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
"Amazon", "AmazonES", "StreamTape", "Fireload", "Mp4upload",
|
"Amazon", "AmazonES", "StreamTape", "Fireload", "Mp4upload",
|
||||||
)
|
)
|
||||||
setDefaultValue("Amazon")
|
setDefaultValue("Amazon")
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'AnimeFLV'
|
extName = 'AnimeFLV'
|
||||||
pkgNameSuffix = 'es.animeflv'
|
pkgNameSuffix = 'es.animeflv'
|
||||||
extClass = '.AnimeFlv'
|
extClass = '.AnimeFlv'
|
||||||
extVersionCode = 46
|
extVersionCode = 47
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13,7 +13,6 @@ dependencies {
|
|||||||
implementation(project(':lib-yourupload-extractor'))
|
implementation(project(':lib-yourupload-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -117,7 +116,6 @@ class AnimeFlv : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
var url = json!!["code"]!!.jsonPrimitive!!.content
|
var url = json!!["code"]!!.jsonPrimitive!!.content
|
||||||
val extractedVideos = runCatching {
|
val extractedVideos = runCatching {
|
||||||
when (quality) {
|
when (quality) {
|
||||||
"SB" -> StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
"Stape" -> {
|
"Stape" -> {
|
||||||
val stapeUrl = json!!["url"]!!.jsonPrimitive!!.content
|
val stapeUrl = json!!["url"]!!.jsonPrimitive!!.content
|
||||||
StreamTapeExtractor(client).videoFromUrl(stapeUrl)
|
StreamTapeExtractor(client).videoFromUrl(stapeUrl)
|
||||||
@ -321,12 +319,10 @@ class AnimeFlv : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
title = "Preferred quality"
|
title = "Preferred quality"
|
||||||
entries = arrayOf(
|
entries = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
"YourUpload", "DoodStream", "StreamTape",
|
"YourUpload", "DoodStream", "StreamTape",
|
||||||
) // video servers without resolution
|
) // video servers without resolution
|
||||||
entryValues = arrayOf(
|
entryValues = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
"YourUpload", "DoodStream", "StreamTape",
|
"YourUpload", "DoodStream", "StreamTape",
|
||||||
) // video servers without resolution
|
) // video servers without resolution
|
||||||
setDefaultValue("Okru:720p")
|
setDefaultValue("Okru:720p")
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'AnimeLatinoHD'
|
extName = 'AnimeLatinoHD'
|
||||||
pkgNameSuffix = 'es.animelatinohd'
|
pkgNameSuffix = 'es.animelatinohd'
|
||||||
extClass = '.AnimeLatinoHD'
|
extClass = '.AnimeLatinoHD'
|
||||||
extVersionCode = 23
|
extVersionCode = 24
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13,7 +13,6 @@ dependencies {
|
|||||||
implementation(project(':lib-filemoon-extractor'))
|
implementation(project(':lib-filemoon-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
|||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -178,19 +177,6 @@ class AnimeLatinoHD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
fetchUrls(locationsDdh).map { url ->
|
fetchUrls(locationsDdh).map { url ->
|
||||||
val language = if (item["languaje"]!!.jsonPrimitive!!.content == "1") "[Lat] " else "[Sub] "
|
val language = if (item["languaje"]!!.jsonPrimitive!!.content == "1") "[Lat] " else "[Sub] "
|
||||||
val embedUrl = url.lowercase()
|
val embedUrl = url.lowercase()
|
||||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
|
||||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
|
||||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
|
||||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
|
||||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
|
||||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
|
||||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
|
||||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
|
||||||
embedUrl.contains("sblanh.com") || embedUrl.contains("lvturbo.com")
|
|
||||||
) {
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, language)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
if (embedUrl.contains("filemoon")) {
|
if (embedUrl.contains("filemoon")) {
|
||||||
FilemoonExtractor(client).videosFromUrl(url, language)
|
FilemoonExtractor(client).videosFromUrl(url, language)
|
||||||
.also(videoList::addAll)
|
.also(videoList::addAll)
|
||||||
@ -418,8 +404,6 @@ class AnimeLatinoHD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val options = arrayOf(
|
val options = arrayOf(
|
||||||
"[Sub] Okru:1080p", "[Sub] Okru:720p", "[Sub] Okru:480p", "[Sub] Okru:360p", "[Sub] Okru:240p", // Okru [Sub]
|
"[Sub] Okru:1080p", "[Sub] Okru:720p", "[Sub] Okru:480p", "[Sub] Okru:360p", "[Sub] Okru:240p", // Okru [Sub]
|
||||||
"[Lat] Okru:1080p", "[Lat] Okru:720p", "[Lat] Okru:480p", "[Lat] Okru:360p", "[Lat] Okru:240p", // Okru [Lat]
|
"[Lat] Okru:1080p", "[Lat] Okru:720p", "[Lat] Okru:480p", "[Lat] Okru:360p", "[Lat] Okru:240p", // Okru [Lat]
|
||||||
"[Sub] StreamSB:1080p", "[Sub] StreamSB:720p", "[Sub] StreamSB:480p", "[Sub] StreamSB:360p", "[Sub] StreamSB:240p", // StreamSB [Sub]
|
|
||||||
"[Lat] StreamSB:1080p", "[Lat] StreamSB:720p", "[Lat] StreamSB:480p", "[Lat] StreamSB:360p", "[Lat] StreamSB:240p", // StreamSB [Lat]
|
|
||||||
"[Sub] StreamTape", "[Lat] StreamTape", // video servers without resolution
|
"[Sub] StreamTape", "[Lat] StreamTape", // video servers without resolution
|
||||||
"[Sub] DoodStream", "[Lat] DoodStream", // video servers without resolution
|
"[Sub] DoodStream", "[Lat] DoodStream", // video servers without resolution
|
||||||
"[Sub] SolidFiles", "[Lat] SolidFiles", // video servers without resolution
|
"[Sub] SolidFiles", "[Lat] SolidFiles", // video servers without resolution
|
||||||
|
@ -5,13 +5,12 @@ ext {
|
|||||||
extName = 'AsiaLiveAction'
|
extName = 'AsiaLiveAction'
|
||||||
pkgNameSuffix = 'es.asialiveaction'
|
pkgNameSuffix = 'es.asialiveaction'
|
||||||
extClass = '.AsiaLiveAction'
|
extClass = '.AsiaLiveAction'
|
||||||
extVersionCode = 19
|
extVersionCode = 20
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
@ -99,12 +98,7 @@ class AsiaLiveAction : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
document.select("script").forEach { script ->
|
document.select("script").forEach { script ->
|
||||||
if (script.data().contains("var videosJap = [") || script.data().contains("var videosCor = [")) {
|
if (script.data().contains("var videosJap = [") || script.data().contains("var videosCor = [")) {
|
||||||
val content = script.data()
|
val content = script.data()
|
||||||
val sbDomains = arrayOf("sbfull", "sbplay", "cloudemb", "sbplay", "embedsb", "pelistop", "streamsb", "sbplay", "sbspeed")
|
|
||||||
if (sbDomains.any { s -> content.contains(s) }) {
|
|
||||||
val url = content.substringAfter(",['SB','").substringBefore("',0,0]")
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
if (content.contains("okru")) {
|
if (content.contains("okru")) {
|
||||||
val url = content.substringAfter(",['OK','").substringBefore("',0,0]")
|
val url = content.substringAfter(",['OK','").substringBefore("',0,0]")
|
||||||
val videos = OkruExtractor(client).videosFromUrl(url)
|
val videos = OkruExtractor(client).videosFromUrl(url)
|
||||||
@ -208,8 +202,11 @@ class AsiaLiveAction : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", // Okru
|
"Okru:1080p",
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", // StreamSB
|
"Okru:720p",
|
||||||
|
"Okru:480p",
|
||||||
|
"Okru:360p",
|
||||||
|
"Okru:240p", // Okru
|
||||||
)
|
)
|
||||||
val videoQualityPref = ListPreference(screen.context).apply {
|
val videoQualityPref = ListPreference(screen.context).apply {
|
||||||
key = "preferred_quality"
|
key = "preferred_quality"
|
||||||
|
@ -5,14 +5,13 @@ ext {
|
|||||||
extName = 'Cuevana'
|
extName = 'Cuevana'
|
||||||
pkgNameSuffix = 'es.cuevana'
|
pkgNameSuffix = 'es.cuevana'
|
||||||
extClass = '.Cuevana'
|
extClass = '.Cuevana'
|
||||||
extVersionCode = 18
|
extVersionCode = 19
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-yourupload-extractor'))
|
implementation(project(':lib-yourupload-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation project(path: ':lib-streamsb-extractor')
|
|
||||||
implementation project(path: ':lib-okru-extractor')
|
implementation project(path: ':lib-okru-extractor')
|
||||||
implementation project(path: ':lib-voe-extractor')
|
implementation project(path: ':lib-voe-extractor')
|
||||||
implementation project(path: ':lib-streamtape-extractor')
|
implementation project(path: ':lib-streamtape-extractor')
|
||||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
@ -164,20 +163,7 @@ class Cuevana : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
|
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
|
||||||
?.let { videoList.add(it) }
|
?.let { videoList.add(it) }
|
||||||
}
|
}
|
||||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
|
||||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
|
||||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
|
||||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
|
||||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
|
||||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
|
||||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
|
||||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
|
||||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com")
|
|
||||||
) {
|
|
||||||
runCatching {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
|
||||||
}.getOrNull()?.let { videoList.addAll(it) }
|
|
||||||
}
|
|
||||||
if (embedUrl.contains("okru")) {
|
if (embedUrl.contains("okru")) {
|
||||||
videoList.addAll(
|
videoList.addAll(
|
||||||
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
||||||
@ -303,7 +289,6 @@ class Cuevana : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
||||||
"StreamTape", "Amazon", "Voex", "DoodStream", "YourUpload",
|
"StreamTape", "Amazon", "Voex", "DoodStream", "YourUpload",
|
||||||
)
|
)
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'Doramasflix'
|
extName = 'Doramasflix'
|
||||||
pkgNameSuffix = 'es.doramasflix'
|
pkgNameSuffix = 'es.doramasflix'
|
||||||
extClass = '.Doramasflix'
|
extClass = '.Doramasflix'
|
||||||
extVersionCode = 6
|
extVersionCode = 7
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13,7 +13,6 @@ dependencies {
|
|||||||
implementation(project(':lib-mixdrop-extractor'))
|
implementation(project(':lib-mixdrop-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-voe-extractor'))
|
implementation(project(':lib-voe-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -347,28 +346,12 @@ class Doramasflix : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
VoeExtractor(client).videoFromUrl(link, "Voex")?.let { videos.add(it) }
|
VoeExtractor(client).videoFromUrl(link, "Voex")?.let { videos.add(it) }
|
||||||
} catch (_: Exception) {}
|
} catch (_: Exception) {}
|
||||||
}
|
}
|
||||||
if (link.contains("sbembed.com") || link.contains("sbembed1.com") || link.contains("sbplay.org") ||
|
|
||||||
link.contains("sbvideo.net") || link.contains("streamsb.net") || link.contains("sbplay.one") ||
|
|
||||||
link.contains("cloudemb.com") || link.contains("playersb.com") || link.contains("tubesb.com") ||
|
|
||||||
link.contains("sbplay1.com") || link.contains("embedsb.com") || link.contains("watchsb.com") ||
|
|
||||||
link.contains("sbplay2.com") || link.contains("japopav.tv") || link.contains("viewsb.com") ||
|
|
||||||
link.contains("sbfast") || link.contains("sbfull.com") || link.contains("javplaya.com") ||
|
|
||||||
link.contains("ssbstream.net") || link.contains("p1ayerjavseen.com") || link.contains("sbthe.com") ||
|
|
||||||
link.contains("vidmovie.xyz") || link.contains("sbspeed.com") || link.contains("streamsss.net") ||
|
|
||||||
link.contains("sblanh.com") || link.contains("tvmshow.com") || link.contains("sbanh.com") ||
|
|
||||||
link.contains("streamovies.xyz")
|
|
||||||
) {
|
|
||||||
try {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(link, headers).let { videos.addAll(it) }
|
|
||||||
} catch (_: Exception) {}
|
|
||||||
}
|
|
||||||
return videos
|
return videos
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
||||||
"StreamTape", "Voex", "DoodStream", "YourUpload", "MixDrop",
|
"StreamTape", "Voex", "DoodStream", "YourUpload", "MixDrop",
|
||||||
)
|
)
|
||||||
|
@ -5,14 +5,13 @@ ext {
|
|||||||
extName = 'FanPelis'
|
extName = 'FanPelis'
|
||||||
pkgNameSuffix = 'es.fanpelis'
|
pkgNameSuffix = 'es.fanpelis'
|
||||||
extClass = '.FanPelis'
|
extClass = '.FanPelis'
|
||||||
extVersionCode = 7
|
extVersionCode = 8
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -103,19 +102,7 @@ class FanPelis : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
var url = iframe.attr("src").ifEmpty { iframe.attr("data-src") }
|
var url = iframe.attr("src").ifEmpty { iframe.attr("data-src") }
|
||||||
(if (url.startsWith("//")) "https:$url" else url).also { url = it }
|
(if (url.startsWith("//")) "https:$url" else url).also { url = it }
|
||||||
val embedUrl = url.lowercase()
|
val embedUrl = url.lowercase()
|
||||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
|
||||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
|
||||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
|
||||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
|
||||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
|
||||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
|
||||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
|
||||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
|
||||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com") || embedUrl.contains("lvturbo.com")
|
|
||||||
) {
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
if (embedUrl.contains("streamtape")) {
|
if (embedUrl.contains("streamtape")) {
|
||||||
val video = StreamTapeExtractor(client).videoFromUrl(url, "Streamtape")
|
val video = StreamTapeExtractor(client).videoFromUrl(url, "Streamtape")
|
||||||
if (video != null) {
|
if (video != null) {
|
||||||
@ -247,13 +234,17 @@ class FanPelis : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
title = "Preferred quality"
|
title = "Preferred quality"
|
||||||
entries = arrayOf(
|
entries = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
"YourUpload", "DoodStream", "StreamTape",
|
"YourUpload", "DoodStream", "StreamTape",
|
||||||
) // video servers without resolution
|
) // video servers without resolution
|
||||||
entryValues = arrayOf(
|
entryValues = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p",
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
"Okru:720p",
|
||||||
"DoodStream", "StreamTape",
|
"Okru:480p",
|
||||||
|
"Okru:360p",
|
||||||
|
"Okru:240p",
|
||||||
|
"Okru:144p", // Okru
|
||||||
|
"DoodStream",
|
||||||
|
"StreamTape",
|
||||||
) // video servers without resolution
|
) // video servers without resolution
|
||||||
setDefaultValue("DoodStream")
|
setDefaultValue("DoodStream")
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'Gnula'
|
extName = 'Gnula'
|
||||||
pkgNameSuffix = 'es.gnula'
|
pkgNameSuffix = 'es.gnula'
|
||||||
extClass = '.Gnula'
|
extClass = '.Gnula'
|
||||||
extVersionCode = 5
|
extVersionCode = 6
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15,7 +15,6 @@ dependencies {
|
|||||||
implementation project(path: ':lib-yourupload-extractor')
|
implementation project(path: ':lib-yourupload-extractor')
|
||||||
implementation project(path: ':lib-voe-extractor')
|
implementation project(path: ':lib-voe-extractor')
|
||||||
implementation project(path: ':lib-dood-extractor')
|
implementation project(path: ':lib-dood-extractor')
|
||||||
implementation project(path: ':lib-streamsb-extractor')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
@ -236,20 +235,6 @@ class Gnula : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
if (embedUrl.contains("doodstream") || embedUrl.contains("dood.")) {
|
if (embedUrl.contains("doodstream") || embedUrl.contains("dood.")) {
|
||||||
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)?.let { videoList.add(it) }
|
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)?.let { videoList.add(it) }
|
||||||
}
|
}
|
||||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
|
||||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
|
||||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
|
||||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
|
||||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
|
||||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
|
||||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
|
||||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
|
||||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com")
|
|
||||||
) {
|
|
||||||
runCatching {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
|
||||||
}.getOrNull()?.let { videoList.addAll(it) }
|
|
||||||
}
|
|
||||||
if (embedUrl.contains("okru")) {
|
if (embedUrl.contains("okru")) {
|
||||||
videoList.addAll(
|
videoList.addAll(
|
||||||
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
||||||
@ -269,7 +254,7 @@ class Gnula : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val videoSorted = this.sortedWith(
|
val videoSorted = this.sortedWith(
|
||||||
compareBy<Video> { it.quality.replace("[0-9]".toRegex(), "") }.thenByDescending { getNumberFromString(it.quality) },
|
compareBy<Video> { it.quality.replace("[0-9]".toRegex(), "") }.thenByDescending { getNumberFromString(it.quality) },
|
||||||
).toTypedArray()
|
).toTypedArray()
|
||||||
val userPreferredQuality = preferences.getString("preferred_quality", "StreamSB:1080p")
|
val userPreferredQuality = preferences.getString("preferred_quality", "Okru:1080p")
|
||||||
val preferredIdx = videoSorted.indexOfFirst { x -> x.quality == userPreferredQuality }
|
val preferredIdx = videoSorted.indexOfFirst { x -> x.quality == userPreferredQuality }
|
||||||
if (preferredIdx != -1) {
|
if (preferredIdx != -1) {
|
||||||
videoSorted.drop(preferredIdx + 1)
|
videoSorted.drop(preferredIdx + 1)
|
||||||
@ -357,14 +342,13 @@ class Gnula : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"Uqload", "Upload", "SolidFiles", "StreamTape", "DoodStream", "Voex", // video servers without resolution
|
"Uqload", "Upload", "SolidFiles", "StreamTape", "DoodStream", "Voex", // video servers without resolution
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
)
|
)
|
||||||
val videoQualityPref = ListPreference(screen.context).apply {
|
val videoQualityPref = ListPreference(screen.context).apply {
|
||||||
key = "preferred_quality"
|
key = "preferred_quality"
|
||||||
title = "Preferred quality"
|
title = "Preferred quality"
|
||||||
entries = qualities
|
entries = qualities
|
||||||
entryValues = qualities
|
entryValues = qualities
|
||||||
setDefaultValue("StreamSB:1080p")
|
setDefaultValue("Okru:1080p")
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
|
|
||||||
setOnPreferenceChangeListener { _, newValue ->
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
|
@ -6,7 +6,7 @@ ext {
|
|||||||
extName = 'Hentaila'
|
extName = 'Hentaila'
|
||||||
pkgNameSuffix = 'es.hentaila'
|
pkgNameSuffix = 'es.hentaila'
|
||||||
extClass = '.Hentaila'
|
extClass = '.Hentaila'
|
||||||
extVersionCode = 14
|
extVersionCode = 15
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
containsNsfw = true
|
containsNsfw = true
|
||||||
}
|
}
|
||||||
@ -14,7 +14,6 @@ ext {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-burstcloud-extractor'))
|
implementation(project(':lib-burstcloud-extractor'))
|
||||||
implementation(project(':lib-mp4upload-extractor'))
|
implementation(project(':lib-mp4upload-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-yourupload-extractor'))
|
implementation(project(':lib-yourupload-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.burstcloudextractor.BurstCloudExtractor
|
import eu.kanade.tachiyomi.lib.burstcloudextractor.BurstCloudExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
@ -209,10 +208,6 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
videoList.addAll(Mp4uploadExtractor(client).videosFromUrl(urlServer, headers = headers))
|
videoList.addAll(Mp4uploadExtractor(client).videosFromUrl(urlServer, headers = headers))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nameServer.lowercase() == "stream") {
|
|
||||||
videoList.addAll(StreamSBExtractor(client).videosFromUrl(urlServer, headers = headers))
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nameServer.lowercase() == "burst") {
|
if (nameServer.lowercase() == "burst") {
|
||||||
videoList.addAll(BurstCloudExtractor(client).videoFromUrl(urlServer, headers = headers))
|
videoList.addAll(BurstCloudExtractor(client).videoFromUrl(urlServer, headers = headers))
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'Latanime'
|
extName = 'Latanime'
|
||||||
pkgNameSuffix = 'es.latanime'
|
pkgNameSuffix = 'es.latanime'
|
||||||
extClass = '.Latanime'
|
extClass = '.Latanime'
|
||||||
extVersionCode = 11
|
extVersionCode = 12
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14,7 +14,6 @@ dependencies {
|
|||||||
implementation(project(':lib-yourupload-extractor'))
|
implementation(project(':lib-yourupload-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
|||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -309,19 +308,6 @@ class Latanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val videos = YourUploadExtractor(client).videoFromUrl(url, headers = headers, name = "Original", prefix = prefix)
|
val videos = YourUploadExtractor(client).videoFromUrl(url, headers = headers, name = "Original", prefix = prefix)
|
||||||
videoList.addAll(videos)
|
videoList.addAll(videos)
|
||||||
}
|
}
|
||||||
url.contains("sbembed.com") || url.contains("sbembed1.com") || url.contains("sbplay.org") ||
|
|
||||||
url.contains("sbvideo.net") || url.contains("streamsb.net") || url.contains("sbplay.one") ||
|
|
||||||
url.contains("cloudemb.com") || url.contains("playersb.com") || url.contains("tubesb.com") ||
|
|
||||||
url.contains("sbplay1.com") || url.contains("embedsb.com") || url.contains("watchsb.com") ||
|
|
||||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
|
||||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("javplaya.com") ||
|
|
||||||
url.contains("ssbstream.net") || url.contains("p1ayerjavseen.com") || url.contains("sbthe.com") ||
|
|
||||||
url.contains("sbchill.com") || url.contains("sblongvu.com") || url.contains("sbanh.com") ||
|
|
||||||
url.contains("sblanh.com")
|
|
||||||
-> {
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'LegionAnime'
|
extName = 'LegionAnime'
|
||||||
pkgNameSuffix = 'es.legionanime'
|
pkgNameSuffix = 'es.legionanime'
|
||||||
extClass = '.LegionAnime'
|
extClass = '.LegionAnime'
|
||||||
extVersionCode = 22
|
extVersionCode = 23
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14,7 +14,6 @@ dependencies {
|
|||||||
implementation(project(':lib-yourupload-extractor'))
|
implementation(project(':lib-yourupload-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-gdriveplayer-extractor'))
|
implementation(project(':lib-gdriveplayer-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -279,11 +279,6 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
url.contains("sb") -> {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
url.contains("jkanime") -> {
|
url.contains("jkanime") -> {
|
||||||
listOf(JkanimeExtractor(client).getDesuFromUrl(url))
|
listOf(JkanimeExtractor(client).getDesuFromUrl(url))
|
||||||
}
|
}
|
||||||
@ -405,7 +400,6 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", // Okru
|
||||||
"StreamSB:360p", "StreamSB:480p", "StreamSB:720p", "StreamSB:1080p", // StreamSB
|
|
||||||
"Xtreme S", "Nozomi", "Desu", "F1S-TAPE", "F1NIX", // video servers without resolution
|
"Xtreme S", "Nozomi", "Desu", "F1S-TAPE", "F1NIX", // video servers without resolution
|
||||||
)
|
)
|
||||||
val videoQualityPref = ListPreference(screen.context).apply {
|
val videoQualityPref = ListPreference(screen.context).apply {
|
||||||
|
@ -5,14 +5,13 @@ ext {
|
|||||||
extName = 'LocoPelis'
|
extName = 'LocoPelis'
|
||||||
pkgNameSuffix = 'es.locopelis'
|
pkgNameSuffix = 'es.locopelis'
|
||||||
extClass = '.LocoPelis'
|
extClass = '.LocoPelis'
|
||||||
extVersionCode = 14
|
extVersionCode = 15
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -92,19 +91,6 @@ class LocoPelis : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
document.select(".tab_container .tab_content iframe").forEach { iframe ->
|
document.select(".tab_container .tab_content iframe").forEach { iframe ->
|
||||||
val url = iframe.attr("src")
|
val url = iframe.attr("src")
|
||||||
val embedUrl = url.lowercase()
|
val embedUrl = url.lowercase()
|
||||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
|
||||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
|
||||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
|
||||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
|
||||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
|
||||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
|
||||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
|
||||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
|
||||||
embedUrl.contains("sblanh.com")
|
|
||||||
) {
|
|
||||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
videoList.addAll(videos)
|
|
||||||
}
|
|
||||||
if (url.lowercase().contains("streamtape")) {
|
if (url.lowercase().contains("streamtape")) {
|
||||||
val video = StreamTapeExtractor(client).videoFromUrl(url, "Streamtape")
|
val video = StreamTapeExtractor(client).videoFromUrl(url, "Streamtape")
|
||||||
if (video != null) {
|
if (video != null) {
|
||||||
@ -262,13 +248,17 @@ class LocoPelis : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
title = "Preferred quality"
|
title = "Preferred quality"
|
||||||
entries = arrayOf(
|
entries = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
"YourUpload", "DoodStream", "StreamTape",
|
"YourUpload", "DoodStream", "StreamTape",
|
||||||
) // video servers without resolution
|
) // video servers without resolution
|
||||||
entryValues = arrayOf(
|
entryValues = arrayOf(
|
||||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
"Okru:1080p",
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
"Okru:720p",
|
||||||
"DoodStream", "StreamTape",
|
"Okru:480p",
|
||||||
|
"Okru:360p",
|
||||||
|
"Okru:240p",
|
||||||
|
"Okru:144p", // Okru
|
||||||
|
"DoodStream",
|
||||||
|
"StreamTape",
|
||||||
) // video servers without resolution
|
) // video servers without resolution
|
||||||
setDefaultValue("DoodStream")
|
setDefaultValue("DoodStream")
|
||||||
summary = "%s"
|
summary = "%s"
|
||||||
|
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'Pelisplushd'
|
extName = 'Pelisplushd'
|
||||||
pkgNameSuffix = 'es.pelisplushd'
|
pkgNameSuffix = 'es.pelisplushd'
|
||||||
extClass = '.PelisplushdFactory'
|
extClass = '.PelisplushdFactory'
|
||||||
extVersionCode = 39
|
extVersionCode = 40
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14,7 +14,6 @@ dependencies {
|
|||||||
implementation(project(':lib-streamlare-extractor'))
|
implementation(project(':lib-streamlare-extractor'))
|
||||||
implementation(project(':lib-yourupload-extractor'))
|
implementation(project(':lib-yourupload-extractor'))
|
||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
implementation(project(':lib-voe-extractor'))
|
implementation(project(':lib-voe-extractor'))
|
||||||
implementation(project(':lib-okru-extractor'))
|
implementation(project(':lib-okru-extractor'))
|
||||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
|||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
@ -161,9 +160,7 @@ open class Pelisplushd(override val name: String, override val baseUrl: String)
|
|||||||
private fun serverVideoResolver(url: String, server: String): List<Video>? {
|
private fun serverVideoResolver(url: String, server: String): List<Video>? {
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
try {
|
try {
|
||||||
if (server.lowercase() == "sbfast") {
|
if (server.lowercase() == "stp") {
|
||||||
return StreamSBExtractor(client).videosFromUrl(url, headers)
|
|
||||||
} else if (server.lowercase() == "stp") {
|
|
||||||
StreamTapeExtractor(client).videoFromUrl(url, "StreamTape")?.let { videoList.add(it) }
|
StreamTapeExtractor(client).videoFromUrl(url, "StreamTape")?.let { videoList.add(it) }
|
||||||
} else if (server.lowercase() == "uwu") {
|
} else if (server.lowercase() == "uwu") {
|
||||||
if (!url.contains("disable")) {
|
if (!url.contains("disable")) {
|
||||||
@ -319,7 +316,6 @@ open class Pelisplushd(override val name: String, override val baseUrl: String)
|
|||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
|
||||||
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
||||||
"StreamTape", "Amazon", "Voex", "DoodStream", "YourUpload",
|
"StreamTape", "Amazon", "Voex", "DoodStream", "YourUpload",
|
||||||
)
|
)
|
||||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
|||||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -163,20 +162,6 @@ class Pelisplusph(override val name: String, override val baseUrl: String) : Pel
|
|||||||
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
|
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
|
||||||
?.let { videoList.add(it) }
|
?.let { videoList.add(it) }
|
||||||
}
|
}
|
||||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
|
||||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
|
||||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
|
||||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
|
||||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
|
||||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
|
||||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
|
||||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
|
||||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com") || embedUrl.contains("lvturbo.com")
|
|
||||||
) {
|
|
||||||
runCatching {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
|
||||||
}.getOrNull()?.let { videoList.addAll(it) }
|
|
||||||
}
|
|
||||||
if (embedUrl.contains("okru") || embedUrl.contains("ok.ru")) {
|
if (embedUrl.contains("okru") || embedUrl.contains("ok.ru")) {
|
||||||
videoList.addAll(
|
videoList.addAll(
|
||||||
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
||||||
@ -326,13 +311,8 @@ class Pelisplusph(override val name: String, override val baseUrl: String) : Pel
|
|||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"StreamSB:1080p",
|
|
||||||
"StreamSB:720p",
|
|
||||||
"StreamSB:480p",
|
|
||||||
"StreamSB:360p",
|
|
||||||
"StreamSB:240p",
|
|
||||||
"StreamSB:144p", // StreamSB
|
|
||||||
"DoodStream",
|
"DoodStream",
|
||||||
|
"Voex",
|
||||||
)
|
)
|
||||||
val videoQualityPref = ListPreference(screen.context).apply {
|
val videoQualityPref = ListPreference(screen.context).apply {
|
||||||
key = "preferred_quality"
|
key = "preferred_quality"
|
||||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
|||||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
|
||||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
@ -180,20 +179,7 @@ class Pelisplusto(override val name: String, override val baseUrl: String) : Pel
|
|||||||
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
|
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
|
||||||
?.let { videoList.add(it) }
|
?.let { videoList.add(it) }
|
||||||
}
|
}
|
||||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
|
||||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
|
||||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
|
||||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
|
||||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
|
||||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
|
||||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
|
||||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
|
||||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com") || embedUrl.contains("lvturbo.com")
|
|
||||||
) {
|
|
||||||
runCatching {
|
|
||||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
|
||||||
}.getOrNull()?.let { videoList.addAll(it) }
|
|
||||||
}
|
|
||||||
if (embedUrl.contains("okru") || embedUrl.contains("ok.ru")) {
|
if (embedUrl.contains("okru") || embedUrl.contains("ok.ru")) {
|
||||||
videoList.addAll(
|
videoList.addAll(
|
||||||
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
||||||
@ -274,12 +260,7 @@ class Pelisplusto(override val name: String, override val baseUrl: String) : Pel
|
|||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val qualities = arrayOf(
|
val qualities = arrayOf(
|
||||||
"StreamSB:1080p",
|
"Voex",
|
||||||
"StreamSB:720p",
|
|
||||||
"StreamSB:480p",
|
|
||||||
"StreamSB:360p",
|
|
||||||
"StreamSB:240p",
|
|
||||||
"StreamSB:144p", // StreamSB
|
|
||||||
"DoodStream",
|
"DoodStream",
|
||||||
)
|
)
|
||||||
val videoQualityPref = ListPreference(screen.context).apply {
|
val videoQualityPref = ListPreference(screen.context).apply {
|
||||||
|
@ -8,13 +8,12 @@ ext {
|
|||||||
extName = 'EmpireStreaming'
|
extName = 'EmpireStreaming'
|
||||||
pkgNameSuffix = 'fr.empirestreaming'
|
pkgNameSuffix = 'fr.empirestreaming'
|
||||||
extClass = '.EmpireStreaming'
|
extClass = '.EmpireStreaming'
|
||||||
extVersionCode = 12
|
extVersionCode = 13
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':lib-voe-extractor'))
|
implementation(project(':lib-voe-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user